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
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.
Corrigido. Faltou a classe simulador antes das mudanças e no relatório colocar demonstrações da sua interface.