Lab2 Leonardo Bruno

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

Introdução

Neste laboratório iremos ampliar um pouco mais o programa feito no primeiro laboratório. Inicialmente criaremos uma classe simulador que irá possibilitar a interação de um um usuário qualquer pela linha de comando. Essa classe simulador terá um método que main que irá guiar toda a interação com o usuário. A seguir, iremos modificar um pouco a estrutura do programa. Iremos criar diversos tipos de comportamento que descreveram o tipo de comportamento de cada aluno, que agora será uma classe única com uma variável do tipo comportamento. A seguir, criaremos três subclasses de aluno, mas referenciando sua escola de origem, e aplicando algumas restrições quanto ao comportamento de cada aluno de uma determinada universidade. Por fim, modificaremos a classe Simulador para que ela comporte as mudanças feitas no programa.

Desenvolvimento

Inicialmente criamos a classe simulador que deveria funcionar com as classes feitas no laboratório passado. No método main, é criado um array de alunos que irá guardar todos os alunos criados. A seguir será solicitado se o usuário deseja criar um aluno, caso a resposta seja positiva, será perguntado o comportamento e o nome do aluno. Será perguntando ao usuário se ele deseja criar outro aluno. Após criar todos os alunos, o método main irá mandar todos os alunos fazerem e entregarem o relatório, e a seguir o professor corrigí-los. O código da classe simulador segue abaixo.

import java.util.ArrayList;
import java.io.*;
import java.io.Console;
 
import java.util.Scanner;
 
public class Simulador
{
 
    public static void main(String[] args)
    {
      Console c = System.console();
      ArrayList<Aluno> alunos = new ArrayList<Aluno>();
 
      System.out.println();
      String op2 = c.readLine("Deseja inserir novo aluno?(s/n): ");
      System.out.println();
      String op;
      String nome;
      int i=0;
      RelaQueue q = new RelaQueue();
      Professor p = new Professor(q); 
      Aluno temp; //Aqui criamos uma variável do tipo Aluno que servirá para todos os tipos de alunos, aplicando o Polimorfismo
 
      while(op2.equals("s"))
      {
          op = c.readLine("O aluno é safo ou esforcado?: ");
          if(op.equals("safo"))
          {
 
             nome = c.readLine("O nome do aluno: ");
             temp = new  AlunoSafoPreguicoso(nome,q); \\Aqui o temp está sendo usado como referencia de um AlunoSafoPreguicoso
             alunos.add(i,temp);                                  \\Exemplo do polimorfismo citado na declaração da variavel temp
          }
         else
         {
           if(op.equals("esforcado"))   //Aqui, é utilizado o método do obejto String op, que verifica se o seu conteúdo é igual ao passado por referencia 
           {
             nome = c.readLine("O nome do aluno: ");
             temp = new  AlunoEsforcado(nome,q);
             alunos.add(i,temp);                                 \\Aqui, é utilizado um método da ArrayList que adiciona um objeto a lista
           }
           else {System.out.println("tipo de aluno invalido! Tente denovo!");continue;}                          
         }
      i++;
      System.out.println();
      op2=c.readLine("Deseja inserir novo aluno?(s/n): ");
      System.out.println();
      }
 
    for(i=0;i<alunos.size();i++)
    {
      (alunos.get(i)).fazEEntregaRelatorio(); //será percorrida toda a ArrayList, utilizando seu método de retornar seus objetos, e já acessando um método desse obejto que será retornado
    }
 
    System.out.println("Notas dos Relatorios:");
    p.corrigirRelatorios();    
 
  }
}

Realizamos vários testes para verificar o bom funcionamento da classe simulador:

fig1.JPG

Então tornamos a classe aluno concreta, e inserimos nela uma variável do tipo Comportamento. Comportamento é uma classe abstrata que foi criada, que terá várias subclasses, como SafoPreguicoso, Burro, Pemba, dentre outras. Essas subclasses irão implementar os métodos de fornecer a inteligência e a dedicação de cada aluno. Os códigos estão anexados, por isso não estão representados aqui neste texto. Criamos três subclasses de alunos, de acordo com sua escola de origem. As subclasses irão sobrescrever os metódos de setar o comportamento do aluno. Caso o comportamento não seja setado ou o seja inválido, o comportamento será definido como Esforcado no construtor do aluno(desde sua criação). Realizamos as restrições de comportamento criando exceções e tratando-as antes de usá-las no método main da classe Simulador. Por exemplo, os alunos da USP não podem ser safos nem summa:

public class AlunoUSP extends Aluno
{
    public AlunoUSP(String n, RelaQueue q){super(n,q);}
 
