Herança e Composição/Exercício 01: Porta AND Binária

From Wiki**3

< Herança e Composição

Problema

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

  • Se, na construção, não se especificarem os valores lógicos das entradas, devem ser considerados falsos;
  • Se, na construção, se especifica apenas um valor lógico, assume-se que é o mesmo para as duas entradas;
  • Se, na construção, se especificam dois valores lógicos, então cada entrada deve ser definida em conformidade;
  • Depois de criado o objecto, deve ser possível estabelecer o valor de cada entrada, tanto individualmente, como em conjunto;
  • Deve ser possível obter o valor da operação lógica (método getOutput).
  • Deve ser possível comparar duas portas (são iguais se os valores das entradas forem iguais);
  • Deve ser possível apresentar (toString) uma descrição da porta, sob o formato A: valor B: valor (onde valor é o valor de cada entrada).

Após ter definido a classe, codifique uma aplicação e a função main respectiva, por forma a demonstrar o correcto funcionamento desta classe. Escolha diferentes combinações de entradas por forma a ter valores distintos na saída dos dois objectos.

Solução

Ficheiro AndGate2.java
 1 /**
 2  * Logical AND gate.
 3  */
 4 public class AndGate2 {
 5 	private boolean _a = false;
 6 	private boolean _b = false;
 7 
 8 	/**
 9 	 * Default constructor: false for all inputs.
10 	 */
11 	public AndGate2() {
12 		// nothing to do
13 	}
14 
15 	/**
16 	 * Inputs receive same value.
17 	 * 
18 	 * @param v
19 	 *            the input value.
20 	 */
21 	public AndGate2(boolean v) {
22 		_a = _b = v;
23 	}
24 
25 	/**
26 	 * Arbitrary input value combinations.
27 	 * 
28 	 * @param a
29 	 *            input value
30 	 * @param b
31 	 *            input value
32 	 */
33 	public AndGate2(boolean a, boolean b) {
34 		_a = a;
35 		_b = b;
36 	}
37 
38 	/**
39 	 * @return first input value.
40 	 */
41 	public boolean getA() {
42 		return _a;
43 	}
44 
45 	/**
46 	 * Set input value.
47 	 * 
48 	 * @param a
49 	 *            input value.
50 	 */
51 	public void setA(boolean a) {
52 		_a = a;
53 	}
54 
55 	/**
56 	 * @return second input value.
57 	 */
58 	public boolean getB() {
59 		return _b;
60 	}
61 
62 	/**
63 	 * Set input value.
64 	 * 
65 	 * @param b
66 	 *            input value.
67 	 */
68 	public void setB(boolean b) {
69 		_b = b;
70 	}
71 
72 	/**
73 	 * @return value of logical AND operation.
74 	 */
75 	public boolean getOutput() {
76 		return _a && _b;
77 	}
78 
79 	/**
80 	 * @see java.lang.Object#equals(java.lang.Object)
81 	 */
82 	@Override
83 	public boolean equals(Object other) {
84 		if (other instanceof AndGate2) {
85 			AndGate2 andGate = (AndGate2) other;
86 			return _a == andGate.getA() && _b == andGate.getB();
87 		}
88 		return false;
89 	}
90 
91 	/**
92 	 * @see java.lang.Object#toString()
93 	 */
94 	@Override
95 	@SuppressWarnings("nls")
96 	public String toString() {
97 		return "A:" + _a + " B:" + _b;
98 	}
99 }