Lab1 Igor Oliveira

Igor Oliveira Aquino
2008/2o.
06/08/2008 (2)

Introdução

Este laboratório tem como objetivo a familiarização com a linguagem Java e a programação orientada a objetos, implementando classes e métodos. Foi elaborada uma aplicação que simula a execução e entrega de relatórios por alunos a um professor. Foram utilizadas ao todo 6 classes, sendo uma delas abstrata.

Desenvolvimento

A seguir, serão mostrados o diagrama de classes e os códigos-fonte das 6 classes criadas para esta aplicação. Os comentários sobre cada uma delas estão escritos no próprio código.

Diagrama de Classes

diagramaDeClasses.JPG

Classe Aluno

/**
 * Classe abstrata Aluno, que possue as subclasses AlunoEsforcado e AlunoSafoPreguicoso
 * 
 * @author (Igor Aquino)
 * @version (21.08.2008)
 */
public abstract class Aluno
{
    // variáveis de instância
    private float dedicacao;
    private float inteligencia;
    private int conhecimento = 0;
    private String nome;
    private RelaQueue queue;
 
    /**
     * @param   String oNome (nome do aluno)
     * @param   RelaQueue fila (lugar onde sao armazenados os relatorios)
     */
    public Aluno (String oNome, RelaQueue fila){
        nome = oNome;
        queue = fila;
    }
 
    /**
     * Retorna o conhecimento de um aluno
     * @param   Não possui parametros        
     * @return  conhecimento 
     */
    public int getConhecimento(){
        return conhecimento;
    }
 
    /**
     *Retorna a dedicação de um aluno
     *@param    Não possui parametros 
     *@return   dedicacao
     */
    abstract float getDedicacao();
 
    /**
     *Retorna a inteligencia
     *@param    Não possui parametros  
     *@return   inteligencia
     */
    abstract float getInteligencia();
 
    /**
     *Retorna o nome do aluno
     * 
     *@param    Não possui parametros  
     *@return   nome
     */
    public String getNome(){
        return nome;
    }
 
    /**
     *Faz e entrega um relarorio, que eh criado com base nos parametros "dedicacao" e "inteligencia". 
     *Alem disso, a cada relatorio entregue, o aluno tem seu conhecimento incrementado.
     * 
     *@param    Não possui parametros 
     *@return   Não retorna nada.
     */
    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++;
    }  
}

Subclasse AlunoEsforcado

/**
 * Subclasse de Aluno.
 * Aqui faz-se uso do conceito de herança, onde a classe AlunoEsforcado herda métodos e atributos de Aluno
 * e sobrescreve alguns métodos também.
 * 
 * @author (Igor Aquino) 
 * @version (21.08.2008)
 */
public class AlunoEsforcado extends Aluno
{
    /**
     *  variáveis de instancia
     */
    private float inteligencia = 0.5f;
    private float dedicacao = 1.0f;  
 
    /**
     * 
     * @param   String oNome
     * @param   RelaQueue fila        
     * @return  Não retorna nada 
     */    
    public AlunoEsforcado(String oNome, RelaQueue fila){
        super(oNome, fila);
    }      
 
    /**
     * Retorna a dedicação de um aluno
     * @param   Não possui parametros        
     * @return  dedicacao 
     */ 
    public float getDedicacao(){
        return dedicacao;
    }
 
    /**
     * Retorna a inteligencia de um aluno
     * @param   Não possui parametros        
     * @return  inteligencia 
     */ 
    public float getInteligencia(){
        return inteligencia;
    }
 
}

Subclasse AlunoSafoPreguicoso

import java.util.*;
 
/**
 * Subclasse de Aluno.
 * Aqui faz-se uso do conceito de herança, onde a classe AlunoSafoPreguicoso herda métodos e atributos de
 * Aluno e sobreescreve alguns métodos também.
 * 
 * @author (Igor Aquino) 
 * @version (21.08.2008)
 */
public class AlunoSafoPreguicoso extends Aluno{
 
    /**
     *  variáveis de instancia
     */
    private float inteligencia = 1.0f;
    private float dedicacao;
 
    /**
     * @param   String oNome
     * @param   RelaQueue fila        
     * @return  Não retorna nada 
     */ 
    public AlunoSafoPreguicoso(String oNome, RelaQueue fila){
        super(oNome, fila);
    }      
 
    /**
     * Retorna a dedicação de um aluno
     * Exemplo de polimorfismo, pois existe outra funçao "getDedicacao" na classe AlunoEsforcado que tem o
     * mesmo nome, porém atua de forma distinta.
     * @param   Não possui parametros        
     * @return  dedicacao 
     */ 
    public float getDedicacao(){
        Random generator = new Random();
        dedicacao = generator.nextFloat() * 0.5f;
        return dedicacao;
    }
 
