Polimorfismo, Interfaces, Classes Abstractas/Exemplos Simples de Interfaces

From Wiki**3

< Polimorfismo, Interfaces, Classes Abstractas

Encontram-se nas secções seguintes exemplos do conceito de interface. A primeira secção ilustra a maior ou menor capacidade de definição do conceito em duas linguagens:

  • Java, onde o conceito é nativo
  • C++, onde o conceito é aproximado por outro

Interfaces em Java

A definição de uma interface, sintacticamente, corresponde a um elenco de métodos, indicando-se, além do nome do método, apenas os tipos dos argumentos e do retorno. É admissível a definição de constantes: identificadores como os dos atributos de qualquer classe. No entanto, estes "atributos" são implicitamente static e final.

Considere-se a interface Aluno que especifica os métodos a fornecer por qualquer aluno.

 interface Aluno {
   void estudar();
 }

De modo análogo, considere-se a definição da interface Docente:

 interface Docente {
   void leccionar();
 }

Utilizando as duas interfaces anteriores e definindo alguns métodos adicionais, é possível modelar a interface de um aluno de doutoramento que, por hipótese, dá aulas (por exemplo, como forma de pagar as propinas).

 interface Doutorando extends Aluno, Docente {
   void escreverTese();
   void defenderTese();
 }

Como definir interfaces em C++?

Como em C++ não há o conceito de interface, para definir os conceitos acima é necessário recorrer ao conceito mais próximo: classes virtuais puras (i.e., classes abstractas). O exemplo Java acima, agora aproximado em C++, seria então escrito da seguinte forma.

Classe ("interface") aluno:

 class Aluno {
 public:
   void estudar() = 0;
 };

Classe ("interface") docente:

 class Docente {
 public:
   void leccionar() = 0;
 };

Classe ("interface") doutorando:

 class Doutorando : public Aluno, Docente {
 public:
   void escreverTese() = 0;
   void defenderTese() = 0;
 };

Note-se que, apesar de se poder aproximar o conceito de interface através de classes abstractas, os dois conceitos diferem substancialmente. Note-se ainda que o paralelo para as classes abstactas de C++ em Java são igualmente classes abstractas (definidas utilizando a palavra chave abstract) e não as interfaces.