Introdução à Modelação com UML/Transportadora de animais

From Wiki**3

< Introdução à Modelação com UML

Este execício saiu no teste de 2012/01/30.

Problema

Considere o seguinte domínio:

Uma transportadora tem vários camiões e comboios capazes de transportar vários tipos de animais (inicialmente, ovelhas, vacas e cavalos, embora seja de prever que venham a ser considerados outros). Os camiões e comboios têm identificadores únicos e uma dada capacidade de transporte, determinada pelo peso máximo que pode transportar. Desta forma, é possível acrescentar um animal a transportar a um dado camião ou comboio se a capacidade de transporte não tiver sido ultrapassada. Dado um meio de transporte, é possível saber a capacidade de transporte ainda disponível.

Os animais têm um identificador único, registo do peso, sabem andar e comer, e têm o registo de quem é o seu dono. Cada tipo de animal tem capacidades adicionais distintas: os cavalos sabem correr, as ovelhas pastar e as vacas mugir. Os donos são identificados pelo nome. Por vezes, os donos transportam lotes de animais, todos no mesmo meio de transporte. Os lotes têm um identificador único e apresentam as mesmas capacidades que os animais individuais.

Um comboio é constituído por carruagens e cada carruagem tem uma capacidade máxima de transporte. A capacidade máxima de transporte de um comboio é igual à soma das capacidades das suas carruagens. É possível adicionar carruagens a um comboio. Quando se adiciona uma dada carga a transportar a um comboio, o comboio utiliza a primeira carruagem com capacidade disponível para transportar essa carga.

Considere que os comboios podem transportar qualquer tipo de animal. No entanto, e por enquanto, os camiões apenas podem transportar vacas ou cavalos, podendo no futuro aceitar novos tipos de animais. Apresente uma solução que garanta a flexibilidade sem impacto no código existente.

  1. Desenhe o diagrama de classes UML correspondente ao domínio apresentado. Represente todas as classes (seus nomes, métodos e atributos). Indique também as relações de herança, associação e agregação.
  2. Implemente em Java as classes do domínio apresentado (ver nota abaixo), bem como os seus atributos e métodos (excepto getters e setters). Os atributos identificados devem ser suficientes para suportar a funcionalidade e os métodos devem conter implementações que permitam verificar inequivocamente que a funcionalidade desejada está presente e que realiza as operações especificadas. Nota: não é necessário implementar as classes que representam os seguintes conceitos: camião, cavalo, vaca.

Solução

Esboço do diagrama de classes para o problema apresentado.

PO-20120130-class.png

Implementação