Lab1 Marcus Edson

aluno: Marcus Edson Barreto Brito
ano/sem: 2008/2o.
data do laboratório (2a. semana) : 06/08/2008 (2)

Introdução

Neste laboratório foram utilizados os conceitos de orientação a objeto para simular a entrega de relatórios por alunos. Cada aluno deveria colocar seu relatório em uma fila, na ordem em que fosse terminando. Essa fila seria em seguida acessada pelo professor, que corrigiria cada relatório na ordem em que foi entregue e daria uma nota baseado na qualidade e originalidade do relatório, além de um um fator randômico. Em seguida seria mostrado o nome do aluno e sua respectiva nota. Vale ressaltar também que havia dois tipos de aluno, o SafoPreguiçoso e o Esforçado, que possuíam diferentes valores de inteligência e dedicação, o que influenciava diretamente em sua nota final.

Desenvolvimento

O código fonte das seis classes criadas é mostrado abaixo.
Essas classes são: Aluno, AlunoSafoPreguicoso, AlunoEsforcado, Professor, Relatório e RelaQueue.
Código da Classe Abstrata Aluno

import java.util.*; 
 
//Classe pública aluno. Ela é abstrata, ou seja, não pode ser instanciada diretamente
//Suas subclasses são AlunoEsforcado e AlunoSafoPreguicoso
public abstract class Aluno 
{
    //Variáveis privadas da classe aluno    
    private int conhecimento=0;
    private String nome;
    private RelaQueue queue;
 
    //Construtor
    public Aluno(String str, RelaQueue que){
        this.nome=str;
        this.queue=que;
    } 
 
    //retorna um inteiro com o conhecimento do aluno
    public int getConhecimento(){
        return conhecimento;            
    }
 
    //Método público (ou seja, pode ser acessado por outras classes) que:
    //Cria o relatorio do aluno com os parâmetros originalidade e qualidade e o 
    //coloca o relatório do aluno numa fila de relatórios 
    public void fazEEntregaRelatorio(){
        float qualidade = (2 * this.getDedicacao() + this.getInteligencia() ) / 3 ;
        float originalidade = (this.getDedicacao() + 2 * this.getInteligencia() ) / 3 ;
        Relatorio rela = new Relatorio(qualidade, originalidade, this);
        queue.queue(rela);
        conhecimento++;
    }
 
    //métodos abstratos que serão sobrescritos pelos métodos das subclasses
    //ou seja, para cada subclasse de Aluno esses métodos realizarão diferentes comados.
    public abstract float getInteligencia();
 
    public abstract float getDedicacao();
 
    //retorna a string com o nome do aluno
    public String getNome(){
        return nome;
    }
 
}

Código das subclasses de aluno

  • AlunoEsforcado
import java.util.*; 
 
//Subclasse da Classe Aluno
public class AlunoEsforcado extends Aluno{
 
    private float inteligencia=0.5f;
    private float dedicacao=1;
 
    //Construtor
    public AlunoEsforcado(String str, RelaQueue que){
        super (str, que);
    }
 
    //Funções que sobrescrevem as funções da superclasse aluno
    public float getInteligencia(){
        return inteligencia;
    }
 
    public float getDedicacao(){
        return dedicacao;         
    }
}
  • AlunoSafoPreguicoso
import java.util.*;
 
//Subclasse da Classe Aluno
public class AlunoSafoPreguicoso extends Aluno{
 
    private float inteligencia=1;
 
    public AlunoSafoPreguicoso(String str, RelaQueue que){
        super (str, que);
    }
 
    //Funções que sobrescrevem as funções da superclasse aluno
    public float getInteligencia(){
        return inteligencia;
    }
 
    public float getDedicacao(){
        Random generator = new Random();
        float r = generator.nextFloat();
        return r/2;
    }
}

Código da Classe Professor

import java.util.*; 
 
public class Professor{
 
