Lab2 Leandro Lima

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

Introdução

Neste 2o. laboratório de CES-22, foram estendidas as funcionalidades do 1o. Lab, fornecendo ao usuário um controle maior sobre a aplicação. Desse modo, alguém que não seja tão familiarizado com a linguagem Java poderá operar o programa. Foram criadas novas classes referentes ao comportamento do Aluno e Faculdades onde ele pode estudar. O lançamento de Exceções abre novas possibilidades pra implementar o código, tornando a criação dos objetos mais completa.

Desenvolvimento

Classe Simulador

Essa classe possui um método main que viabiliza a interação entre os objetos. Na sua implementação foi usado o comando scanner do pacote java.util.scanner. Essa função realiza a captura de informações do teclado. Foi utilizada também uma ArrayList, como vista em sala, para facilitar a organização dos objetos em suas declarações.

import java.util.ArrayList;
import java.util.Scanner;
 
public class Simulador {
 
    public static void main(String[] args) {
 
        Scanner scanner = new Scanner(System.in);
        System.out.printf("%s", "Digite o número de alunos desejado: ");
        int numeroAlunos = scanner.nextInt();
        ArrayList<Aluno> alunos = new ArrayList<Aluno>();
 
        RelaQueue queue = new RelaQueue();
        Professor p = new Professor(queue);
 
        for(int i=0;i<numeroAlunos;i++){
            System.out.printf("\n%s %d %s", "Digite o nome do aluno ", i,":");
 
            scanner = new Scanner(System.in);
            String nome = scanner.nextLine();
 
            System.out.println("Digite 1 para aluno do ita, 2 para aluno da unicamp, ou 3 para aluno da usp");
            scanner = new Scanner(System.in);
            String faculdade = scanner.nextLine();
            int f = Integer.parseInt(faculdade);
 
            switch(f){
            case 1:
                alunos.add(new AlunoITA(nome,queue));
                break;
 
            case 2:
                alunos.add(new AlunoUnicamp(nome,queue));
                break;
            case 3:
                alunos.add(new AlunoUSP(nome,queue));
                break;
            }
 
            System.out.printf("\n%s %d %s", "Digite o tipo do aluno ", i,":");
            scanner = new Scanner(System.in);
            String tipo = scanner.nextLine();
            Aluno aluno = null;
            try {
                aluno = alunos.get(i);
                aluno.setComportamento(determinaComportamento(tipo,alunos.get(i)));
 
                System.out.println("Comportamento determinado com sucesso");
            } catch (Exception e) {
                System.out.println("Você tentou fazer algo impossível!");
            }
 
        }
        p.corrigirRelatorios();
    }
 
    public static Comportamento determinaComportamento(String tipo, Aluno aluno){
        if(tipo=="Esforcado") return (new Esforcado(aluno));
        else if(tipo=="SafoPreguicoso") return (new SafoPreguicoso(aluno));
        else if(tipo=="Summa") return (new Summa(aluno));
        else if(tipo=="Imprevisivel") return (new Imprevisivel(aluno));
        else if(tipo=="Pemba") return (new Pemba(aluno));
        else if(tipo=="Burro") return (new Burro(aluno));
        return null;
 
    }
 
}

Classe Aluno

Essa classe sofreu algumas mudanças devido à criação da classe Comportamento. Desse modo, o código ficou mais organizado e as subclasses puderam ser implementadas de uma maneira mais eficaz. Como a estruturação ficou mais robusta foi possível declarar novos tipos de comportamento como Pemba e Summa.

public class Aluno
{
    // instance variables
    protected int conhecimento = 0;
    protected String nome;
    protected RelaQueue queue;
    protected Comportamento comportamento;
 
    public Aluno(String n, RelaQueue q)
    {
        this.nome = n;
        System.out.println(nome);
        this.queue = q;
        this.comportamento = new Esforcado(this);
    }
 
    public void fazEEntregaRelatorio()
    {
        float qualidade = (2 * this.comportamento.getDedicacao() + 1 * this.comportamento.getInteligencia() ) / 3 ;
        float originalidade = (1 * this.comportamento.getDedicacao() + 2 * this.comportamento.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 float getInteligencia(){
        return comportamento.getInteligencia();
    }
 
    public  float getDedicacao(){
        return comportamento.getDedicacao();
    }
 
    public void setComportamento(Comportamento comportamento) throws Exception {
        this.comportamento = comportamento;
    }
 
}

Classe Queue

Outra funcionalidade importante foi a recriação da Queue. Agora, a essa classe irá se estender à antiga classe RelaQueue incorporando parâmetros que podem ser de qualquer tipo.

public class Queue<T> {
 
    private T[] queue;
    private int inicio = 0;
    private int fim = 0;
 
    public Queue(){
        queue = (T[])(new Object[10]);
    }
 
    public void queue(Object o){
        queue[fim] = (T)o;
        fim = (fim + 1) % 10;
    }
 
    public T dequeue(){
        Object rela = null;
        if (queue[inicio] != null)
        {
            rela = queue[inicio];
            inicio = (inicio + 1) % 10;
        }
        return (T)rela;
    }
}

Screenshots

1.JPG2.JPG

Conclusão

Esse 2o. Lab de CES-22 foi muito importante para sedimentar os conceitos de orientação a objetos, bem como a introduzir novos conteúdos como Polimorfismo. A utilização do código do Lab1 ajudou muito, pois a teoria foi implementada a idéias já existentes. Isso sem dúvida auxiliou na aquisição do conhecimento.

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