Igor Oliveira Aquino
2008/2o.
06/08/2008 (2)
Introdução
Este laboratório tem como objetivo a familiarização com a linguagem Java e a programação orientada a objetos, implementando classes e métodos. Foi elaborada uma aplicação que simula a execução e entrega de relatórios por alunos a um professor. Foram utilizadas ao todo 6 classes, sendo uma delas abstrata.
Desenvolvimento
A seguir, serão mostrados o diagrama de classes e os códigos-fonte das 6 classes criadas para esta aplicação. Os comentários sobre cada uma delas estão escritos no próprio código.
Diagrama de Classes
Classe Aluno
/** * Classe abstrata Aluno, que possue as subclasses AlunoEsforcado e AlunoSafoPreguicoso * * @author (Igor Aquino) * @version (21.08.2008) */ public abstract class Aluno { // variáveis de instância private float dedicacao; private float inteligencia; private int conhecimento = 0; private String nome; private RelaQueue queue; /** * @param String oNome (nome do aluno) * @param RelaQueue fila (lugar onde sao armazenados os relatorios) */ public Aluno (String oNome, RelaQueue fila){ nome = oNome; queue = fila; } /** * Retorna o conhecimento de um aluno * @param Não possui parametros * @return conhecimento */ public int getConhecimento(){ return conhecimento; } /** *Retorna a dedicação de um aluno *@param Não possui parametros *@return dedicacao */ abstract float getDedicacao(); /** *Retorna a inteligencia *@param Não possui parametros *@return inteligencia */ abstract float getInteligencia(); /** *Retorna o nome do aluno * *@param Não possui parametros *@return nome */ public String getNome(){ return nome; } /** *Faz e entrega um relarorio, que eh criado com base nos parametros "dedicacao" e "inteligencia". *Alem disso, a cada relatorio entregue, o aluno tem seu conhecimento incrementado. * *@param Não possui parametros *@return Não retorna nada. */ public void fazEEntregaRelatorio(){ float qualidade = (2 * this.getDedicacao() + this.getInteligencia()) / 3; float originalidade = (this.getDedicacao() + 2 * this.getInteligencia()) / 3; Relatorio rela = new Relatorio(qualidade, originalidade, this); queue.queue(rela); conhecimento++; } }
Subclasse AlunoEsforcado
/** * Subclasse de Aluno. * Aqui faz-se uso do conceito de herança, onde a classe AlunoEsforcado herda métodos e atributos de Aluno * e sobrescreve alguns métodos também. * * @author (Igor Aquino) * @version (21.08.2008) */ public class AlunoEsforcado extends Aluno { /** * variáveis de instancia */ private float inteligencia = 0.5f; private float dedicacao = 1.0f; /** * * @param String oNome * @param RelaQueue fila * @return Não retorna nada */ public AlunoEsforcado(String oNome, RelaQueue fila){ super(oNome, fila); } /** * Retorna a dedicação de um aluno * @param Não possui parametros * @return dedicacao */ public float getDedicacao(){ return dedicacao; } /** * Retorna a inteligencia de um aluno * @param Não possui parametros * @return inteligencia */ public float getInteligencia(){ return inteligencia; } }
Subclasse AlunoSafoPreguicoso
import java.util.*; /** * Subclasse de Aluno. * Aqui faz-se uso do conceito de herança, onde a classe AlunoSafoPreguicoso herda métodos e atributos de * Aluno e sobreescreve alguns métodos também. * * @author (Igor Aquino) * @version (21.08.2008) */ public class AlunoSafoPreguicoso extends Aluno{ /** * variáveis de instancia */ private float inteligencia = 1.0f; private float dedicacao; /** * @param String oNome * @param RelaQueue fila * @return Não retorna nada */ public AlunoSafoPreguicoso(String oNome, RelaQueue fila){ super(oNome, fila); } /** * Retorna a dedicação de um aluno * Exemplo de polimorfismo, pois existe outra funçao "getDedicacao" na classe AlunoEsforcado que tem o * mesmo nome, porém atua de forma distinta. * @param Não possui parametros * @return dedicacao */ public float getDedicacao(){ Random generator = new Random(); dedicacao = generator.nextFloat() * 0.5f; return dedicacao; } /** * Retorna a inteligencia de um aluno * @param Não possui parametros * @return inteligencia */ public float getInteligencia(){ return inteligencia; } }
Classe RelaQueue
/** * Classe RelaQueue. * * @author (Igor Aquino) * @version (21.08.2008) */ public class RelaQueue { // variáveis de instância int inicio = 0; int fim = 0; Relatorio[] array = new Relatorio[10]; /** * Coloca um relatorio na fila de relatorios a ser corrigida pelo professor * * @param Relatorio rela * @return void */ public void queue(Relatorio rela){ array[fim] = rela; fim = (fim + 1) % 10; } /** * Retira um relatorio da fila de relatorios para ser corrigido pelo professor. * Retorna "null" se a fila estiver vazia. * * @param void * @return Relatorio rela */ public Relatorio dequeue(){ if (fim == inicio) return null; else{ Relatorio aux; aux = array[inicio]; inicio = (inicio + 1) % 10; return aux; } } }
Classe Relatorio
/** * Classe Relatorio. * * @author (Igor Aquino) * @version (21.08.2008) */ public class Relatorio { // variáveis de instancia private float qualidade; private float originalidade; private Aluno aluno; /** * Construtor dos objetos do metodo Relatorio * @param float quali * @param float origin * @param Aluno nome */ public Relatorio (float quali, float origin, Aluno nome){ qualidade = quali; originalidade = origin; aluno = nome; } /** * Retorna a qualidade do relatorio * * @return qualidade */ public float getQualidade(){ return qualidade; } /** * Retorna a originalidade do relatorio * * @return originalidade */ public float getOriginalidade(){ return originalidade; } /** * Retorna o objeto da classe Aluno que fez o relatorio * * @return Aluno */ public Aluno getAluno(){ return aluno; } }
Classe Professor
import java.util.*; /** * Classe Professor * * @author (Igor Aquino) * @version (21.08.2008) */ public class Professor { // variaveis de instancia RelaQueue queue; /** * Construtor dos objetos da classe Professor * Cria a fila onde serão colocados os relatoros dos alunos * @param RelaQueue fila */ public Professor(RelaQueue fila) { queue = fila; } /** * Corrige todos os relatorios da fila * */ public void corrigirRelatorios(){ Relatorio rela; rela = queue.dequeue(); while (rela != null){ System.out.println(rela.getAluno().getNome() + ":" + corrigirRelatorio(rela)); rela = queue.dequeue(); } } /** * Corrige um relatorio e retorna sua nota * @param RelaQueue rela * @return float nota * */ private float corrigirRelatorio(Relatorio rela){ Random generator = new Random(); float fatorAleatorioDe0a1 = generator.nextFloat(); float nota = ((rela.getQualidade() + rela.getOriginalidade() + fatorAleatorioDe0a1) / 3) * 10; return nota; } }
Testes
Resultado mostrado no BlueJ após serem realizados 3 testes usando a classe Teste fornecida pelo professor:
Anexos
Link da pasta com todos os arquivos e códigos referentes ao primeiro laboratório.
Conclusão
Do ponto de vista da tarefa propriamente dita, esta prática de laboratório não era difícil. Porém, as dificuldades surgiram devido ao aprendizado de uma nova sintaxe (de Java) e de um novo paradigma de programação (a programação Orientada a Objetos).
O tempo que havia sido dado inicialmente, uma semana, era bem curto. Porém, após ser estendido, ficou adequado para a realização da tarefa.
Nos próximos laboratórios, seria interessante que houvesse mais exemplos resolvidos junto com o aluno, no próprio horário de aula, para que as dúvidas iniciais já sejam respondidas.






Não foram feitos testes manuais. Código Ok.