Difference between revisions of "Herança e Composição/Exercício 01: Porta AND Binária"

From Wiki**3

< Herança e Composição
(Solução)
(Solução)
Line 16: Line 16:
  
 
{{CollapsedCode|Ficheiro '''AndGate2.java'''|
 
{{CollapsedCode|Ficheiro '''AndGate2.java'''|
<java5>
+
<source lang="java">
 
/**
 
/**
 
  * Logical AND gate.
 
  * Logical AND gate.
Line 116: Line 116:
 
}
 
}
 
}
 
}
</java5>
+
</source>
 
}}
 
}}
  

Revision as of 01:47, 8 November 2018

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
/**
 * Logical AND gate.
 */
public class AndGate2 {
	private boolean _a = false;
	private boolean _b = false;

	/**
	 * Default constructor: false for all inputs.
	 */
	public AndGate2() {
		// nothing to do
	}

	/**
	 * Inputs receive same value.
	 * 
	 * @param v
	 *            the input value.
	 */
	public AndGate2(boolean v) {
		_a = _b = v;
	}

	/**
	 * Arbitrary input value combinations.
	 * 
	 * @param a
	 *            input value
	 * @param b
	 *            input value
	 */
	public AndGate2(boolean a, boolean b) {
		_a = a;
		_b = b;
	}

	/**
	 * @return first input value.
	 */
	public boolean getA() {
		return _a;
	}

	/**
	 * Set input value.
	 * 
	 * @param a
	 *            input value.
	 */
	public void setA(boolean a) {
		_a = a;
	}

	/**
	 * @return second input value.
	 */
	public boolean getB() {
		return _b;
	}

	/**
	 * Set input value.
	 * 
	 * @param b
	 *            input value.
	 */
	public void setB(boolean b) {
		_b = b;
	}

	/**
	 * @return value of logical AND operation.
	 */
	public boolean getOutput() {
		return _a && _b;
	}

	/**
	 * @see java.lang.Object#equals(java.lang.Object)
	 */
	@Override
	public boolean equals(Object other) {
		if (other instanceof AndGate2) {
			AndGate2 andGate = (AndGate2) other;
			return _a == andGate.getA() && _b == andGate.getB();
		}
		return false;
	}

	/**
	 * @see java.lang.Object#toString()
	 */
	@Override
	@SuppressWarnings("nls")
	public String toString() {
		return "A:" + _a + " B:" + _b;
	}
}