Actividade

  1. Organização do código em packages. Ver esta breve explicação sobre packages. Informação oficial mais detalhada aqui.
  2. Perceber as funcionalidades das classes MenuCommand, Form Display.
  3. Resolução do enunciado da aula.
  4. Resolução do exercício EP5 para avaliação

A Framework de Interacção com o Utilizador

Os alunos devem ler, com atenção, a documentação respeitante à framework de interacção com o utilizador po-ulib a utilizar na realização do projecto:

  • Breve descrição da funcionalidade da framework: 
  • Descrição detalhada da framework: po-uilib.

Enunciado da Aula


1º Exercício


Considere as seguintes classes Numero, OperacaoMais e Main (cujo código pode ser visto aqui). Cada uma destas classes deve passar a pertencer a um package diferente:
  • Numero: calc.core
  • OperacaoMais: calc.operation
  • Main: calc
O que é necessário acrescentar a cada uma das classes por forma a identificar o seu package?

Que outras alterações é que são necessárias fazer por forma estas classes compilem correctamente?

Em Java, os packages devem ser guardados no sistema de ficheiros (ou num ficheiro .jar), criando uma estrutura de directórios, no directório de desenvolvimento, que preserva a hierarquia dos packages.e colocar os ficheiros com o código das classes nos sub-directórios correspondentes aos seus packages. Neste caso, qual é a estrutura de directórios que tem que ser criada e onde deve ser colocado cada ficheiro?
 

2º Exercício

Considere a aplicação exemplo (exemplo.jar) da framework de interacção com o utilizador po-uilib apresentada na descrição detalhada da framework. Concretize o comando:
  • ShowGreaterThan, que pede um número ao utilizador e depois apresenta ao utilizador todos os números guardados na aplicação que são maiores do que o inserido pelo utilizador. Dado que o critério de comparação é muito simples, não é necessário definir um método no core que determine os números maiores que um dado valor. A comparação pode ser feita directamente no próprio comando. Os números devem ser apresentados pela ordem em que foram inseridos.
  • Após ter realizado a sua solução, compare-a com esta. Não se esqueça de compilar o código.
Suponha agora que quer construir um novo comando, ShowNumberOrdered, que apresenta os números inseridos pelo utilizador, mas ordenados de forma crescente. Concretize este comando.  Após ter realizado a sua solução, compare-a com esta. Não se esqueça de compilar o código.

3º Exercício

Considere novamente a aplicação exemplo da framework de interacção com o utilizador po-uilib. Adicione agora as novas operações:
  • Remover um dado número. O número a remover é indicado pelo utilizador e esta operação deve estar disponível no menu de edição (EditMenu);
  • Colocar um dado número guardado numa determinada posição da sequência inseriria pelo utilizador. A funcionalidade a realizar deve indicar o número a colocar como sento o primeiro e apresentar a nova sequência de números. Esta operação deve estar disponível no menu de edição  (EditMenu). Pode assumir que a posição fornecida pelo utilizador é sempre válida;
  • Apresentar quantos números estão presentes e a sua média. 
Concretize os comandos e indique as alterações a realizar aos menus.
Atenção, não esquecer que os comandos realizados não devem concretizar lógica de negócio. A lógica de negócio deve estar definida exclusivamente no core da aplicação. Desta forma têm-se as seguintes vantagens:
  • Alterações realizadas na concretização do core não têm impacto no código de interacção;
  • Não é necessário duplicar lógica de negócio em diferentes concretizações da interacção com o utilizador.

4º Exercício


Pretende-se agora adicionar a interface com o utilizador à aplicação editor gráfico cuja lógica de negócio foi finalizada no exercício 1 da semana passada e cuja solução foi disponibilizada. As operações a disponibilizar ao utilizador devem ser as seguintes: 
  • Criar um círculo, sendo necessário pedir ao utilizador o tamanho do raio e o centro do círculo a criar;
  • Criar um quadrado, sendo necessário pedir ao utilizador os dois extremos do quadrado;
  • Desenhar as formas;
  • Colocar uma dada forma como sendo a primeira forma do editor. É necessário pedir ao utilizador o identificador da forma a colocar no início;
  • Escrever o número de formas do editor.
  • Desenhar as formas por ordem crescente de identificador.

Estas operações devem estar agrupadas num único menu. Concretize a interface com o utilizador, especificando o menu da aplicação e os vários comandos que realizam as operações requeridas.

Considere que o código com a lógica de negócio da aplicação editor pertence ao package editor.core.

5º Exercício


Suponha agora que se pretende adicionar a funcionalidade selecionar uma forma à aplicação editor gráfico e depois poder realizar operações sobre a forma selecionada. Assim, pretende-se acrescentar os seguintes comandos:
  • Selecionar uma forma. deve ser pedido ao utilizador o identificador da forma a selecionar;
  • Mover a forma selecionada. O deslocamento a aplicar é indicado pelo utilizador;
  • Colocar a forma selecionada como sendo a última forma do editor.
A sua solução deverá ter em conta a possibilidade de poder ter a aplicação editor gráfico a ser utilizado simultaneamente por vários utilizadores, cada um deles com uma selecção distinta.