aluno: Nome do Aluno
ano/sem: 2008/2o.
data do laboratório (num. da semana) : 06/08/2008 (2)
Introdução
Foi simulado uma situação muito comum em meios academicos. Foram criadas duas classes principai: aluno e professor. No contexto da classe aluno, foram criadas duas subclasses: uma de aluno safo e outra de um aluno esforçado. Também foi criada uma classe que descreve relatorios e uma classe que representará uma fila de relatorios. Assim, os alunos deverao fazer o relatorio e colocá-lo na fila. O professor deverá retirar um relatório de cada vez da frente da fila, corrigí-lo e lançar uma nota para o aluno que fez aquele relatório. O professor deve corrigir todos os relatorios que estiverem na fila e lançar a nota de todos os alunos.
Desenvolvimento
Cite os principais trechos do código usando:
Foi primeiramente criada a classe aluno. Esta classe terá como variaveis de instacia o conhecimento, o nome, e a fila de relatorios. O principal metodo da classe sera o que faz e entrega os relatorios. O código segue abaixo: public abstract class Aluno { // variaveis de instancia private int conhecimento=0; private String nome; public RelaQueue queue; public void setNome(String n) { nome=n;} //Configurador que seta o nome de um aluno abstract double getDedicacao(); abstract double getInteligencia(); public String getNome() //contrutor da classe Aluno { return nome; } public int getConhecimento() //metodo que retorna o conhecimento do aluno, uma vez que esta eh uma variavel privada { // put your code here return conhecimento; } public void fazEEntregaRelatorio() //Metodo que manda o Aluno fazer e entregar um realtorio { double qualidade = (2 * this.getDedicacao() + 1 * this.getInteligencia() ) / 3 ; double originalidade = (1 * this.getDedicacao() + 2 * this.getInteligencia() ) / 3 ; Relatorio rela = new Relatorio(qualidade,originalidade, this); queue.queue(rela); conhecimento=conhecimento+1; } }
A seguir, foram criadas duas subclasses de Aluno, uma para aluno safo e outra para o aluno esforcado. A do aluno safo segue logo abaixo, e ela tem como variavel de instancia a inteligencia do aluno safo que é máxima e igual a 1. O construtor dessa classe recebe o nome e a fila de relatorios como parametros. A dedicacao do aluno safo sera algo aleatorio mas sempre baixo em comparacao com a do aluno esforcado. public class AlunoSafoPreguicoso extends Aluno { // varivel de instancia private double inteligencia=1; //contrutor da subclasse do aluno safo public AlunoSafoPreguicoso(String n, RelaQueue q) { this.setNome(n); queue=q; } //metodo que retorna a dedicacao aletoria do aluno safo public double getDedicacao() { Random generator = new Random(); double r = generator.nextDouble(); return r * 0.5; } //metodo publico que retorna a variavel protegida inteligencia public double getInteligencia() { return inteligencia; } }
A seguir segue a classe do aluno esforcado. Aqui, teremos como variaveis de instancia a inteligencia que é igual a metade da inteligencia do aluno safo e a dedicacao que é sempre igual a 1. import java.util.*; public class AlunoEsforcado extends Aluno { // variaveis de instancia private double inteligencia=0.5; private double dedicacao=1; //Metodo construtor da subclasse do aluno esforcado public AlunoEsforcado(String n, RelaQueue q) { // initialise instance variables this.setNome(n); this.queue=q; } //metodo publico que retorna a inteligencia do aluno public double getInteligencia() { return inteligencia; } //metodo publico que retorna a dedicação do aluno esforcado public double getDedicacao() { return dedicacao; } }
Então, criamos a classe professor. Como variavel de instancia teremos apenas a fila de relatorios. Teremos varios metodos, mas os principais serão aqueles que corrigirao os relatorios e atribuirão as notas. O professor irá retirar o relatorio da fila, corrigir, e atribuir uma nota. Corrigirá até que a fila esteja vazia. public class Professor { //variavel de instancia public RelaQueue queue; //metodo construtor da classe Professor public Professor(RelaQueue q) { this.queue=q; } //metodo que retorna um numero de 0 a 1 public double fatorAleatorioDe0a1() { Random generator = new Random(); double r = generator.nextDouble(); return r ; } //metodo privado que corrige um relatorio private double corrigeRelatorio(Relatorio rela) { double nota = (( rela.getQualidade() + rela.getOriginalidade() + fatorAleatorioDe0a1() ) / 3) * 10; return nota; } //metodo publico que faz com que o professor corriga toda a fila de relatorios public void corrigirRelatorios() { Aluno a; String nome; double nota; Relatorio r; r=queue.dequeue(); while(r!=null) { nota=corrigeRelatorio(r); a=r.getAluno(); nome=a.getNome(); System.out.println(nome+": "+nota); r=queue.dequeue(); } } }
Uma classe para o relatorio tambem foi criada. Cada relatorio terá uma qualidade, uma originalidade e um autor. Estas serão as variáveis de instancia da classe. Há metodos de consulta destas variaveis. public class Relatorio { //variavies de instancia private double qualidade; private double originalidade; private Aluno autor; //construtor da classe relatorio public Relatorio(double q, double o, Aluno a) { //incializacao das variaveis de instancia qualidade = q; originalidade = o; autor = a; } //metodo publico que retorna a qualidade do relatorio public double getQualidade() { return qualidade; } //metodo publico que retorna a originalidade do relatorio public double getOriginalidade() { return originalidade; } //metodo publico que retorna o aluno que fez o relatorio public Aluno getAluno() { return autor; } }
Por último, foi feita a classe mais importante do código, a classe da fila de relatorios. A fila de relatorios será ciclica, e será controla por duas variaveis que representão o fim e o inicio da fila. Cabem no máximo dez relatórios nesta fila. Há um método para adicionar um relatório na fila, e outro para retirar um relatorio da frente da fila. Caso a fila esteja vazia este metodo irá avizar retornando um null. public class RelaQueue { // variaveis de instancias private Relatorio[] array = new Relatorio[10]; private int inicio=0; private int fim=0; //metodo construtor da classe relaqueue public RelaQueue() { // inicializacao das variaveis de instancia fim=0; inicio=0; } //metodo que poe um relatorio na fila public void queue(Relatorio r) { array[fim]=r; fim=(fim+1)%10; } // metodo que retira o relatorio da frente da fila e o retorna public Relatorio dequeue() { if(fim-inicio==9||inicio-fim==1) return null; else { Relatorio r; r=array[inicio]; inicio=(inicio+1)%10; return r; } } }
Conclusão
Este laboratório foi uma ótimo oportunidade para um primeiro contato com o java. Aparentemente complicado para iniciantes, mas de muita ajuda, pois possibilitou o exercício e a aplicação de modo mais concreto dos conceitos envolvidos na progaramação orientada a objetos. Após este labotório pude entender melhor como funciona e começar a entender qual a filosofia deste estilo de programação. Não tenho nenhuma crítica a realizar. Gostei do laboratório, apesar de ter demandado uma considerável parcela de tempo.






Você podia ter dado uma caprichada na hora de colar seus trechos de código, seus comentários ficaram difíceis de ler.
Código OK. Faltou o rela ser um pouco mais analítico e discutir os conceitos de OO utilizados.