aluno: Ricardo Itiro Sabota Tominaga
ano/sem: 2008/2o.
data do laboratório (num. da semana) : 06/08/2008 (2)
Introdução
O laboratório "Lab1 - Introdução a OO e Java" teve como objetivo a prática de conceitos de orientação a objetos, bem como a familiarização com o ambiente BlueJ e um primeiro contato com a sintaxe Java. A atividade consistiu na criação de classes, concretas e abstratas, as quais representavam um esquema de geração de objetos "aluno", "professor", "relatório" e "fila" com seus devidos atributos e métodos.
Desenvolvimento
Análise do Código Fonte
Será feita uma análise do código fonte mostrando conceitos importantes de OO.
Classe do objeto, estado e comportamento
public class RelaQueue { private Relatorio[] Queue = new Relatorio[10]; private int inicio=0; private int fim=0; public void queue(Relatorio rela){ Queue[fim]=rela; fim=(fim+1)%10; } public Relatorio dequeue(){ Relatorio aux; aux=Queue[inicio]; if(inicio!=fim){ inicio=(inicio+1)%10; return aux; } else return null; } }
Nesse pedaço de código há a declaração da classe "RelaQueue" na primeira linha, e também está especificado seu "modifier" de acesso, no caso, do tipo "public". Estão declaradas, dentro do escopo da classe suas variáveis internas, as quais definem o estado do objeto fila, elas possuem acesso "private" o que restringe o seu acesso à própria classe. Logo em seguida está a declaração dos métodos, os quais representam o comportamento do objeto, como por exemplo "queue" que adiciona um objeto do tipo "Relatório" à fila.
Herança, polimorfismo e classe/método abstrato
public abstract class Aluno { ... public abstract float getInteligencia(); public abstract float getDedicacao(); ... }
public class AlunoSafoPreguicoso extends Aluno { ... public float getInteligencia(){ return inteligencia; } public float getDedicacao(){ Random num = new Random(); return num.nextFloat()*(float)0.5; } }
Têm-se aqui exemplos de classe abstrata e métodos abstratos. Os métodos abstratos são declarados na classe abstrata mas não possuem escopo. Quando a classe "Aluno" é "estendida" pela classe "AlunoSafoPreguiçoso" ocorre o fenômeno de herança, uma vez que um aluno safo e preguiçoso é um tipo de aluno, e dessa forma herda as características básicas de um aluno. Além disso, o escopo é adicionado aos métodos abstratos na subclasse. O polimorfismo é percebido no momento em que se chama um método da superclasse "Aluno" através de um objeto instanciado como "AlunoSafoPreguiçoso", por exemplo.
Resultados
Img.1 Execução da classe teste
Img.2 Instanciação manual de objetos
A imagem Img.2 mostra a instanciação de objetos feita manualmente. Primeiramente foi instanciado um objeto "RelaQueue", uma vez que todos os outros objetos dependem dele para sua instanciação. Depois, foram criados um objeto "AlunoSafoPreguicoso" e um "AlunoEsforcado", dois objetos "Relatorio" e um objeto "Professor". Acessou-se o método "fazEEntregaRelatorio()" dos objetos herdados de "Aluno", dessa forma os relatórios foram colocados na fila "queue". Então, foi executado o método "corrigeRelatorios()", o qual atribuiu notas aos relatórios e as imprimiu juntamente com os nomes dos respectivos alunos, além de eliminar os relatórios da fila.
Conclusão
O lab1 foi satisfatório no aprendizado de alguns conceitos de POO. Um dos problemas encontrados foi o desconhecimento prévio da necessidade de se colocar o método "super()" na subclasse quando o construtor da superclasse não é padrão, apesar disso, o problema foi resolvido com uma rápida consulta ao Google. Um fato estranho constatado com o exercício é a existência de uso mútuo entre classes, como no caso de "Relatorio" e "Aluno", em outras palavras, não é possível compilar essas classes separadamente. Enfim, o paradigma da orientação a objetos se mostrou de fácil compreensão e de grande organização.








Código OK e rela muito bom. Bons comentários.