aluno: Nome do Aluno
ano/sem: 2008/2o.
data do laboratório (num. da semana) : 06/08/2008 (2)
Introdução
Foram criadas 6 classes e uma para teste do projeto, calsse essa chamada Test, cujos códigos encontram-se abaixo.
Desenvolvimento
O código fonte da classe abstrata Aluno encontra-se abaixo:
public abstract class Aluno{ //variáveis int conhecimento = 0; String nome; RelaQueue queue; //construtor public Aluno(String nome, RelaQueue queue){ this.nome = nome; this.queue = queue; } public void fazEEntregaRelatorio(){ float qualidade = (2 * this.getDedicacao() + 1 * this.getInteligencia() ) / 3 ; float originalidade = (1 * this.getDedicacao() + 2 * this.getInteligencia() ) / 3 ; Relatorio rela = new Relatorio(qualidade, originalidade, this); this.queue.queue(rela); } public void getConhecimento(){ } public abstract float getInteligencia(); public abstract float getDedicacao(); public String getNome(){ return this.nome; } }
Segue agora a criação da classe AlunoEsforcado que extende a classe abstrata aluno, cujo código está abaixo:
public class AlunoEsforcado extends Aluno{ float inteligencia = (float) 0.5; float dedicacao = 1; public AlunoEsforcado(String nome, RelaQueue queue) { super(nome, queue); } public float getDedicacao(){ return this.dedicacao; } public float getInteligencia(){ return this.inteligencia; } }
O outro tipo de aluno é um aluno safo, mas preguiçoso cuja classe para esse tipo de aluno se chama AlunoSafoPreguicoso.
public class AlunoSafoPreguicoso extends Aluno{ float inteligencia = 1; float dedicacao; public AlunoSafoPreguicoso(String nome, RelaQueue queue) { super(nome, queue); } public float getInteligencia(){ return this.inteligencia; } public float getDedicacao(){ float dedicacao = (float) (Math.random()*0.5); return dedicacao; } }
Também é realizada a classe Relaqueue para comportar e processar a fila de relatórios.
public class RelaQueue{ //estado inicial: Relatorio[] array = new Relatorio[10]; Relatorio valor; int inicio = 0; int fim = 0; //comportamento: public void queue(Relatorio rela){ array[fim] = rela; fim = (fim + 1) % 10; } public Relatorio dequeue(){ if (inicio == fim){ return null; } else{ valor = array[inicio]; inicio = (inicio + 1) % 10; return valor; } } }
Já na classe Rrelatorio, temos as seguintes atribuições e métodos:
public class Relatorio { //atributos -> variáveis de instância float qualidade; float originalidade; Aluno aluno; //construtor public Relatorio(float qualidade, float originalidade, Aluno aluno){ this.qualidade = qualidade; this.originalidade = originalidade; this.aluno = aluno; } //métodos public float getQualidade(){ return this.qualidade; } public float getOriginalidade(){ return this.originalidade; } public Aluno getAluno(){ return aluno; } }
E como é de se esperar, devemos ter uma classe Professor para realizar a correção dos relatórios.
public class Professor { //variaveis RelaQueue queue; //construtor public Professor(RelaQueue queue){ this.queue = queue; } private float corrigirRelatorio(Relatorio rela){ float nota = (float) ((( rela.getQualidade() + rela.getOriginalidade() + Math.random() ) / 3) * 10); return nota; } public void corrigirRelatorio(){ Relatorio relaCorrecao; for(int i=0; i<4; i++){ relaCorrecao = this.queue.dequeue(); float nota = corrigirRelatorio(relaCorrecao); System.out.println( relaCorrecao.getAluno().getNome() + ": " + nota); } } }
Por fim, criei uma classe de est chamada Test onde foram copiadas as incializações do site, como está lá descrito. O seu código fonte pode ser visto abaixo:
public class Test { public static void main(String[] args) { //criando os objetos RelaQueue queue = new RelaQueue(); Professor prof = new Professor(queue); AlunoEsforcado aluno1 = new AlunoEsforcado("John", queue); AlunoEsforcado aluno2 = new AlunoEsforcado("Mark", queue); AlunoSafoPreguicoso aluno3 = new AlunoSafoPreguicoso("Joseph", queue); AlunoSafoPreguicoso aluno4 = new AlunoSafoPreguicoso("Robert", queue); //alunos comecam a fazer os relas aluno1.fazEEntregaRelatorio(); //roubamos o relatório do primeiro aluno para investigá-lo Relatorio rela1 = queue.dequeue(); //os outros continuam a fazer os relas aluno2.fazEEntregaRelatorio(); aluno3.fazEEntregaRelatorio(); aluno4.fazEEntregaRelatorio(); prof.corrigirRelatorio(); } }
Deixarei exposto o diagrama de classes fornecido pelo blueJ.
Conclusão
Nesse lab, fizemos nosso primeiro uso de uma linguagem orientada objeto. Pude observar e compreender a diferença de classes públicas e privadas, o conceito de classes abstratas e o importante papel da herança. Cabe ressaltar também o conceito de construtor, até então novo, visto que em c nunca tinha ouvido falar.






Você esqueceu de incrementar o conhecimento e seu método getConhecimento() está em branco.
Tem alguma coisa estranho no seu lab. Porque você fez seu RelaQueue retornar null se no professor você retirou os 4 últimos relatórios do queue (sempre), sem checar nada? Dá a impressão que você chupou o código do RelaQueue (além de ter errado no código do professor). Seu teste está dando excessão (por causa disto).
Você também não fez a classe de teste da forma solicitada nas instruções (e mostrada na aula de lab).
Seu rela está quase nulo (praticamente só tem o código colado). Em C não existem construtores, pois não existem objetos (acho que você devia saber disto). Você tem que se esforçar mais que isto para se tornar um engenheiro de computação.