    public void setComportamento(Comportamento comportamento) throws Exception //podemos ver a exceção sendo lançada
    {
       if((comportamento instanceof Summa)||(comportamento instanceof SafoPreguicoso)) throw new Exception(); //apenas iteanos sao safos!
       super.setComportamento(comportamento); //chama a o metodo da superclasse.       
    }
}

Também criamos uma classe genérica para Queue usando um ArryList internamente. O diagrama de classes está representado abaixo:

fig2.JPG

Após todas as modificações, alteramos a classe simulador para que ela seja capaz de comportar as mudanças feitas no programa. As exceções lançadas nos alunos foram tratadas no momento de setar os comportamentos, conforme segue abaixo:

import java.util.ArrayList;
import java.io.*;
import java.io.Console;
 
import java.util.Scanner;
 
public class Simulador
{
 
    public static void main(String[] args)
    {
 
      Console c = System.console();
      //inicia o Array de alunos
      ArrayList<Aluno> alunos = new ArrayList<Aluno>();
 
      System.out.println();
      String op2 = c.readLine("Deseja inserir novo aluno?(s/n): "); 
      System.out.println();
      String op;
      String nome;
      int i=0;
      RelaQueue q = new RelaQueue();//cria a queue
      Professor p = new Professor(q); //cria o professor
      Aluno temp;
 
      //os alunos serao criados até q o operador nao deseje mais
      while(op2.equals("s"))
      {
          //inicialmente sera perguntado a Escola e o Nome do aluno
          op = c.readLine("Qual a escola do aluno?: ");
          if(op.equals("ITA"))
          {
 
             nome = c.readLine("O nome do aluno: ");
             temp = new  AlunoITA(nome,q);
             alunos.add(i,temp);
          }
         else
         {
           if(op.equals("USP"))
           {
             nome = c.readLine("O nome do aluno: ");
             temp = new  AlunoUSP(nome,q);
             alunos.add(i,temp);
           }
           else {
            if(op.equals("Unicamp"))
           {
             nome = c.readLine("O nome do aluno: ");
             temp = new  AlunoUnicamp(nome,q);
             alunos.add(i,temp);
           }          
               else {System.out.println("tipo de aluno invalido! Tente denovo!");continue;}                          
            }
         }
      i++;
      //sera atribuido o comportamento do aluno
      op = c.readLine("Qual o comportamento do aluno?: ");
      if(op.equals("SafoPreguicoso")) {
         try {          
             temp.setComportamento(new SafoPreguicoso(temp));
             }catch (Exception e){System.out.println("Apenas iteanos sao Safos!");} //temos aqui um exemplo de uma exceção sendo tratada
        }
      else
         {
           if(op.equals("Esforcado")) {
               try {
                   temp.setComportamento(new Esforcado(temp));
                }catch (Exception e){}
              }  
           else {
                 if(op.equals("Summa"))
                      {
                        try {
                            temp.setComportamento(new Summa(temp));
                            }catch (Exception e){System.out.println("Apenas os iteanos são Summa");}
                      }  
                else{ 
                      if(op.equals("Pemba")){
                            try {
                                 temp.setComportamento(new Pemba(temp));
                                }catch (Exception e){}    
                        }
                      else{
                            if(op.equals("Imprevisivel"))
                            {
                             try {
                                  temp.setComportamento(new Imprevisivel(temp));
                                 }catch (Exception e){}                                
                            }
                            else{
                                 if(op.equals("Burro"))
                                   {
                                    try {
                                         temp.setComportamento(new Burro(temp));
                                         }catch (Exception e){System.out.println("Iteanos nao sao burros");}                            
                                    }
                                 else {System.out.println("tipo de aluno invalido! Ele sera considerado Esforcado!");}
                                }
                          }
 
                     }
                }
          }
 
      System.out.println();
      op2=c.readLine("Deseja inserir novo aluno?(s/n): ");
      System.out.println();
      }
    //faz todos os alunos criados fazerem e entregarem o relatorio
    for(i=0;i<alunos.size();i++)
    {
      (alunos.get(i)).fazEEntregaRelatorio();        
    }
 
    p.corrigirRelatorios();    
 
  }
}

A seguir, realizamos um série de teste com a nova classe simulador:

fig3.JPG

Conclusão

Assim, neste laboratório podemos aprender a trabalhar com a captação de dados através da linha de comando, utilizando pela primeira vez uma classe com o método main. Também podemos trabalhar com a criação de uma classe genérica e com exceções. De modo geral, podemos trabalhar esses conceitos e entendê-los melhor. A maior parte do código não foi representada neste relatório devido a grande extensão e a pouco contribuição que teria. Mas, o código completo está em anexo com os devidos comentários ao longo do mesmo. Este laboratório foi uma ótima tarefa, a maior dificuldade esteve em captar os dados do usuário. O restante estava bem indicado na descrição do laboratório.

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