Lab1 Diogo Cassimiro

aluno: Nome do Aluno
ano/sem: 2008/2o.
data do laboratório (num. da semana) : 06/08/2008 (2)

Introdução

O programa realizado simula os comportamentos de dois tipos de aluno, o esforçado e o aluno safo preguiçoso, além dessa simulação é feita uma simulação de como seriam as notas de ambos baseados em suas características e considerando a correção do professor;

Desenvolvimento

Criamos então várias classes que simulariam os elementos envolvidos na situação e seus comportamentos, através de classes instanciadas por objetos e métodos respoectivamente.

Primeiramente criamos uma classe abstrata para aluno, que representaria as características comum a todo aluno.

public abstract class Aluno
{
    protected int conhecimento;
    protected String nome;
    protected RelaQueue queue;
    public Aluno(String nome, RelaQueue queue)
    {
     this.nome=nome;
     this.queue=queue;
    }
    public void fazEEntregaRelatorio()
    {
     conhecimento++;
     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);
     queue.queue(rela);     
    }
    public float getConhecimento()
    {
        return conhecimento;
    }
    public abstract float getDedicacao();
    public abstract float getInteligencia();
    public String getNome()
    {
       return this.nome;       
    }
}

em seguida para o nosso programa criamos dois tipos de aluno, o aluno esforçado e o aluno safo preguiçoso, que eram subclasses do nosso modelo abstrato de aluno:

public class AlunoEsforcado extends Aluno
{
    // instance variables - replace the example below with your own
    private float inteligencia;
    private float dedicacao;
    /**
     * Constructor for objects of class AlunoEsforcado
     */
    public AlunoEsforcado(String nome, RelaQueue queue)
    {
        // initialise instance variables
        super(nome,queue);
        inteligencia = 0.5f;
        dedicacao = 1f;
    }
    public float getInteligencia()
    {
        return this.inteligencia;
    }
    public float getDedicacao()
    {
        return this.dedicacao;   
    }
 
}
import java.util.*; 
 
public class AlunoSafoPreguicoso extends Aluno
{
    // instance variables - replace the example below with your own
    private float inteligencia;
    public AlunoSafoPreguicoso(String nome, RelaQueue queue)
    {
        super(nome,queue);   
        this.inteligencia =1;   
    }
    public float getInteligencia()
    {
        return inteligencia;   
    }
    public float getDedicacao()
    {
        Random x= new Random();   
        return (float) 0.5*x.nextFloat();
    }   
}

Criamos então uma classe para representar o professor que corrigiria o relatório dos alunos, outra para a representação da pilha de relatórios a ser corrigida pelo professor e mais uma para representar o relatório em si, os códigos seguem na ordem descrita:

import java.util.*;
public class Professor
{
    RelaQueue queue;
    public Professor(RelaQueue queue)
    {
        this.queue=queue;        
    }
    private float corrigirRelatorio(Relatorio rela)
    {
     Random r =new Random();
     float nota = ( rela.getQualidade() + rela.getOriginalidade() + r.nextFloat() ) / 3 * 10;
     return nota;
    }
    public void corrigirRelatorios()
    {
        System.out.println("\t\nnotas:");
        while (queue.inicio!=queue.fim)
            {
               Relatorio rela= queue.dequeue();
               float nota = corrigirRelatorio(rela);
               System.out.println(rela.aluno.nome +" : " + nota); 
             }
    }
 
}
public class RelaQueue
{
  Relatorio [] array; 
  int inicio; 
  int  fim;
  public RelaQueue()
  {
    inicio=0;
    fim=0;
    array=new Relatorio[10];
  }
  public void queue(Relatorio rela)
  {
        array[fim]=rela;
        fim=(fim+1)%10;
  }
  public Relatorio dequeue()
  {
     Relatorio valor= array[inicio];
     inicio=(inicio+1)%10;
     return valor;      
  }
}
public class Relatorio
{
 float qualidade;
 float originalidade;
 Aluno aluno;
 
 public Relatorio( float qualidade, float originalidade, Aluno aluno)
 {
    this.qualidade=qualidade;
    this.originalidade=originalidade;
    this.aluno = aluno;
 }
 
 public float getQualidade()
    {
     return qualidade;
    }
 public float getOriginalidade()
    {
    return originalidade;    
    }
 public Aluno getAluno()
    {
    return aluno;     
    }    
}

Enfim testamos manualmente o código instaciando os objetos no BlueJ e testando seus métodos e propriedades, logo em seguida automatizamos o teste com o auxílio de uma classe de teste conforme o código especificado na descrição do laboratório. O diagrama UML já com a classe de teste do programa já testado e aprovado ficou:
1.bmp

Os testes usando o Junit não retornaram nenhuma anormalidade, assim concluímos que nos posntos avaliados o programa funcionava bem. Imagens dos resultados dos testes:
2.bmp
3.bmp

Conclusão

Neste Lab pode-se praticar alguns dos conceitos de orientação a objeto e da linguagem java em si, como herança e implementação de métodos herdados de classes abstratas, que auxilia na criação de um padrão a ser seguido pelas classes que extendem essa classe abstrata. Também foi assimilado na construção do programa alguns conceitos de diagramação UML, e como esta ajuda na organização e compartimentação do código. Por último, foi apresentado um elemento que desconhecia, as classes de teste de unidade JUnit, que facilitam o teste do programa e a depuração do mesmo em caso de resultados não esperados.

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