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)
Line 14: Line 14:
  
 
= Solução =
 
= Solução =
 +
 +
<java5>
 +
/**
 +
* 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;
 +
}
 +
}
 +
</java5>
  
 
[[category:Ensino]]
 
[[category:Ensino]]
 
[[category:PO]]
 
[[category:PO]]

Revision as of 19:19, 25 October 2009

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

<java5> /**

* 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; } } </java5>