Aspectos de Análise Orientada a Objetos

Programação 3:Orientação a Objetos e Java


A análise e o projeto inicial de um sistema orientado a objetos tem como objetivo definir os requisitos básicos e a arquitetura do sistema. Isto inclui a escolha das classes essenciais do sistema e as relações entre as mesmas. Obviamente, só a experiência com análise orientada a objetos vai determinar o que é essencial e o que pode deixar de ser considerado (pelo menos inicialmente).

De forma precária, podemos usar Java como uma notação para análise e projeto orientado a objetos. Neste caso, as definições das classes devem apresentar apenas a assinatura (isto é, os nomes e tipos) dos métodos e atributos derivados. Só durante o projeto detalhado e a implementação do sistema é que decidimos que atributos são essenciais; também nesta fase decidimos como implementar os atributos derivados e os métodos das classes.

Para ilustrar os conceitos de orientação a objetos e análise, podemos considerar vários exemplos: pessoas (com esposo e filhos), listas encadeadas, conjuntos, árvores binárias, pilhas, bancos e contas, etc.


Leitura

  1. Transparências
  2. Capítulos 17 e 18 da referências 1.

Exercícios

  1. Defina em Java uma classe Pilha de pilhas de inteiros, tendo métodos para realizar as seguintes operações:

    Já que o número de elementos em uma pilha não é limitado, não use arrays para resolver esta questão. (Opcional)

  2. Usando Java, defina a assinatura da classe Netscape cujos objetos são os conhecidos navegadores. (Opcional)
  3. Defina a assinatura da classe ServidorWWW cujos objetos são servidores WWW que oferecem serviços a clientes como os objetos da classe Netscape. (Opcional)
  4. Defina uma classe BancoModular similar a Banco, mas que é definida usando-se a classe ConjuntoDeContas; isto é, BancoModular deve ter apenas um atributo essencial, contas, do tipo ConjuntoDeContas. Compare as duas implementações de bancos: Banco e BancoModular. Quais as vantagens e desvantagens de cada abordagem? Justifique. Note que se não tivermos cuidado podemos escrever programas orientados a objetos que não são modulares! (Opcional)
  5. Suponha que por questões de eficiência temos que modificar a maneira como contas são armazenadas no banco; ao invés de arrays temos que usar árvores binárias. Qual implementação de bancos seria mais facilmente modificada: Banco ou BancoModular? Escolha uma delas e faça as modificações necessárias. (Opcional)

Informações

Várias equipes precisam ser formadas. Vejam as equipes formadas até agora.

Infelizmente os exemplos mencionados acima não estão disponíveis nestas notas de aula. Entre em contato com seus companheiros (via depto.cursos.grad.if101) para comparar soluções.


Paulo Borba (phmb@di.ufpe.br)