/* une idée...

schéma UML :

Les Classes :

/** vision Objet des expressions entières...
 * 
 * @see ExpressionSimple , ExpressionComposee
 * @author dazy
 */
public abstract class Expression {

  /** Schéma de méthode imposé pour l'évaluation des expressions
  */
  public abstract int eval();
  
  /** Schéma de méthode imposé pour l'affichage des expressions
 */
  public abstract String toString();

} /* end class Expression */

ExpressionSimple est inchangée
/** Expression Composée : contient 2 sous expressions * * @see OtherClasses * @author dazy */ public abstract class ExpressionComposee extends Expression { /** 2 sous-expressions e1 , e2 */ public Expression e1 , e2; /** un operateur */ ExpressionComposee(Expression e1 , Expression e2){ this.e1=e1; this.e2=e2; } /** eval() */ abstract public int eval(); /** toString() */ abstract public String toString(); } /* end class ExpressionComposee */
/** Expression Composée : contient 2 sous expressions * * @see OtherClasses * @author dazy */ public class Addition extends ExpressionComposee { Addition(Expression e1 , Expression e2){ super(e1,e2); } /** eval() */ public int eval() { return e1.eval() + e2.eval(); } /** toString() */ public String toString() { return e1.toString() + " + " + e2.toString(); } } /* end class Addition */
/** Expression Composée : contient 2 sous expressions et un opérateur. * * @see OtherClasses * @author dazy */ public class Soustraction extends ExpressionComposee { Soustraction(Expression e1 , Expression e2){ super(e1,e2); } /** eval() */ public int eval() { return e1.eval() - e2.eval(); } /** toString() */ public String toString() { return e1.toString() + " - " + e2.toString(); } } /* end class Soustraction */
/** Expression Composée : contient 2 sous expressions et un opérateur. * * @see OtherClasses * @author dazy */ public class Multiplication extends ExpressionComposee { Multiplication(Expression e1 , Expression e2){ super(e1,e2); } /** eval() */ public int eval() { return e1.eval() * e2.eval(); } /** toString() */ public String toString() { return e1.toString() + " * " + e2.toString(); } } /* end class Multiplication */
/** Expression Composée : contient 2 sous expressions * * @author dazy */ public class Division extends ExpressionComposee { Division(Expression e1 , Expression e2){ super(e1,e2); } /** eval() */ public int eval() { return e1.eval() / e2.eval(); } /** toString() */ public String toString() { return e1.toString() + " / " + e2.toString(); } } /* end class Division */
/** * * @author dazy * @version */ public class TestExprOO { /** * @param args the command line arguments */ public static void main (String args[]) { /** expression 1+2*5-3 */ Expression e = new Addition( new ExpressionSimple(1), new Soustraction( new Multiplication( new ExpressionSimple(2) , new ExpressionSimple(5)) , new ExpressionSimple(3))); System.out.println(e.toString() + " = " + e.eval()); } }