Centro de Ciências Exatas, Ambientais e de Tecnologias
Faculdade de Engenharia de Computação

Paradigmas de Linguagens de Programação
9o. Laboratório - 23, 24, 25 e 28 de Abril


Assunto: Interface e Classe Abstrata

Usaremos no exercício de hoje os mesmos fundamentos sobre alunos que temos usado nas aulas anteriores apenas aplicando os conceitos de Interface e de Classe Abstrata.


Interface
Crie uma interface de nome Aluno que apenas definirá o comportamento da Classe, ou seja, conterá apenas os métodos que regem o comportamento de qualquer classe que seja desenvolvida para trabalhar com alunos.

Nessa Interface não haverá desenvolvimento de método ou declaração de propriedades, serão definidas aqui apenas as formas de acesso, ou seja, a interface dos métodos. Os métodos que devem ser definidos para a interface Aluno são:

atribuir()

Parâmetros: (1) uma String que representa o valor a ser atribuído à propriedade Nome, (2) um double que representa o valor a ser atribuído à propriedade que representa a primeira nota, (3) um double que representa o valor a ser atribuído à propriedade que representa a segunda nota e (4) um double que representa o valor a ser atribuído à propriedade que representa a terceira nota

Retorno: nenhum.

qualNome()

Parâmetros: nenhum.

Retorno: uma String que representa o valor da propriedade Nome.

qualNota()

Parâmetros: (1) um int representando qual das notas deve ser indicada (1 para a primeira nota; 2 para a segunda nota; e 3 para a terceira).

Retorno: um double que representa o valor da propriedade Nota relacionada ao parâmetro indicado pelo usuário.

qualMedia()

Parâmetros: nenhum.

Retorno: um double que representa o valor da média calculada.


Crie uma classe de nome AlunoGrad que implemente os métodos indicados pela interface Aluno. Além da implementação dos métodos, esta classe também fará a declaração das propriedades do Aluno que serão:

A implementação dos métodos deve seguir a seguinte orientação:

atribuir()

Funcionalidade: Preencher as propriedades referentes ao Nome às Notas da instância acessada.

qualNome()

Funcionalidade: Indicar às classes externas qual o nome armazenado na instância acessada.

qualNota()

Funcionalidade: Indicar às classes externas qual a valor associado às notas arnazenadas na instância acessada.

qualMedia()

Funcionalidade: Calcular a média ponderada das 3 notas obtidas. Para o calculo da média, considere que cada nota tem o peso de sua ordem, portanto a primeira nota tem peso 1, a segunda nota tem peso 2 e a terceira nota tem peso 3.


Crie uma classe de nome AlunoPos que implemente os métodos indicados pela interface Aluno. Além da implementação dos métodos, esta classe também fará a declaração das propriedades do Aluno que serão:

A implementação dos métodos deve seguir a seguinte orientação:

atribuir()

Funcionalidade: Preencher as propriedades referentes ao Nome às Notas da instância acessada.

qualNome()

Funcionalidade: Indicar às classes externas qual o nome armazenado na instância acessada.

qualNota()

Funcionalidade: Indicar às classes externas qual a valor associado às notas arnazenadas na instância acessada.

qualMedia()

Funcionalidade: Calcular a média aritmética das 3 notas obtidas.


Feitas as classes, siga os seguintes passos:


Classe Abstrata
Vamos agora definir exatamente a mesma aplicação acima usando classe abstrata.

Crie uma Classe Abstrata de Nome Aluno.

Perceba que no exercício usando interface, as propriedades das classes que implementam os métodos são as mesmas. Isso nem sempre isso acontece, podemos ter nas classes que implementam os métodos, propriedades completamente diferentes. Usando classes abstratas, as propriedades comuns às implementações da interface serão definidas na classe abstrata (base).

Temos então a declaração nesta classe das seguintes propriedades:

Na classe abstrata, ao contrário das interfaces, podemos ter implementação de métodos. Colocaremos como implementados nesta classe abstrata, todos os métodos comuns às implementações do exercício de interfaces. Teremos então como métodos implementados nesta classe abstrata:
atribuir()

qualNome()

qualNota()

No exercício de interface, a única coisa que realmente diferencia as duas implementações é o cálculo da Média. Este continuará sendo um método abstrato, deixando a implementação dele para as classes derivadas

Crie uma classe de nome AlunoGrad que vai herdar as propriedades e os métodos implementados e que vai implementar os métodos abstratos da classe Aluno. Perceba que não teremos mais propriedades nesta classe apesar de isso não ser uma regra. Classes que herdam características de classes abstratas podem amplia-las, pois se trata de herança.

A implementação da média deve ser como definida na implementação da interface.

Crie uma classe de nome AlunoPos que também vai herdar as propriedades e os métodos implementados e vai implementar os métodos abstratos da classe Aluno.

A implementação da média deve ser como definida na implementação da interface.


Feitas as classes, siga os seguintes passos:


BOM TRABALHO!!