Lab1 Marcus Leandro

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.

Bernardo de PaduaBernardo de Padua 1220846521|%e %b %Y, %H:%M %Z|agohover

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.

unfold by Bernardo de PaduaBernardo de Padua, 1220846521|%e %b %Y, %H:%M %Z|agohover
Add a new comment
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License