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.

Add a New Comment
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License