Interface (computação)

Da Wikipédia, a enciclopédia livre
Ir para navegação Pular para pesquisar

Na computação, uma interface é uma fronteira compartilhada através da qual dois ou mais componentes separados de um sistema de computador trocam informações. A troca pode ser entre software , hardware de computador , dispositivos periféricos , humanos e combinações destes. [1] Alguns dispositivos de hardware de computador, como uma tela sensível ao toque , podem enviar e receber dados por meio da interface, enquanto outros, como um mouse ou microfone, podem fornecer apenas uma interface para enviar dados a um determinado sistema. [2]

Interfaces de hardware

Interfaces de hardware de um laptop : soquete de rede Ethernet (centro), à esquerda uma parte da porta VGA , à direita (superior) um soquete de porta de vídeo, à direita (inferior) um soquete USB 2.0.

As interfaces de hardware existem em muitos componentes, como os vários barramentos , dispositivos de armazenamento , outros dispositivos de E / S , etc. Uma interface de hardware é descrita pelos sinais mecânicos, elétricos e lógicos na interface e o protocolo para sequenciá-los (às vezes chamado sinalização). [3] Uma interface padrão, como SCSI , desacopla o design e introdução de hardware de computação, como dispositivos de E / S , do design e introdução de outros componentes de um sistema de computação, permitindo assim aos usuários e fabricantes grande flexibilidade na implementação de sistemas de computação. [3] As interfaces de hardware podem ser paralelascom várias conexões elétricas transportando partes dos dados simultaneamente ou serial onde os dados são enviados um bit de cada vez. [4]

Interfaces de software

Uma interface de software pode se referir a uma ampla gama de diferentes tipos de interface em diferentes "níveis": um sistema operacional pode fazer interface com peças de hardware. Os aplicativos ou programas em execução no sistema operacional podem precisar interagir por meio de fluxos de dados , filtros e pipelines; [5] e em programas orientados a objetos, os objetos dentro de uma aplicação podem precisar interagir por meio de métodos . [6]

Na prática

Um princípio fundamental do design é proibir o acesso a todos os recursos por padrão, permitindo o acesso apenas por meio de pontos de entrada bem definidos, ou seja, interfaces. [7] As interfaces de software fornecem acesso aos recursos do computador (como memória, CPU, armazenamento, etc.) do sistema de computador subjacente; o acesso direto (ou seja, não por meio de interfaces bem projetadas) a tais recursos por software pode ter ramificações importantes - às vezes desastrosas - para funcionalidade e estabilidade. [ citação necessária ]

As interfaces entre os componentes de software podem fornecer constantes , tipos de dados , tipos de procedimentos , especificações de exceção e assinaturas de método . Às vezes, as variáveis públicas também são definidas como parte de uma interface. [8]

A interface de um módulo de software A é deliberadamente definida separadamente da implementação desse módulo. Este último contém o código real dos procedimentos e métodos descritos na interface, bem como outras variáveis ​​"privadas", procedimentos, etc. Outro módulo de software B , por exemplo o cliente de A , que interage com A é forçado a fazê-lo apenas por meio da interface publicada. Uma vantagem prática desse arranjo é que substituir a implementação de A por outra implementação da mesma interface não deve causar a falha de B - como Aatende internamente os requisitos da interface não é relevante para B , que se preocupa apenas com as especificações da interface. (Veja também o princípio de substituição de Liskov .) [ Carece de fontes? ]

Em linguagens orientadas a objeto

Em algumas linguagens orientadas a objetos , especialmente aquelas sem herança múltipla completa , o termo interface é usado para definir um tipo abstrato que não contém dados, mas define comportamentos como assinaturas de método . Uma classe com código e dados para todos os métodos correspondentes a essa interface e que os declara implementa essa interface. [9] Além disso, mesmo em linguagens de herança única, pode-se implementar várias interfaces e, portanto, podem ser de tipos diferentes ao mesmo tempo. [10]

Uma interface é, portanto, uma definição de tipo ; em qualquer lugar que um objeto possa ser trocado (por exemplo, em uma chamada de função ou método ), o tipo do objeto a ser trocado pode ser definido em termos de uma de suas interfaces implementadas ou classes base, em vez de especificar a classe específica . Essa abordagem significa que qualquer classe que implemente essa interface pode ser usada. [ carece de fontes? ] Por exemplo, uma implementação fictícia pode ser usada para permitir que o desenvolvimento progrida antes que a implementação final esteja disponível. Em outro caso, um falso ou simuladoa implementação pode ser substituída durante o teste. Essas implementações de stub são substituídas por código real posteriormente no processo de desenvolvimento.

Normalmente, um método definido em uma interface não contém nenhum código e, portanto, não pode ser chamado; ele deve ser implementado por código não abstrato para ser executado quando for invocado. [ carece de fontes? ] Uma interface chamada " Stack" pode definir dois métodos: push()e pop(). Pode ser implementado de diferentes maneiras, por exemplo, FastStacke GenericStack- a primeira sendo rápida, trabalhando com uma estrutura de dados de tamanho fixo, e a segunda usando uma estrutura de dados que pode ser redimensionada, mas ao custo de uma velocidade um pouco menor.

