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
- Resolução do enunciado da aula aplicando as convenções de codificação da disciplina.
- 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.- NumeroComMemoria.java
- AndGate.java
- TrenaryAndGate.java (não tem em conta a alteração)