Objectivo

  • Realização de código utilizando a linguagem de programação Java.
  • Aplicação das convenções de codificação na realização de código.

Actividade

  1. Resolução do enunciado da aula aplicando as convenções de codificação da disciplina.
  2. Resolução do 4º Exercício de Programação (EP4) caso tenha tempo. Este exercício é para entregar na próxima aula.

Enunciado da Aula


Primeira Parte


Dada a classe Numero desenvolvida na aula anterior, pretende-se agora construir uma nova entidade, NumeroComMemoria, que tem um comportamento semelhante à classe Numero (deve suportar pelo menos as mesmas funcionalidade) mas que tem a seguinte funcionalidade extra:
  • É possível desfazer a última alteração realizada. Por exemplo, suponha que criado um NumeroComMemoria a representar o número 5 e de seguida se altera o seu valor para 10. A nova funcionalidade de desfazer a última alteração deverá permitir alterar o valor de 10 para 5.
  • Realizar a funcionalidade de desfazer duas vezes seguidas deve deixar o número inalterado. Considerando o exemplo anterior, ao realizar o desfazer pela segunda vez, o valor do número deverá passar de 5 para 10.
  • É possível obter o valor anterior. Caso não haja valor anterior (ainda não foi feita qualquer alteração ao número em causa), então devolve o próprio valor do número.

Concretize a classe NumeroComMemoria.

Segunda Parte


Realize uma classe Java que concretize uma porta lógica AND com duas entradas. Esta classe deve chamar-se AndGate e ter, entre outras que sejam (justificadamente) julgadas necessárias, a seguinte funcionalidade:

  • Uma porta lógica AND pode ser criada já com valores para as suas entradas ou então pode ser criada com o valor por omissão "false" para as duas entradas;
  • Dois métodos que permitem alterar de forma isolada cada uma das entradas;
  • Um método, designado getOutput, que indica qual o valor da saída, tendo em conta o estado actual das duas entradas.
  • Dois métodos que devolvem o valor das duas entradas.

Após ter realizado esta classe, codifique o método main respectivo, por forma a demonstrar o correcto funcionamento desta classe. Nomeadamente, este método deverá criar dois objectos da classe AndGate, colocar entradas diferentes para cada um dos objectos e escrever o valor da saída obtida para cada um destes objectos. Deverá escolher as combinações de valores de entrada correctas por forma a ter valores distintos na saída dos dois objectos.

Realize uma nova classe que concretiza uma porta lógica AND com três entradas. Esta classe deve chamar-se TrenaryAndGate e ter, entre outras que sejam (justificadamente) julgadas necessárias, a seguinte funcionalidade:

  • Três métodos que permitem definir o valor de cada uma das entradas;
  • Um método, designado getOutput, que devolve o valor do resultado da operação lógica, tendo em conta o valor actual das três entradas;
  • A funcionalidade desta classe deve ser concretizada usando a classe anterior.
  • Neste caso, quando é criado uma porta lógica de 3 entradas, o valor de cada uma das entrada é false.

Após ter realizado uma solução para a classe TrenaryAndGate, realize uma nova versão em que optimiza o número de instâncias de AndGate criadas por cada instância de TrenaryAndGate.

Relembra-se que todo o código concretizado deve seguir as regras de codificação da disciplina.

Altere o código desta classe, por forma a que quando é criado uma porta lógica de 3 entradas, o valor de cada uma das entrada é true.

Solução Proposta

A solução proposta para ambas as partes 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.