Lab1 Jorge Augusto

aluno: Jorge Augusto Melegati Gonçalves
ano/sem: 2008/2o.
data do laboratório (num. da semana) : 06/08/2008 (2)

Introdução

Este laboratório tinha como objetivo a familiarização do aluno com orientação a objetos e a linguagem Java(TM), para isso, utilizando o software didático Blue J, simulou-se a correção de relatórios de alunos por um professor, conforme o diagrama de classes proposto.

Desenvolvimento

Inicialmente, procurou-se criar as classes necessárias mesmo q sem código nenhum. Dessa forma, pode-se ter uma visão geral do problema e familiarizando-se com a idéia de uma maior modularização do código e o encapsulamento, uma vez que, somente as classes expostas, já dão a idéia da suas relações mesmo que elas não tenham sido implementadas.
A imagem a seguir mostra as classes já compiladas.

jorge.jpg

Classe RelaQueue

A classe RelaQueue trata-se da fila de relatórios que deverá ser instanciada no início do programa e será passada para os objetos da classe aluno e do professor. Nela, vê-se claramente o conceito de encapsulamento, não só através da variáveis privadas serem modificadas apenas através de métodos, o que será visto, também, em outras classes, mas, também, pelo fato que podemos modificá-la (implementando a fila através de outra estrutura, uma fila ligada, por exemplo) sem termos que modificar o resto do programa, afinal, os outros objetos só precisam que este objeto realize o que se espera dele, não há a necessidade de saber como.
A implementação foi realizada de forma parecida com o pseudo-código visto em aula, exceto pela sinalização do método dequeue() de quando a fila está vazia.

Classe Relatorio

A classe Relatório serve, basicamente, para o armazenamento dos atributos do relatório como qualidade e originalidade, além do seu próprio autor.

Classe Abstrata Aluno

A implementação da classe abstrata Aluno traz várias novidades para esta tarefa. O próprio conceito de classe abstrata em si, como uma classe que não pode ser instanciada como ela mesma, ou seja, neste caso, não pode haver um aluno, deve haver um aluno safo e preguiçoso ou um aluno esforçado. De forma semelhante, foi introduzido o conceito de método abstrato, que é aquele que não é explicitado na classe abstrata mas deve ser implementado pela classe que herda dela. Este conceito também nos traz algumas formas de polimorfismo, afinal, métodos abstratos sendo implementados nada mais é que a implementação de um método com a mesma assinatura numa classe filha.

Classe AlunoSafoPreguicoso

Essa é a primeira classe neste laboratório em que temos contato com o conceito de herança. A classe AlunoSafoPreguicoso herda todos os atributos e métodos da classe Aluno, além disso, como esta última é uma classe abstrata que possui métodos abstratos, da classe AlunoSafoPreguicoso é exigido a implementação desses métodos.

Classe AlunoEsforcado

Novamente, essa classe é filha da classe abstrata Aluno e tem as mesmas obrigações em relação a esta que a classe anterior. Pode-se observar que a implementação do método getDedicacao() para esta classe e a anterior foram diferentes, algo que exemplifica o conceito de polimorfismo.

Classe Professor

O que há de mais interessante nesta classe é a existência de um método privado, ou seja, esse método só pode ser chamado de dentro da classe, é mais um exemplo do encapsulamento característico da POO. Neste caso, percebemos não importa a forma como o professor corrige os relatórios, para o restante da aplicação o único interesse é que os relatórios sejam corrigidos.

Resultados dos testes

Além do teste proposto, foi feito um teste criando as instâncias manualmente. Foram criados dois alunos João e Maria da classe AlunoSafoPreguicoso e José da classe AlunoEsforcado. Cada um deles fez e entregou um relatório e, então, o professor corrigiu
os relatórios. A figura está logo abaixo:

jorge3.jpg

Do teste proposto, retiramos algumas partes mais importantes para poder fazer uma discussão da aplicação.

RelaQueue queue = new RelaQueue();
       Professor prof = new Professor(queue);
       AlunoEsforcado aluno1 = new AlunoEsforcado("John Smith", queue);
       AlunoEsforcado aluno2 = new AlunoEsforcado("Mark Smith", queue);
       AlunoSafoPreguicoso aluno3 = new AlunoSafoPreguicoso("Joseph Smith", queue);
       AlunoSafoPreguicoso aluno4 = new AlunoSafoPreguicoso("Robert Smith", queue);

Neste trecho, foram criados a fila de relatórios, necessária inicialmente pois todos os objetos das classe de aluno e professor precisam de uma referência a ela. A seguir, foram criados e instanciados, através dos seus construtores os alunos e o professor.

prof.corrigirRelatorios();

Este trecho, é aquele em que melhor se observa a questão encapsulamento. Para o usuário (programador) das classes, a única coisa que lhe interessa é o fato do objeto prof corrigir os relatórios e divulgar as notas, não há a necessidade do conhecimento de processos internos. Como, nós sabemos, internamente, os relatórios são retirados da fila, corrigidos (através de um método privado) e então suas notas são divulgadas, conforme é mostrado na seguinte tela.

jorge2.jpg

Conclusão

A situação escolhida e a forma que foi proposta exemplificaram de forma bem clara a maioria dos conceitos de POO, entretanto houve a necessidade de um conhecimento prévio dos conceitos teóricos para que fosse absorvido o máximo neste laboratório.
A utilização da ferramenta BlueJ é muito interesssante uma vez que facilita a abstração do conceito de objetos, isso se deve a utilização de um gráfico explicativo que torna concreto o conceito de objeto, além de eliminar iniciais problemas com a linguagem por retirar a necessidade inicial de uma interface com o usuário do programa.

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