Interfaces se assemelham a classes abstratas. Se você entendeu bem o tópico sobre elas, não terá problemas aqui.

Vamos imaginar a seguinte situação: você está desenvolvendo uma aplicação para uma empresa que fabrica aparelhos eletrônicos diversos, como televisores, DVD Players, Tablets, Computadores e aparelhos de som.

É previsível que, como programador e diante dessa situação, você já comece a imaginar seu código contendo as classes "Televisor", "DVDPlayer", "Tablet", "Computador" e "AparelhoSom" e, em cada uma delas você fará planos para colocar as particularidades de cada um. Isso seria o que a maioria dos programadores pensaria e não está errado fazê-lo.

No entanto, algumas funções são comuns a todos os aparelhos citados, como, por exemplo, ligar e desligar e, se todos os aparelhos farão essas duas funções, é importante que não esqueçamos de cria-las em todas as classes e também seria interessante padroniza-las. Bem, é aí que entra a Interface. Seu papel é obrigar que todas as classes que “herdem” (esse não é o termo mais adequado para Interfaces, mas por enquanto deixemos assim) a Interface tenham que implementa-las.

Até aqui estamos diante das mesmas condições de uma classe abstrata, mas as diferenças começam a surgir agora. Uma classe abstrata pode conter métodos não abstratos, portanto com suas implementações feitas, enquanto em uma Interface isso não é possível. As Interfaces somente possuem assinaturas de métodos. Nelas os construtores também não são permitidos e, como ela não pode ser instanciada, eles também não são necessários. Vamos a um exemplo com códigos, para que tudo fique mais claro:

Interfaces - Programação Orientada a Objetos - POO

Vejam que, diferentemente de uma classe abstrata com métodos não abstratos, as Interfaces não aceitam corpo nos métodos:

Interfaces - Programação Orientada a Objetos - POO

Agora criarei uma classe chamada "DVDPlayer", que herdará essa simples Interface, vejam:

Interfaces - Programação Orientada a Objetos - POO

Agora vejam a questão da obrigatoriedade da implementação dos métodos. Vou tentar compilar essa aplicação e executa-la, mesmo sem ter criado, na classe "DVDPlayer", os métodos liga() e desliga(). Vejamos o que acontece:

Interfaces - Programação Orientada a Objetos - POO

O compilador identifica que os métodos não foram criados e exibe a mensagem de erro. Bem, até aí não vemos diferenças em relação a uma classe abstrata, mas agora já darei um exemplo de algo que diferencia uma Interface. Em C#, assim como em algumas outras linguagens, não é possível fazer herança múltipla, ou seja, herdar mais de uma classe. No entanto é possível herdar de várias Interfaces e isso pode, na maior parte dos casos, solucionar qualquer necessidade de herança múltipla que você tenha. Vou criar uma Interface qualquer, chamada de ITeste e criar nela um método Teste(), conforme a figura abaixo.

Interfaces - Programação Orientada a Objetos - POO

Agora farei a herança múltipla dessa Interface, na classe "DVDPlayer", vejam:

Interfaces - Programação Orientada a Objetos - POO

E vejam como tudo funciona perfeitamente. Vou tentar compilar a aplicação agora:

Interfaces - Programação Orientada a Objetos - POO

Percebam que não foi possível, pois o compilador identificou que o método Teste(), presente na Interface ITeste não foi criado, ou seja, a herança múltipla funcionou corretamente. Outro ponto importante a se destacar sobre as Interfaces é que elas não aceitam nenhum tipo de modificador de acesso, ao contrário das classes abstratas. Vejam o que acontece quando tentamos utilizar algum:

Interfaces - Programação Orientada a Objetos - POO

Para utilizarmos métodos da classe que herdou de uma Interface basta realizarmos o procedimento comum de instanciação, conforme o exemplo abaixo:

Interfaces - Programação Orientada a Objetos - POO

Basicamente o que diferencia uma classe abstrata de uma Interface é que nas classes abstratas você pode fazer uso dos modificadores de acesso e nelas nem todos os métodos precisam ser abstratos, ou seja, você pode ter métodos que não precisam ser implementados nas subclasses, pois já possuem seu corpo na própria superclasse.

A Interface cria um “contrato” entre as partes envolvidas, ou seja, você obrigatoriamente terá de implementar as assinaturas de todos métodos contidos nela, mas a forma como o fará é por sua conta. Como fica fácil perceber, as Interfaces surgiram para promover a padronização de métodos.

