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?

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.


A partida mais longa do clássico Space Invaders durou incríveis 38 horas e 32 minutos e esta façanha foi conseguida por um jogador de apenas 12 anos! O jogo, claro, podia ser pausado para alimentação e descanso, mas ainda assim o recorde, estabelecido no dia 02/09/1980, ainda não foi quebrado. Saiba mais.


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.


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!


Até a primeira metade dos anos 90 era bastante comum que as trilhas sonoras dos games fossem criadas por mulheres e a responsável pelas músicas do clássico Street Fighter 2 foi Yoko Shimomura. Segundo ela, o ritmo "Tararirarin" da música tema do personagem Blanka, do Brasil, veio à sua cabeça enquanto ela estava no trem a caminho da Capcom.


Apenas no ano de 1982, o clássico Pac Man vendeu mais de 400 mil máquinas de fliperama em todo o mundo e recebeu cerca de 7 bilhões de moedas nestas máquinas. Saiba mais.


O famoso título Final Fantasy, da Square Enix, tem este nome exatamente porque se tratava da última esperança da empresa, que estava à beira da falência quando o lançou. Clique aqui e conheça detalhes dessa história.


O jogo Final Fantasy X para o Sony Playstation 2 vendeu, apenas no dia do seu lançamento, 1.455.732 cópias, estabelecendo um recorde de vendagem para as primeiras 24 horas de um game. Méritos da SquareSoft, que desenvolveu um excelente produto!


O épico jogo River Raid, do Atari, foi desenhado e boa parte de sua programação foi feita por uma mulher: Carol Shaw, uma excelente programadora e funcionária da Activision em 1982. Saiba mais sobre a história deste incrível jogo, aqui.


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.


O título Asteroids, do Atari, possui recorde de pontuação há 30 anos. Em 1982 um americano chamado Scott Safran atingiu a marca de 41.336.440. Atualmente ele faz parte de um minúsculo grupo de jogadores que conseguiram manter seus recordes por mais de 30 anos.