Lab1 Francisco Germano

aluno: Francisco Germano Batista da Silva Júnior
ano/sem: 2008/2o.
data do laboratório (num. da semana) : 25/08/2008 (5)

Introdução

Neste laboratório foi desenvolvido um programa que simula a entrega de relatórios por alunos e a correção deles por um professor. Para isso foram desenvolvidas quatro classes: classe Aluno (abstrata), classe Professor, classe Relatório e classe RelaQueue. Da super classe abstrata Aluno foram criadas duas subclasses, AlunoSafoPreguicoso e AlunoEsforçado, para representar dois tipos diferentes de alunos.

Desenvolvimento

O diagrama de classes final do aplicativo desenvolvido foi o seguinte:

Diagrama_de_Classes.jpg

Os testes foram executados da maneira correta como ilustrado na figura a seguir

Teste

Também foram criadas instâncias manualmente para testarmos essa funcionalidade do BlueJ.

Instâncias.jpg

O código de cada uma das classes utilizadas na aplicação

Classe Aluno (abstrata)

import java.util.*;
 
// Classe que define os alunos que farão os relatorios a ser entregues.
 
public abstract class Aluno
{
    // instance variables
    private int conhecimento=0;
    protected String nome;
    protected double inteligencia;
    protected double dedicacao;
    public RelaQueue queue;
 
    /**
     * fazEEntregaRelatorio cria um relatorio, o coloca na fila de entrega e aumenta o conhecimento do aluno.
     * getConhecimento retorna o conhecimento do aluno
     * getInteligencia retorna a inteligencia do aluno
     * getDedicacao retorna a dedicação do aluno
     * getNome retorna o nome do aluno
     */
 
    public void fazEEntregaRelatorio(){
        double qualidade = (2 * this.getDedicacao() + 1 * this.getInteligencia() ) / 3 ;
        double originalidade = (1 * this.getDedicacao() + 2 * this.getInteligencia() ) / 3 ;
        Relatorio rela = new Relatorio(qualidade, originalidade, this);
        conhecimento++;
        queue.queue(rela);
    }
    public int getConhecimento()
    {
        return conhecimento;
    }
    public String getNome()
    {
        return nome;
    }
    public double getInteligencia()
    {
        return inteligencia;
    }
    public double getDedicacao()
    {
        return dedicacao;
    }
}

Classe AlunoSaforPreguicoso

import java.util.*;
 
//Classe que representa os alunos que são safos e preguiçosos
 
public class AlunoSafoPreguicoso extends Aluno
{
    /**
     * AlunoSafoPreguicoso construtor da classe aluno safo
     */
    public AlunoSafoPreguicoso(String str, RelaQueue fila)
    {
        this.nome=str;
        this.queue=fila;
        inteligencia=1;
    }
    // Método getDedicação sobreescrição do método getDedicação da classe aluno
    public double getDedicacao()
    {
        Random qualquer=new Random();
        dedicacao=qualquer.nextDouble()*0.5;
        return dedicacao;
    }
}

Classe AlunoEsforcado

//Classe que representa os alunos dedicados

public class AlunoEsforcado extends Aluno
{
    /**
     * Constructor for objects of class AlunoDedicado
     */
    public AlunoEsforcado(String str, RelaQueue fila)
    {
        nome=str;
        queue=fila;
        inteligencia=0.5;
        dedicacao=1;
    }
}

Classe Relatorio

//Classe que representa os relatorios feitos pelos alunos

public class Relatorio
{
    // instance variables
    private double qualidade;
    private double originalidade;
    private Aluno aluno;

    /**
     * Constructor for objects of class Relatorio
     */
    public Relatorio(double qld, double ori, Aluno al)
    {
        this.qualidade=qld;
        this.originalidade=ori;
        this.aluno=al;
    }

    /**
     * getAluno retorna o aluno que fez o relatorio
     * getQualidade retorna a qualidade do relatorio
     * getOriginalidade retorna a originalidade do relatorio
     */

    public double getQualidade(){
        return qualidade;}
    public double getOriginalidade(){
        return originalidade;}
    public Aluno getAluno(){
        return aluno;}
}

Classe RelaQueue

//Fila de relatórios entregue pelos alunos e que serão corrigidos pelo professor

public class RelaQueue
{
    // instance variables
    private Relatorio[] array = new Relatorio[10];
    private int inicio=0;
    private int fim=0;

     /**
     Metódo queue coloca um relatório na fila de relatórios.
     Método dequeue retira um relatório da fila de relatórios (caso exista algum elemento na fila).
     */
    public void queue(Relatorio rela)
    {
        array[fim]= rela;
        fim=(fim+1)%10;
    }
    public Relatorio dequeue()
    {
        if(inicio==fim)
            return null;
        else{
            Relatorio rela= array[inicio];
            inicio=(inicio+1)%10;
            return rela;
        }
    }
}

Classe Professor

import java.util.*;

// Classe que representa os professores que corrigem os relatórios.

public class Professor
{
    // instance variables
    RelaQueue queue;
    /**
     * Constructor for objects of class Professor
     */
    public Professor(RelaQueue fila)
    {
        this.queue=fila;
    }

    /**
     * corrigirRelatorio corrige um relatorio, o retira da fila e retorna a sua nota
     * corrigirRelatorios corrige todos os relatorios da fila e apresenta suas notas na tela
     */
    private double corrigirRelatorio(Relatorio rela){
        Random qualquer=new Random();
        double nota = ( rela.getQualidade() + rela.getOriginalidade() + qualquer.nextFloat()) / 3 * 10;
        return nota;
    }
    public void corrigirRelatorios(){
        Relatorio temp=queue.dequeue();
        while(temp!=null){
            System.out.print(temp.getAluno().getNome());
            System.out.print(": ");
            System.out.println(this.corrigirRelatorio(temp));
            temp=queue.dequeue();
        }
    }
}

Conclusão

O laboratório serviu como primeiro contato com a linguagem Java e os conceitos de orientação a objetos (herança, polimorfismo, encapsulamento, construtores). A abordagem adota no curso de fornecer uma classe de exemplo foi muito útil para quem não possuia experiência nesse tipo de programação, agilizando bastante o processo de aprendizado.

Destaco como pontos principais do laboratório:

  • A utilização do diagrama de classes (UML) para orientar o desenvolvimento do programa.
  • A aplicação dos conceitos de classe abstrata, super classe e subclasses.
  • A criação de métodos construtores para as diversas classes.
  • Diferenciação no nível de acesso, por exemplo temos os métodos da classe Professor (corrigirRelatorio é um método privado e corrigirRelatorios é um método público).

Algumas sugestões para a melhorar a aplicação são:

  • Desenvolvimento de trabalhos em grupo. Esse tipo de trabalho seria similar a um relatório (podendo ter os atributos qualidade e originalidade também) sendo que vários alunod deveriam ser relacionados ao trabalho e na hora da correção o professor deverá dar nota a todos os alunos.
  • O atributo conhecimento deveria ser levado em conta na hora da confecção do relatório, sendo um pré-requisito para a confecção de relatórios mais complexos (criar atributo para o relatório que seria, complexidade do relatório).
  • Novo método aprender poderia ser criado para os alunos de maneira que assim eles aumentassem o seu conhecimento e fossem capazes de realizar os relaórios mais difíceis.

Com o conteudo aprendido neste laboratório já é possível a criação de aplicações simples OO, sendo portanto de extrema utilidade.

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