Por que usamos a interface? É apenas para padronização?

Por que usamos a interface?

É apenas para padronização?

Objetivos das Interfaces

  • criar software fracamente acoplado
  • projeto de suporte por contrato (um implementador deve fornecer toda a interface)
  • permitir software plugável
  • permitir que objects diferentes interajam facilmente
  • ocultar detalhes de implementação das classs uns dos outros
  • facilitar a reutilização de software

Analogia 1 : Muito parecido com o ônibus espacial dos EUA, a espaçonave russa Soyuz e a chinesa Shenzhou 5 podem todas ancorar na Estação Espacial Internacional, porque implementam a mesma interface de ancoragem. (Este é apenas um exemplo – não sei se é verdade na vida real, mas vamos suspender nossa descrença por causa de um exemplo)

Analogia 2 : Como você pode conectar vários monitores de computador em seu computador doméstico. Você pode conectar uma TV do tamanho de uma parede a ela, um velho CRT (o tipo grosso), uma canvas plana de 20 “ou uma máquina braille para cegos para” ver “pelo toque. Há compatibilidade entre esses vários dispositivos diferentes computador porque todos concordam com os padrões de interface.

Detalhes das interfaces C # – Com as interfaces C # / OOP você está fazendo o mesmo tipo de coisa, mas no mundo invisível / virtual.

Você está certo sobre padronização , mas também flexibilidade , escalabilidade , extensibilidade , capacidade de manutenção , capacidade de reutilização , testabilidade e poder .

(Quanto mais você usar interfaces de software, mais essas “palavras de efeito” serão compreendidas. E sempre considere interfaces no mundo real, porque elas nos fizeram igualmente bem.)

Uma interface é usada para descrever o que uma coisa implementada pode fazer. Então você tem a possibilidade de tratar vários objects que implementam a mesma interface como um tipo dessa interface.

Por exemplo:

 public interface IMyInterface{ public void DoFirst(); public int DoSecond(); } public class A : IMyInterface{ //class has to implement DoFirst and DoSecond public void DoFirst(){ Console.WriteLine("Blubb1"); } public int DoSecond(){ Console.WriteLine("Blubb2"); return 2; } } public class B : IMyInterface{ //class has to implement DoFirst and DoSecond public void DoFirst(){ Console.WriteLine("Blibb1"); } public int DoSecond(){ Console.WriteLine("Blibb2"); return 4; } } 

As classs implementam a interface de várias maneiras. Mas você pode usá-los como IMyInterface. Por exemplo:

 public static void DoMethodsInInterface(IMyInterface inter){ inter.DoFirst(); inter.DoSecond(); } public static void main(){ DoMethodsInInterface(new A()); DoMethodsInInterface(new B()); //Or use it in a List List interlist = new List(); interlist.Add(new A()); interlist.Add(new B()); foreach(IMyInterface inter in interlist){ inter.DoFirst(); } } 

Espero que isso deixe um pouco claro por que as interfaces são úteis.

É para interface :), para que você possa fazer interface entre as coisas, é útil quando você tem

  • várias implementações do mesmo material
  • quando você aplica uma interface a várias classs diferentes porque você precisa de algum tipo de convenção de que essas classs são capazes de fazer algumas coisas ou ter alguma funcionalidade

A principal razão pela qual as interfaces são usadas em linguagens como C # / Java é porque essas linguagens não suportam inheritance múltipla (class) (veja Qual é o problema exato com inheritance múltipla? ).

Mas a implementação múltipla (interface) é permitida, permitindo que as classs sejam usadas de maneiras diferentes.

Aqui está a visão de alto nível …

Interfaces desempenham um grande papel no conceito de ocultação de informações .

Basicamente, eles ajudam a ocultar os detalhes da implementação da sua class, de forma que uma class chamadora não tenha dependência dessa implementação. Portanto, usando interfaces, você pode modificar a implementação sem alterar a class de chamada. Isso tudo, por sua vez, limita a complexidade do seu código e facilita a manutenção a longo prazo.

Quando comecei a entender as interfaces, elas foram explicadas para mim como um “contrato que fornece uma descrição da sua class”. Não tenho certeza se isso vai ajudá-lo, mas se você pensar em uma interface para um carro, você pode dizer que ele dirige , quebra e gira . Então, desde que me leve do ponto A ao ponto B, eu realmente não tenho que saber como essas funções são implementadas.

Interfaces são um pouco estranhas. Eles suportam o design por contrato apenas por acreditarem que o mesmo nome e interface implementada significa o mesmo comportamento. Isso funciona apenas graças à documentação da API, ela precisa ser verificada por humanos. Isso torna as interfaces muito fracas. Uma maneira de contornar isso poderia ser formal. Por outro lado, as interfaces são muito fortes, muito rigorosas. Você não pode evoluir interfaces que muitas vezes ficam no caminho da reutilização. Isso é resolvido por protocolos – mecanismo em linguagens dinâmicas, que enviam mensagens (methods de chamada) e quando essa mensagem não é suportada pelo receptor, o retorno de chamada padrão é chamado. Ter protocolos concretos com restrições seria melhor.

Pense remotamente …

Existe um cliente e um servidor envolvidos aqui. Vamos dizer que eles estão fisicamente separados pela internet. O cliente está chamando um método cuja execução real acontece no servidor. Da perspectiva do cliente, o cliente não sabe nada sobre o object no servidor que executa a execução. No entanto, sabe qual método chamar. Porque enquanto construímos o programa cliente, estamos expostos apenas a uma interface (ou contrato). Nós não estamos expostos a todo o object que está realmente vivendo no servidor. Tente fazer alguns aplicativos de demonstração no .net, e você vai descobrir o resto. Programação feliz.

Por que usamos interfaces?

Algumas linguagens implementam chamadas de methods polimórficos usando vtables e descartam a maioria das informações de tipo, dificultando a definição de interfaces.

Então, às vezes, simplesmente usamos interfaces porque o design da linguagem exige isso.

Ao iniciar com uma interface, você pode implementar um proxy , permitindo assim o carregamento lento ou a execução de algumas verificações ao chamar os methods de uma implementação concreta.

A interface separa o tipo de dados da lógica de implementação.

Interface fornece protótipo modal que apenas contém declaração de funcionalidade de um comportamento específico.

e se vc quiser implementar esse comportamento em class, vc deve implementar essa interface na class, então a class tem essa funcionalidade de comportamento ou pode ter múltiplos comportamentos.

porque a class pode implementar várias interfaces.

Se alguém é como eu e aprende por exemplo e fazendo, ao invés de apenas explicação, aqui está algum código ….

Eu encontrei esta implementação de uma Rede Neural em C #, incluindo o download de projetos, que faz uso de Interfaces de uma maneira elegante e útil:

http://www.c-sharpcorner.com/UploadFile/rmcochran/AI_OOP_NeuralNet06192006090112AM/AI_OOP_NeuralNet.aspx

A seguir estão as principais razões para o uso de interfaces

  1. Extensibilidade
  2. Escondendo a Implementação
  3. Acessando object através de interfaces
  4. Acoplamento solto.

por favor, visite este link para saber sobre interfaces com o exemplo de código para download