E conforme citei no início deste tópico, não é comum usar o termo “herdar de uma Interface” ou “herdar uma interface”, como eu utilizei por várias vezes. Só o fiz para não quebrar o raciocínio que escolhi para explicar esse importante assunto e não ter que descrever, ainda no início, o que, de fato, fazia a Interface, pois isso poderia confundir mais do que ajudar. O comum é utilizar o termo “assinar uma Interface”, ou ainda “implementar uma Interface”.

Apenas para encerrar, é importante saber que é possível herdar de uma classe abstrata e de interfaces simultaneamente. A única restrição é que, após o sinal de dois pontos (:), que determina o início das entidades que serão herdadas, a classe deve ser citada antes das Interfaces, conforme a figura abaixo:

Interfaces - Programação Orientada a Objetos - POO

É isso!


HARDWARE

Entendendo o seu computador

O que há dentro do meu computador?

Existem alguns componentes fundamentais presentes dentro do seu computador e é muito importante que você conheça um pouco sobre eles, seja para argumentar com algum vendedor durante a compra de um novo PC ou para identificar alguma atitude desleal de algum técnico que esteja te passando um orçamento para reparo. Na seção Raio-X aqui do Contém Bits você pode conhecer e entender mais detalhadamente sobre cada componente, ou também pode clicar abaixo no componente que deseja, para conhecê-lo melhor.

  • Gabinetes

  • Placas-Mãe

  • Processadores

  • Memória

  • Fontes

  • Drives Ópticos

  • Discos Rígidos

  • SSD

  • Placas de Som

  • Placas de Vídeo

Você Sabia?

O personagem Mario só possui bigode porque quando ele foi criado, em 1981, a resolução de tela dos equipamentos disponíveis não permitia que fosse desenhada uma boca, então os desenvolvedores fizeram o grande bigode para contornar essa limitação tecnológica.


Desde o seu lançamento, em 1985, o fantástico jogo Tetris vende pelo menos 70 milhões de unidades por ano em todo o mundo! Os dados são oficiais e fornecidos pela THQ, uma das distribuidoras do título.


A empresa Universal City Studios, detentora dos direitos autorais do King Kong, processou a Nintendo logo após o lançamento de Donkey Kong, pois segundo ela, o game violava os seus direitos. Ela venceu o processo e recebeu da Nintendo uma indenização de quase 2 milhões de dólares.


A Máquina de Pascal, criada em 1642 pelo filósofo, físico e matemático francês Blaise Pascal, é reconhecida como o primeiro computador do mundo e ele foi criado com o objetivo de calcular impostos. Saiba mais.


O Playstation só nasceu porque uma parceria entre Sony e Nintendo, para desenvolver uma unidade de CD para o Super Nintendo, fracassou. Clique aqui e saiba mais.


Street Fighter 2, lançado para o Super Nintendo no início dos anos 90, foi o principal responsável pelo aumento nas vendas deste console. Graças ao sucesso do título nos Arcades e à perfeita adaptação ao console, muitos consumidores adquiriram o SNES para jogarem o título em casa. Saiba mais.


Digitar senhas em computadores de uso coletivo é extremamente perigoso, pois além de softwares de monitoramento, existem dispositivos de hardware que podem capturar suas senhas. Evite ao máximo acessar sites de bancos a partir destes computadores. Veja mais aqui.


O mouse foi criado em 9 de dezembro de 1968, por um americano chamado Douglas Engelbart, que o batizou de "XY Position Indicator for a Display System". Conheça a história do mouse clicando aqui.


Nos primeiros oito dias após o lançamento do console Nintendo Wii foram vendidas 600 mil unidades. Isso equivale a quase um por segundo e estes incríveis números são referentes às vendas apenas nos EUA!


Instalar vários aplicativos com o mesmo propósito, como editores de texto, reprodutores de músicas ou vídeos e até programas antívirus sobrecarregam o seu sistema operacional e ainda ocupam espaço desnecessário em seu HD. Tenha apenas um bom programa para cada função.


O primeiro computador a conseguir rodar o jogo Spacewar era o PDP-1, que custava 120 mil dólares e pertencia ao Massachusetts Institute of Technology. O jogo demorou 200 horas para ser desenvolvido, em 1962, e seu criador foi um cientista da computação chamado Steve Russel.


Em 1949 a revista Popular Mechanics fez uma previsão para o futuro, dizendo: "Um dia os computadores pesarão menos do que 1,5 tonelada". E pensar que temos smartphones capazes de realizar milhões de vezes mais operações do que os computadores daquela época.