Lab1 Ricardo Tominaga

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

lab1img1.jpg

Img.1 Execução da classe teste

lab1img2.jpg

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.

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