Actividade

Esta aula tem como objectivos praticar/relembrar os seguintes conceitos:
  • Modelação de um domínio
  • Realização de exercícios que exercitam a modelação e os conceitos de classe e objecto
  • Realização do 1º Exercício de Programação (EP1) para avaliação.

Enunciado da aula


Modelação


A actividade de modelação é fundamental no desenvolvimento de software. Modelação é uma das primeiras etapas no processo de desenvolvimento. A concretização do projecto só deve ser feita depois do domínio do projecto ter sido modelado. Desta forma, e caso a modelação tenha sido bem feita, a concretização da aplicação decorrerá de forma mais rápida dado que o desenho da aplicação já foi realizado. 

Para modelar um domínio existem várias linguagens de modelação. A mias utilizada é o UML. O UML é constituído por vários diagramas, em que cada tipo de diagrama permite modelar/descrever diferentes aspectos de uma dada aplicação. Um dos diagramas mais utilizado é o diagrama de classes que permite descrever as características (atributos e métodos) das várias entidades do domínio da aplicação.Sumariamente, neste diagrama uma classe representa um conjunto de entidades do domínio que têm uma estrutura de dados e comportamento semelhantes. Cada classe é representada por um rectângulo com três secções:

  • A primeira secção tem apenas o nome da classe;
  • A segunda secção tem a descrição da estrutura de dados da classe. Cada item da estrutura da classe é designado como atributo e é necessário indicar o seu nome e tipo;
  • Finalmente, a terceira secção tem a descrição do comportamento da classe, indicando as várias funcionalidades suportadas pela classe. Cada funcionalidade é designada como método e é descrita pelo nome do método, parâmetros do método e valor de retorno. De forma muito simplista, um método é a versão orientada a objectos de uma função em C.
Podem ainda existir relações entre classe. Por exemplo, existe uma relação entre a classe Curso e Aluno, no sentido em que um curso sabe os alunos que estão inscritos no curso e cada aluno sabe o curso em que está inscrito. Na modelação que vai realizar, as relações entre classes (designadas por associações) são representadas por um segmento de recta a unir as duas classes.

1º Exercício


Considere o seguinte domínio de aplicação:
Um pneu tem uma dada pressão de ar. Cada pneu tem também uma pressão de ar recomendada. Um pneu quando é criado tem uma dada pressão de ar e sabe também a sua pressão de ar recomendada. Pode-se saber a pressão de ar  e a pressão recomendada de um dado pneu. Não deve ser possível alterar a pressão de ar recomendada de um pneu. É possível saber se um pneu está vazio ou não. O pneu está vazio caso a sua pressão de ar seja inferior a 80% da pressão de ar recomendada. É possível alterar a pressão de ar de um pneu. Se o pneu passar a ter uma pressão de ar superior a 150% da pressão de ar recomendada, então o pneu estoira (fica com um furo) e fica com uma pressão de ar igual a 0. Quando um pneu tem um furo já não é possível alterar a sua pressão. É possível saber se um pneu tem um furo ou não.

Primeiro modele o este domínio e depois concretize-o.

2º Exercício


Considere o seguinte domínio de aplicação:

Um carro tem sempre uma marca, quilometragem, velocidade máxima e quatro pneus. Quando o carro é criado a sua quilometragem é igual 0. É possível saber a quilometragem do carro, a sua marca e se algum dos seus pneus está vazio. A marca é representada simplesmente por uma cadeia de caracteres. É possível também alterar o valor da quilometragem do carro. É possível  montar novos pneus no carro. Os pneus são montados no carro numa única operação, a qual recebe os novos pneus a montar. Esta operação só será possível se todos os pneus tiverem a mesma pressão de ar recomendada. A operação de montagem deve devolver se houve sucesso a montar os pneus ou não.

Concretize este domínio em Java.

3º Exercício


Considere o seguinte domínio de aplicação:

Uma caneta tem uma dada capacidade de tinta, cor e uma marca. A caneta mantém ainda a quantidade de tinta que tem. Quando se cria uma caneta é necessário indicar a sua marca, capacidade de tinta e cor. Uma caneta quando é criada está sempre cheia. A marca e a cor são representadas por uma cadeia de caracteres. Uma caneta pode escrever, ser recarregada e indicar a sua cor e quantidade de tinta ainda disponível. A operação de escrever recebe a cadeia de caracteres a escrever no terminal. Esta cadeia de caracteres só é escrita caso a caneta ainda tenha tinta (não interessa a quantidade). Escrever uma cadeia de caracteres gasta uma quantidade de tinta igual ao número de caracteres a escrever (o método length() de String devolve o número de caracteres da cadeia de caracteres). Atenção que a quantidade de tinta não pode ficar um número negativo. A operação de recarregar recebe com a argumento a quantidade tinta a adicionar e deve ter em conta a capacidade da caneta. Deve devolver a quantidade de tinta não utilizada no carregamento.


Primeiro modele o este domínio e depois concretize-o.