Actividade

  1. Resolução do enunciado da aula.
  2. Resolução do Exercício 6 (EP6).

Objectivo

Utilização de um padrão de desenho determinado para aumentar a funcionalidade de uma aplicação.

Enunciado da Aula

Considere um editor gráfico que mantém informação sobre várias formas. O editor coloca à disposição do utilizador um conjunto de operações:
  1. Criação de um quadrado, círculo ou linha: cada forma é identificada por um identificador único (inteiro), determinado no momento da criação pelo construtor da classe base dos objectos gráficos, a classe Form ;
  2. Remoção de uma forma: o utilizador deve indicar o identificador da forma a remover;
  3. Deslocamento de uma forma: o utilizador deve indicar o identificador da forma a mover, assim como o deslocamento, nos eixos x e y, a aplicar à forma seleccionada.
  4. Desenhar todas as formas: consiste em desenhar todas as formas mantidas pelo editor;
  5. Sair da aplicação.

O conjunto de formas existentes no editor são guardados pelo objecto que representa o editor gráfico (uma instância da classe Editor ). Este objecto é também responsável por disponibilizar a interface com o utilizador. A interacção com o utilizador faz-se através das habituais classes Menu , UserInteraction e Command .

Cada forma tem estado próprio e funcionalidade que são caracterizados pela classe de que são instâncias. Assim, é possível desenhar e mover cada forma, mas cada classe específica determina a concretização da acção abstracta:

  1. Um quadrado (classe Square ) é cartacterizado por um ponto (canto inferior esquerdo) e pelo tamanho do lado. Desenhar um quadrado corresponde a escrever o valor do canto e o tamanho do lado. Mover um quadrado corresponde a deslocar o canto;
  2. Um círculo (classe Circle ) é caracterizado por um ponto (centro do círculo) e pelo raio. Desenhar um círculo corresponde a escrever os valores do centro e do raio. Mover um círculo corresponde a deslocar o centro;
  3. Uma linha (classe Line ) é caracterizada por dois pontos (as extremidades da linha). Desenhar uma linha corresponde a escrever os pontos. Mover uma linha corresponde a deslocar os dois pontos.

Trabalho Proposto

Pretende-se alterar a funcionalidade do editor gráfico (fornecida em anexo) inserindo um mínimo de alterações ao código já existente. A nova versão do editor contém o conceito de grupo, correspondente a um agrupamento de formas.Quando se move um dado grupo, é aplicado o mesmo deslocamento a todos os objectos gráficos que constituiem o grupo. Desenhar um grupo, corresponde a desenhar todos os objectos que pertencem ao grupo. Cada grupo é, tal como as formas, também identificado por um número único.

A nova funcionalidade corresponde às seguintes operações:

  1. Criar um novo grupo de formas: quando se cria um grupo de formas, tem que se indicar a lista de formas que fazem parte do grupo, especificando os seus identificadores;
  2. Desfazer um grupo: corresponde a remover as formas do grupo e a remover o grupo. Os elementos do grupo removido continuam a existir

Para realizar estas operações exige-se a aplicação de um determinado padrão de desenho (outras soluções, embora potencialmente funcionais, serão desconsideradas).

Além do conceito de grupo, a nova versão deve ser capaz de guardar o seu estado, podendo recuperá-lo mais tarde (no início de uma nova execução).

Material de Apoio

O ficheiro ap8.jar contém o código do editor gráfico.