Embora as interfaces possam conter muitos métodos, elas podem conter apenas um ou até mesmo nenhum. Por exemplo, a linguagem Java define a interface Readableque possui o método único ; várias implementações são usadas para diferentes fins, incluindo , , , , e . Interfaces de marcadores como não contêm métodos e servem para fornecer informações de tempo de execução para processamento genérico usando Reflection . [11]read()BufferedReaderFileReaderInputStreamReaderPipedReaderStringReaderSerializable

Programação para a interface

O uso de interfaces permite um estilo de programação denominado programação para a interface . A ideia por trás dessa abordagem é basear a lógica de programação nas interfaces dos objetos usados, em vez de nos detalhes de implementação internos. A programação para a interface reduz a dependência de especificações de implementação e torna o código mais reutilizável. [12]

Levando essa ideia ao extremo, a inversão de controle sai do contexto para injetar no código as implementações específicas da interface que será usada para realizar o trabalho.

Interfaces de usuário

Uma interface de usuário é um ponto de interação entre um computador e humanos; inclui qualquer número de modalidades de interação (como gráficos, som, posição, movimento, etc.) onde os dados são transferidos entre o usuário e o sistema de computador.

Veja também

Referências

  1. ^ Hookway, B. (2014). "Capítulo 1: O Assunto da Interface". Interface . MIT Press. pp. 1-58. ISBN 9780262525503.
  2. ^ IEEE 100 - O dicionário autorizado de termos dos padrões do IEEE . NYC, NY, EUA: IEEE Press. 2000. pp. 574–575. ISBN 9780738126012.
  3. ^ a b Blaauw, Gerritt A .; Brooks, Jr., Frederick P. (1997), "Capítulo 8.6, Device Interfaces", Computer Architecture-Concepts and Evolution , Addison-Wesley, pp. 489-493, ISBN  0-201-10557-8 Veja também: Patterson, David A .; Hennessey, John L. (2005), "Capítulo 8.5, Interfacing I / O Devices to the Processor, Memory and Operating System", Computer Organization and Design - The Hardware / Software Interface, Third Edition , Morgan Kaufmann, pp.  588–596 , ISBN 1-55860-604-1
  4. ^ Govindarajalu, B. (2008). "3.15 Interfaces e controladores periféricos - OG" . IBM PC e clones: Hardware, solução de problemas e manutenção . Tata McGraw-Hill Publishing Co. Ltd. pp. 142-144. ISBN 9780070483118. Página visitada em 15 de junho de 2018 .
  5. ^ Buyya, R. (2013). Dominar a computação em nuvem . Educação Tata McGraw-Hill. p. 2,13. ISBN 9781259029950.
  6. ^ Poo, D .; Kiong, D .; Ashok, S. (2008). “Capítulo 2: Objeto, Classe, Mensagem e Método”. Programação orientada a objetos e Java . Springer-Verlag. pp. 7–15. ISBN 9781846289637.
  7. ^ Bill Venners (2005-06-06). "Java de ponta: Princípios de Design de Padrões de Design: Programa para uma interface, não uma implementação - Uma Conversa com Erich Gamma, Parte III" . http://www.artima.com/index.jsp : desenvolvedor artima. Arquivado do original em 05/08/2011 . Página visitada em 2011-08-03 . Uma vez que você depende apenas das interfaces, você está desacoplado da implementação. Isso significa que a implementação pode variar e esse é um relacionamento de dependência saudável. Por exemplo, para fins de teste, você pode substituir uma implementação pesada de banco de dados por uma implementação simulada mais leve. Felizmente, com o suporte de refatoração de hoje, você não precisa mais criar uma interface desde o início. Você pode destilar uma interface a partir de uma classe concreta, uma vez que tenha todos os insights sobre um problema. A interface pretendida está apenas a uma 'interface de extração' refatorando. ...
  8. ^ Patterson, DA; Hennessy, JL (7 de agosto de 2004). Organização e projeto do computador: a interface de hardware / software (3ª ed.). Elsevier. p. 656. ISBN 9780080502571.
  9. ^ "O que é uma interface" . Os tutoriais de Java . Oráculo. Arquivado do original em 12/04/2012 . Recuperado em 01/05/2012 .
  10. ^ "Interfaces" . Os tutoriais de Java . Oráculo. Arquivado do original em 26/05/2012 . Recuperado em 01/05/2012 .
  11. ^ "Técnicas de melhoria de desempenho em serialização" . Java preciso. Arquivado do original em 24/08/2011 . Página visitada em 2011-08-04 . Falaremos inicialmente sobre a interface serializável. Esta é uma interface de marcador e não possui métodos.
  12. ^ Gamma; Leme; Johnson; Vlissides (1995). Padrões de projeto: elementos de software orientado a objetos reutilizáveis . Addison Wesley. pp.  17–18 . ISBN 9780201633610.