Interface (computação) - Interface (computing)

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. 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.

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). 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 aos usuários e fabricantes grande flexibilidade na implementação de sistemas de computação . As interfaces de hardware podem ser paralelas com várias conexões elétricas que transportam partes dos dados simultaneamente ou seriais, onde os dados são enviados um bit por vez.

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; e em programas orientados a objetos, os objetos em um aplicativo podem precisar interagir por meio de métodos .

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. 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.

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.

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 A internamente atende aos requisitos da interface não é relevante para B , que está preocupado apenas com as especificações de a interface. (Veja também o princípio de substituição de Liskov .)

Em linguagens orientadas a objetos

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 declarando isso é considerada como implementando essa interface. 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.

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. 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, uma implementação falsa ou simulada 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 código e, portanto, não pode ser chamado; deve ser implementado por código não abstrato para ser executado quando for invocado. 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 marcador como não contêm nenhum método e servem para fornecer informações de tempo de execução para processamento genérico usando Reflection . 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.

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