Lab1 Leandro Lima

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

Introdução

Neste primeiro laboratório de CES-22, foram exploradas as principais funcionalidades da linguagem Java, através dos conceitos da programação orientada a objetos. Para tal, foram criadas 6 classes (Aluno, AlunoEsforcado, AlunoSafoPreguicoso, Relatorio, RelaQueue e Professor) com o objetivo de implementar a dinâmica de uma entrega de relatórios por alunos a um professor.

Desenvolvimento

Analisando o diagrama de classes exibido na guia do relatorio, foram designadas as classes descritas abaixo.

Classe Aluno

Na classe Aluno, temos as principais características que irão ser transmitidas para as subclasses AlunoEsforcado e AlunoSafoPreguicoso. Aqui o conceito de herança é amplamente explorado.

public abstract class Aluno
{
    // instance variables
    private int conhecimento = 0;
    private String nome;
    private RelaQueue queue;
 
    public Aluno(String n, RelaQueue q)
    {
        this.nome = n;
        this.queue = q;
    }
 
    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);
        queue.queue(rela);
    }
 
    public int getConhecimento()
    {
        return this.conhecimento;
    }
 
    public String getNome()
    {
        return this.nome;
    }
 
    public abstract float getInteligencia();
    public abstract float getDedicacao();
}

Classe AlunoEsforcado

Nessa classe, as variáveis de instância inteligencia e dedicacao são sobrescritas para conferir particularidade a essa subclasse. Vale ressaltar que é necessário explicitar o uso do comando super para se referir ao construtor da superclasse Aluno pois os parâmetros passados são diferentes.

public class AlunoEsforcado extends Aluno
{
    // instance variables
    private float inteligencia = 0.5f;
    private float dedicacao = 1;
 
    public AlunoEsforcado(String nome, RelaQueue queue)
    {
        super(nome,queue);
    }    
 
    public float getInteligencia(){
        return this.inteligencia;
    }
 
    public float getDedicacao(){
        return this.dedicacao;
    }    
}

Classe AlunoSafoPreguicoso

Igualmente os campos são alterados, com a diferença da implementação de getDedicacao para o campo relativo a essa variável de instância. As características da superclasse aluno são acessadas automaticamente, pois a classe as herda ao ser definida.

import java.util.*;
 
public class AlunoSafoPreguicoso extends Aluno
{
     // instance variables
    private float inteligencia = 1;
 
    public AlunoSafoPreguicoso(String nome, RelaQueue queue)
    {
        super(nome,queue);
    }
 
    public float getDedicacao()
    {
        Random generator = new Random();
        double r = generator.nextDouble();
        return (float)(r * 0.5);
    }
 
    public float getInteligencia()
    {
        return this.inteligencia;
    }
}

Classe RelaQueue

A classe RelaQueue se configura num ele importante entre as classes de Aluno e Professor, com seu uso descrito com procedimentos bem similares ao da linguagem C, o que ficou mais fácil de implementar.

public class RelaQueue
{
    // instance variables
    private Relatorio[] array = new Relatorio[10];
    private int inicio = 0;
    private int fim = 0;
 
    public void queue(Relatorio rela)
    {
        array[fim] = rela;
        fim = (fim + 1) % 10;
    }
 
    public Relatorio dequeue()
    {
        Relatorio rela = null;
        if(array[inicio] != null){
            rela = array[inicio];
            inicio = (inicio + 1) % 10;
        }
        return rela;
    }    
}

Classe Relatorio

As características do Relatório de qualidade e originalidade são conferidas baseadas nos atributos específicos do Aluno, que varia conforme sua subclasse.

public class Relatorio
{
    // instance variables
    private float qualidade;
    private float originalidade;
    private Aluno aluno;
 
    public Relatorio(float q, float o, Aluno a)
    {
        this.qualidade = q;
        this.originalidade = o;
        this.aluno = a;
    }
 
    public float getQualidade()
    {
        return this.qualidade;
    }
 
    public float getOriginalidade()
    {
        return this.originalidade;
    }
 
    public Aluno getAluno()
    {
        return this.aluno;
    }    
}

Classe Professor

Para corrigir os relatórios, foi criado o método público CorrigirRelatorios (sem parâmetros), pois ele irá apenas desempilhar o relatório de RelaQueue e dar a nota. A maneira como ele confere a nota está descrita no método privado CorrigirRelatorio.

import java.util.*;
 
public class Professor
{
    // instance variables
    private RelaQueue queue;
 
    public Professor(RelaQueue queue)
    {
        this.queue = queue;
    }
 
    public void corrigirRelatorios()
    {
        Relatorio rela = queue.dequeue();
 
        while(rela != null){
            System.out.printf("%s: %f\n",rela.getAluno().getNome(),this.corrigirRelatorio(rela));
            rela = queue.dequeue();
        }
    }
 
    private float corrigirRelatorio(Relatorio rela)
    {
        Random generator = new Random();
 
        return (rela.getQualidade() + rela.getOriginalidade() + generator.nextFloat()) / 3 * 10;
    }
}

Screenshots

1.JPG2.JPG

Conclusão

Durante a execução do relatório, foram exploradas inúmeras particularidades não só da sintaxe de Java, como de todo o conceito de orientação a objetos. Isso sem dúvida contribuiu largamente para termos uma visão abrangente e sistemática da disciplina. Contudo, foram encontradas muitas dificuldades na execução desse laboratório, pois a migração da programação procedural de C para OO é algo que poderia ser feito mais gradativamente, enfatizando os aspectos mais básicos desse estilo de programação (como polimorfismo, construtores, heranças) durante as aulas e deixando os detalhes para serem vistos no final do curso. Assim, os conceitos dados em sala de aula teriam resultados mais dinâmicos nos trabalhos práticos.

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