Avaliação do Projecto de Época Especial

A avaliação do projecto compreende a avaliação da qualidade e funcionalidade do código produzido.

Haverá uma discussão presencial em lugar do teste prático.

A data de entrega é 2017/07/17 10:00. A discussão, em substituição do teste prático, realiza-se às 11:00 desse dia. Não entregar o projecto até às 10:00 ou faltar à discussão (seja qual for a razão), são motivos para reprovação em época especial.

Editor de Texto (projecto de época especial)

Um processador de texto cria e edita documentos de texto.

Cada documento tem informação sobre o utilizador que o criou (nome), data da criação, e data e autor da última alteração. O documento guarda ainda os elementos que o compõem e que definem a sua estrutura interna (ver a seguir).

Um documento de texto é constituído por elementos de texto que podem ser de vários tipos. Cada elemento de texto tem um identificador único (um inteiro) e, dependendo do seu tipo, pode ter vários atributos e estruturas adicionais.

O elemento de texto mais simples é a frase. Cada frase contém palavras, sendo possível apresentar o texto na saída e contabilizar o seu comprimento, tanto em termos de caracteres, como em termos de palavras.

As frases podem ser agrupadas em parágrafos, que mantêm a funcionalidade básica da frase. Os parágrafos podem ser agrupados em secções. As secções podem ser agrupadas em capítulos. Secções e capítulos, além de manterem a interface de consulta ao comprimento do texto que contêm, possuem ainda como atributo um título. Os títulos também contribuem para a contabilização dos elementos que o contêm.

Os capítulos podem conter secções ou, simplesmente, parágrafos. As secções podem conter, além de parágrafos, outras secções (subsecções).

Além dos atributos e interfaces descritos, as seguintes operações estão definidas:

  • Para o editor de texto: “novo” (criar um documento), “abrir” (abrir um documento), “guardar” (guardar um documento).
  • Para um documento: “mostrar” (apresentação do conteúdo), “adicionar capítulo”, “obter capítulo”, “apagar elemento de texto”;
  • Para um capítulo: “mostrar”, “adicionar secção” e “obter secção”;
  • Para uma secção: “mostrar secção”, “adicionar subsecção”, “obter elemento de texto”, “adicionar parágrafo”, “apagar elemento de texto”;
  • Para um parágrafo: “mostrar”, “adicionar frase”, “obter frase” e “remover frase”;

Considerando a descrição acima, desenhe o diagrama de classes correspondente, assim como a interface necessária para permitir a realização das operações descritas.

Implemente em Java o modelo acima e construa uma aplicação que ilustre a definição e uso do editor de texto (classe App com método main que deve exemplificar um caso de utilização do editor de texto, devendo por isso incluir a criação de um documento com vários elementos de texto e a utilização das várias funcionalidades).