    /**
     * Retorna a inteligencia de um aluno
     * @param   Não possui parametros        
     * @return  inteligencia 
     */ 
    public float getInteligencia(){
        return inteligencia;
    }
}

Classe RelaQueue

/**
 * Classe RelaQueue.
 * 
 * @author (Igor Aquino) 
 * @version (21.08.2008)
 */
public class RelaQueue
{
    // variáveis de instância
    int inicio = 0;
    int fim = 0;
    Relatorio[] array = new Relatorio[10];
 
    /**
     * Coloca um relatorio na fila de relatorios a ser corrigida pelo professor
     * 
     * @param   Relatorio rela
     * @return  void 
     */
    public void queue(Relatorio rela){
        array[fim] = rela;
        fim = (fim + 1) % 10;
    }
 
    /**
     * Retira um relatorio da fila de relatorios para ser corrigido pelo professor.
     * Retorna "null" se a fila estiver vazia.
     * 
     * @param   void
     * @return  Relatorio rela
     */
    public Relatorio dequeue(){
        if (fim == inicio)
            return null;
        else{
            Relatorio aux;
            aux = array[inicio];      
            inicio = (inicio + 1) % 10;
            return aux;
        }        
    }
}

Classe Relatorio

/**
 * Classe Relatorio.
 * 
 * @author (Igor Aquino) 
 * @version (21.08.2008)
 */
public class Relatorio
{
    // variáveis de instancia
   private float qualidade;
   private float originalidade;
   private Aluno aluno;
 
   /**
     * Construtor dos objetos do metodo Relatorio
     * @param   float quali
     * @param   float origin
     * @param   Aluno nome
     */
   public Relatorio (float quali, float origin, Aluno nome){
       qualidade = quali;
       originalidade = origin;
       aluno = nome;
    }
 
    /**
     * Retorna a qualidade do relatorio
     * 
     * @return     qualidade 
     */
    public float getQualidade(){
        return qualidade;
    }
 
    /**
     * Retorna a originalidade do relatorio
     * 
     * @return     originalidade 
     */
    public float getOriginalidade(){
        return originalidade;
    }
 
    /**
     * Retorna o objeto da classe Aluno que fez o relatorio
     * 
     * @return     Aluno 
     */
    public Aluno getAluno(){
        return aluno;
    }
}

Classe Professor

import java.util.*;
 
/**
 * Classe Professor
 * 
 * @author (Igor Aquino)
 * @version (21.08.2008)
 */
public class Professor
{
    // variaveis de instancia
    RelaQueue queue;
 
    /**
     * Construtor dos objetos da classe Professor
     * Cria a fila onde serão colocados os relatoros dos alunos
     * @param RelaQueue fila
     */
    public Professor(RelaQueue fila)
    {
        queue = fila;
    }
 
    /**
     * Corrige todos os relatorios da fila
     * 
     */
    public void corrigirRelatorios(){
        Relatorio rela;
        rela = queue.dequeue();
        while (rela != null){            
            System.out.println(rela.getAluno().getNome() + ":" + corrigirRelatorio(rela));
            rela = queue.dequeue();
        }
    }
 
    /**
     * Corrige um relatorio e retorna sua nota
     * @param   RelaQueue rela
     * @return  float nota
     * 
     */
    private float corrigirRelatorio(Relatorio rela){           
            Random generator = new Random();
            float fatorAleatorioDe0a1 = generator.nextFloat();
            float nota = ((rela.getQualidade() + rela.getOriginalidade() + fatorAleatorioDe0a1) / 3) * 10;
            return nota;
        }
}

Testes

Resultado mostrado no BlueJ após serem realizados 3 testes usando a classe Teste fornecida pelo professor:

testes.JPG

Anexos

Link da pasta com todos os arquivos e códigos referentes ao primeiro laboratório.

Conclusão

Do ponto de vista da tarefa propriamente dita, esta prática de laboratório não era difícil. Porém, as dificuldades surgiram devido ao aprendizado de uma nova sintaxe (de Java) e de um novo paradigma de programação (a programação Orientada a Objetos).
O tempo que havia sido dado inicialmente, uma semana, era bem curto. Porém, após ser estendido, ficou adequado para a realização da tarefa.
Nos próximos laboratórios, seria interessante que houvesse mais exemplos resolvidos junto com o aluno, no próprio horário de aula, para que as dúvidas iniciais já sejam respondidas.

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