Objectivos


  1. Concepção de classes em Java que integram alguns conceitos fundamentais da Programação com Objectos, como a herança, substituição de métodos e polimorfismo.
  2. Utilização do diagrama de classes da linguagem UML para modelar um problema.

Actividade

  1. Modelação do domínio da aplicação descrita no enunciado.
  2. Resolução do enunciado da aula.
  3. Resolução do EP5 a ser entregue até ao fim da aula.

Enunciado da Aula

Leia cuidadosamente o seguinte enunciado, correspondente a uma aplicação que representa um editor gráfico (com uma interface via linha de comandos).

Considere um editor gráfico que é responsável por gerir as várias formas que podem ser criadas pelo utilizador. Cada forma tem um identificador único (um número inteiro) que deve ser determinado no momento da criação da forma. Todas as formas tem um ponto, designado como ponto de origem. Uma forma pode estar associada ou não a um editor. Uma forma suporta fundamentalmente duas funcionalidades:

  • mover - recebe dois inteiros como argumento e realiza o deslocamento, nos eixos x e y  na forma;
  • desenhar - desenha a forma, que neste caso corresponde a devolver uma cadeia de caracteres com os dados específicos da forma: identificador Tipo[origem restantes características]

A aplicação deve suportar vários tipos de forma, cada um deles com os seus dados específicos e comportamentos potencialmente diferentes:

  • Quadrado - é caratcterizado por um ponto (canto inferior esquerdo) e pelo tamanho do lado. Este ponto corresponde ao ponto de origem para este tipo de forma. Desenhar um quadrado corresponde a escrever o valor do canto e o tamanho do lado. Mover um quadrado corresponde a deslocar o canto;
  • Linha  -  é caracterizada por dois pontos (as extremidades da linha). O ponto de origem corresponde ao primeiro extremo da linha. Desenhar uma linha corresponde a escrever os pontos. Mover uma linha corresponde a deslocar os dois pontos;
  • Círculo -  é caracterizado por um ponto (centro do círculo) e pelo raio. Desenhar um círculo corresponde a escrever os valores do centroe do raio. Mover um círculo corresponde a deslocar o centro. O centro de um círculo corresponde ao ponto de origem.

O trabalha a realizar é o seguinte:

  1. Realize o diagrama de classes UML deste domínio;
  2. Concretize as entidades Quadrado, Linha e Círculo;
  3. Realizar o EP5 no fim da aula.
Uma vez tendo as classes concretizadas e compiladas, defina uma classe Test cujo objecto é exercitar o código realizado. Nesta classe deve concretizar o método estático main que deverá realizar a seguinte sequência de operações:
  1. Criar um quadrado (sem editor) no ponto (4, 5) com um tamanho 20.
  2. Criar uma linha (sem editor) com as extremidades (2,-4) e (34,40).
  3. Criar um círculo (sem editor) com centro (0, 0) e raio igual a 30.
  4. Desenhe as três formas (escrevendo o resultado no terminal).
  5. Desloque as três formas por (5, 6)
  6. Desenhe as três formas outra vez (escrevendo o resultado no terminal).
A execução deste método utilizando o comando java permitirá exercitar um pouco o código produzido. No entanto, caso o resultado escrito seja o esperado isso não quererá dizer que não existem bugs no código produzido.

Distribuição de Trabalho


Para realizar o trabalho proposto por este enunciado deve seguir a seguinte abordagem:
  • Primeiro, cada grupo deve definir com precisão as várias entidades a construir. Este passo corresponde a identificar as classes, os seus métodos e atributos.
  • Segundo, após ter definido a interface das várias classes no ponto anterior, concretize agora o esqueleto de cada uma das classes a desenvolver. O esqueleto de uma classe consiste na especificação  dos vários métodos da classe mas sem especificar a concretização de cada método.
  • Terceiro, dividir agora as várias classes pelos vários elementos do grupo. Cada elemento deverá concretizar a ou as classes que lhe foram atribuídas no seu computador. Este processo permitirá o desenvolvimento em paralelo da solução, permitindo chegar mais rapidamente à solução final. Caso, exista apenas um computador por grupo, a tarefa de codificação deve ser partilhada pelos membros do grupo.
  • Quarto, uma vez que todas as classes tenham sido concretizadas, deve-se agrupar todas as classes num único computador por forma a poder compilar e exercitar o código realizado.
  • Nota: A classe Editor não precisa de ser totalmente concretizada. Concretize apenas os métodos necessários para o correcto funcionamento das restantes entidades do domínio da aplicação. Esta classe será finalizada numa aula de laboratório posterior.
Caso não consiga terminar a solução na aula de laboratório deve terminá-la posteriormente. Pode comparar a sua solução com a solução proposta pelo corpo docente.

Solução Proposta

A solução proposta só deve ser consultada após ter realizado o exercício proposto. Compare a sua solução com a solução proposta e caso haja diferenças, tente percebê-las por forma a descobrir se tem erros na sua solução ou utilizou apenas outra abordagem para realizar o trabalho pedido.