    private RelaQueue queue;
 
    //Construtor
    public Professor(RelaQueue que){
        this.queue=que;
    }
 
    //Metodo privado, ou seja, só pode ser acessado pela classe professor.
    //Recebe um relatorio e retorna uma nota baseada nos fatores: originalidade, qualidade e num fator aleatorio
    private float corrigirRelatorio(Relatorio rela){
        Random generator = new Random();
        float fatorAleatorioDe0a1 = generator.nextFloat();
 
        float nota = (( rela.getQualidade() + rela.getOriginalidade() + fatorAleatorioDe0a1 ) / 3 )* 10;
        return nota;
    }
 
    //Método público que usa o método privado "corrigirRelatorio" para corrigir todos os relatórios de uma fila,
    //imprimindo o nome do aluno e sua respectiva nota 
    public void corrigirRelatorios(){
        Relatorio aux;
        int loop=1;
 
        while(loop==1){
            aux=queue.dequeue();
            if(aux!=null){
                corrigirRelatorio(aux);
                System.out.println(aux.getAluno().getNome() + ": " + corrigirRelatorio(aux) );
            }
            else{
                loop=0;
            } 
 
        }
 
    }
}

Código da Classe RelaQueue

import java.util.*; 
 
//Classe que vai ser uma fila de relatórios
//Ela possui os métodos queue e dequeue, que adiciona e retira elementos da fila e 
//retorna null quando se quer retirar um elemento de uma fila vazia 
public class RelaQueue{
    Relatorio[] array=new Relatorio[10];   
    private int inicio=0;
    private int fim=0;
    private Relatorio rela;
 
    public void queue(Relatorio elem){
        array[fim]=elem;
        fim=(fim+1)%10;
    } 
 
    public Relatorio dequeue(){
        if(inicio!=fim){
            rela=array[inicio];
            inicio=(inicio+1)%10;
            return rela;
        }
        else{
            return null;
        }
    }
 
}

Código da Classe Relatório

import java.util.*; 
 
public class Relatorio{
 
    private float qualidade;
    private float originalidade;
    private Aluno aluno;
 
    public Relatorio(float qualid, float origin, Aluno alun){
        this.qualidade=qualid;
        this.originalidade=origin;
        this.aluno=alun;
    } 
 
    //Métodos que retornam os parâmetros do relatório: o nome do aluno, 
    //a qualidade e a originalidade
    public float getQualidade(){
        return qualidade;
    }
 
    public float getOriginalidade(){
        return originalidade;
    }
 
    public Aluno getAluno(){
        return aluno;
    }
}

Classes no BluJ já compiladas:

lab1_figura1.JPG

Testes realizados:
Com o teste observamos o correto funcionamento do programa. As notas obtidas devem variar aleatoriamente como mostra a segunda imagem de teste. O primeiro aluno não teve seu relatório corrigido e as notas dos alunos aparecem na ordem em que os relatórios foram entregues verificando o correto funcionamento das funções de "queue" e de "dequeue".

lab1_figura2.JPG
primeiro teste
lab1_figura3.JPG
demais testes

Código fonte:
Ces-22_Lab1

Conclusão

Neste laboratório foi possível aplicar de forma direta e consolidar os conceitos de Orientação a Objeto vistos em sala de aula e que ainda estavam obscuros em relação à forma como são aplicados à programação. Pudemos também ter um primeiro contato com a linguagem JAVA, que ainda não havia sido estudada pela maioria dos alunos da sala. A idéia geral e os algoritmos do programa eram bem simples e foram entendidos sem grandes dificuldades. No entanto, houve dificuldade em relação ao uso linguagem JAVA devido à falta de experiência com a mesma e o conseqüente desconhecimento de certos comandos básicos. Por isso, houve uma certa demanda de tempo para a familiarização com a nova linguagem e a necessidade de consultar livros e pedir ajuda aos colegas com mais experiência em JAVA.

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