4

Entendendo Interfaces

#C# #Java
Willams Sousa
Willams Sousa

Entendendo Interfaces


Olá, esse texto não terá exemplos nem nada, será apenas conceitual. A ideia e fazer algumas analogias e explicar interfaces para quem tá aprendendo agora Programação Orientada a Objetos, mas não é para quem não conhece POO, eu não vou entrar em detalhes sobre cada aspécto de POO e, assim, é importante que o leitor esteja em um ponto onde apenas interfaces estão um pouco confusas, mas entenda e/ou conheça os demais conceitos.


A ler vamos:


Para entender o conceito de interfaces é importante entender outra característica de POO: classes abstratas. Linguagens como C#, Java ou C++ permitem que você crie uma classe abstrata que serve como base para classes mais específicas. Por exemplo, a classe Shape pode conter a base para todas as demais figuras dentro de um programa. Assim, você teria as classes Retangulo, Quadrado, Triangulo todas herdando da classe Shape.


A herança permite a reutilização de código e deixa o programa extensível também. Para alcançar esses benefícios as linguagens permitem o conceito de "é um", que significa que um quadrado É uma figura, esse 'fenômeno' é conhecido como Polimorfismo.


Porém, com exceção de C++, as linguagens citadas não permite herança múltipla. Dessa forma, não é possível ter um Radio, um Relógio e criar uma classe chamada RadioRelogio que herda de Radio e de Relógio. Para permitir os mesmos benefícios da herança múltipla as linguagens Java e C# usam as Interfaces. Então vamos entender melhor isso de uma vez por todas.


Quando lemos algum livro ou artigo sobre esse tópico é comum encontrarmos a seguinte explicação:


"Interface é como um contrato que sua classe assina"


Então mostram alguns exemplos e alguns detalhes de implementação. Aprendemos que temos que implementar os métodos que a interface possui, etc..


Embora isso seja correto, eu prefiro outra maneira de abstrair esse conceito, acompanhe:


"interfaces são comportamentos que sua classe decide possuir"


Essa nova maneira de pensar a respeito me parece melhor porque ajuda a entender a ideia de herança múltipla.


Vamos pensar em nosso RadioRelogio. É visível que a classe RadioRelogio precisa se comportar como um radio e também como um relógio. Assim, as interfaces IRadio e IRelogio vao possuir métodos que descrevem como um Radio ou um Relogio deve se comportar. Contudo, o poder das interfaces é mais do que apenas a ideia de 'herança múltipla', interfaces permitem que usemos 'interface-based programming' ou então 'programação orientada a interfaces'.


Quem programa em Java ou C# já viu interfaces como IEnumerator, IComparable, IDrawable, ISerializable, IAlgumComportamento. Então você implementa algumas dessas interfaces e como um passe de mágica sua classe agora pode entrar pro time dos Comparables ou Drawables (etc..).


Voltando ao exemplo do RadioRelogio, vamos imaginar que temos um sistema em uma loja de eletronica, não seria incomum que tivéssemos uma interface chamada IWrecked (quebrado), então poderiamos implementar a interface Radio, a interface Relogio e também a interface Wrecked, ou seja, temos um rádio que também é um relógio e que está quebrado!


Quando direcionamos nossas ideias para o conceito de 'comportamento', podemos segregar mais nossa aplicação definindo os comportamentos e como as classes vão se comportar. Se mais tarde a aplicação evoluir basta criar mais alguns comportamentos e implementar esses novos comportamentos sem precisar mexer no código anterior.


É isso pessoal, sei que é estranho um texto de programação sem uma linha sequer de código, mas não estou no meu desktop e assim que tiver nele vou retaforar esse texto. Deixem um feedback aí. De repente, escrevo sobre SOLID e Design Patterns dando continuidade a esse tema.

4
101

Comentários (5)

0
Hejociara Carneiro

Hejociara Carneiro

17/09/2021 22:20

William, adorei a sua explicação. Foi um divisor de águas pra mim.

Eu já havia visto outras explicações sobre isso, mas você deu uma nova conotação.


Obrigada por compartilhar o seu conhecimento.

0
Isaque Moura

Isaque Moura

29/12/2020 00:59

Um dos melhores textos que já lí sobre o assunto, continue compartilhando seu conhecimento conosco Wiliams, precisamos. Parabéns!

0
Felipe Aguiar

Felipe Aguiar

28/12/2020 23:34

Eu lembro que quandio estava aprendendo POO isso não entrava na minha cabeça kkk, muito bom o conteúdo Williams!

0
O

Odilon Liberato

28/12/2020 21:24

Gostei , texto claro e bem objetivo !

0
Eduardo Oliveira

Eduardo Oliveira

28/12/2020 20:10

Muito bom !!! :D

Tento ser um sujeito legal e gosto de aprender linguagens de programação.

Brasil