|
/* une idée...
Les Classes abstraites : Expression ,
ExpressionBinaire ,
ExpressionUnaire ,
ExpressionConstante
Les Classes "concrètes" : Addition ,
Soustraction ,
Multiplication ,
Division , Inverse ,
Entier et
TestExprOO
/** 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();
/** affichage Postfixe sans parenthèses des expressions
*/
public abstract String affichagePostFixe();
/** affichage PreFixe fonctionnel des expressions
*/
public abstract String affichagePreFixe();
} /* end class Expression */
/** Expression Binaire : contient 2 sous expressions
*
* @see OtherClasses
* @author dazy
*/
public abstract class ExpressionBinaire extends Expression {
/** 2 sous-expressions e1 , e2
*/
public Expression e1 , e2;
/** un operateur
*/
ExpressionBinaire(Expression e1 , Expression e2){
this.e1=e1;
this.e2=e2;
}
/** eval()
*/
abstract public int eval();
/** toString()
*/
abstract public String toString();
/** affichage PostFixe sans parenthèse des expressions
*/
public abstract String affichagePostFixe();
/** affichage PreFixe fonctionnel des expressions
*/
public abstract String affichagePreFixe();
} /* end class ExpressionBinaire */
/** Expression Composée : contient 2 sous expressions
*
* @see OtherClasses
* @author dazy
*/
public class Addition extends ExpressionBinaire {
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() + ")";
}
/** affichage PostFixe sans parenthèse des expressions
* le moins unaire est représenté par _
*
*/
public String affichagePostFixe() {
return e1.affichagePostFixe() + e2.affichagePostFixe() + " + ";
}
/** affichage PreFixe fonctionnel des expressions
*
*/
public String affichagePreFixe() {
return "add(" + e1.affichagePreFixe() + " , " + e2.affichagePreFixe() + ")";
}
} /* end class Addition */
/** Expression Composée : contient 2 sous expressions et un opérateur.
*
* @see OtherClasses
* @author dazy
*/
public class Soustraction extends ExpressionBinaire {
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() +")";
}
/** affichage PostFixe sans parenthèse des expressions
* le moins unaire est représenté par _
*
*/
public String affichagePostFixe() {
return e1.affichagePostFixe() + e2.affichagePostFixe() + " - ";
}
/** affichage PreFixe fonctionnel des expressions
*
*/
public String affichagePreFixe() {
return "sous(" + e1.affichagePreFixe() + " , " + e2.affichagePreFixe() + ")";
}
} /* end class Soustraction */
/** Expression Composée : contient 2 sous expressions et un opérateur.
*
* @see OtherClasses
* @author dazy
*/
public class Multiplication extends ExpressionBinaire {
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() + ")";
}
/** affichage PostFixe sans parenthèse des expressions
* le moins unaire est représenté par _
*
*/
public String affichagePostFixe() {
return e1.affichagePostFixe() + e2.affichagePostFixe() + " * ";
}
/** affichage PreFixe fonctionnel des expressions
*
*/
public String affichagePreFixe() {
return "mult(" + e1.affichagePreFixe() + " , " + e2.affichagePreFixe() + ")";
}
} /* end class Multiplication */
/** Expression Composée : contient 2 sous expressions
*
* @author dazy
*/
public class Division extends ExpressionBinaire {
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() + ")";
}
/** affichage PostFixe sans parenthèse des expressions
* le moins unaire est représenté par _
*
*/
public String affichagePostFixe() {
return e1.affichagePostFixe() + e2.affichagePostFixe() + " / ";
}
/** affichage PreFixe fonctionnel des expressions
*
*/
public String affichagePreFixe() {
return "div(" + e1.affichagePreFixe() + " , " + e2.affichagePreFixe() + ")";
}
} /* end class Division */
/** Expression Unaire : contient 1 sous expression
*
* @see OtherClasses
* @author dazy
*/
public abstract class ExpressionUnaire extends Expression {
/** 1 sous-expression e
*/
public Expression e ;
ExpressionUnaire(Expression e){
this.e=e;
}
/** eval()
*/
abstract public int eval();
/** toString()
*/
abstract public String toString();
/** affichage PostFixe sans parenthèse des expressions
*/
public abstract String affichagePostFixe();
/** affichage PreFixe fonctionnel des expressions
*/
public abstract String affichagePreFixe();
} /* end class ExpressionUnaire */
/** Expression Composée : contient 2 sous expressions
*
* @author dazy
*/
public class Inverse extends ExpressionUnaire {
Inverse(Expression e){
super(e);
}
/** eval()
*/
public int eval() {
return -e.eval();
}
/** toString()
*/
public String toString() {
return "( -" + e.toString() + ")";
}
/** affichage PostFixe sans parenthèse des expressions
* le moins unaire est représenté par _
*
*/
public String affichagePostFixe() {
return e.affichagePostFixe() + " _ ";
}
/** affichage PreFixe fonctionnel des expressions
*
*/
public String affichagePreFixe() {
return "inv(" + e.affichagePreFixe() + ")";
}
} /* end class Inverse */
/** Expression Simple ou constante
*
* @see Expression
* @author dazy
*/
public abstract class ExpressionConstante extends Expression {
/** eval()
*
* @return int
*/
public abstract int eval();
/** toString()
*
* @return String
*/
public abstract String toString();
/** affichage PostFixe sans parenthèse des expressions
*/
public abstract String affichagePostFixe();
/** affichage PreFixe fonctionnel des expressions
*/
public abstract String affichagePreFixe();
} /* end class ExpressionConstante */
/** Entier
*
* @see Expression
* @author dazy
*/
public class Entier extends ExpressionConstante {
/** une expression Simple est une constante entière : n
*/
public int n;
//Constructeur
public Entier(int n){
this.n=n;
}
/** eval()
*
* @return int
*/
public int eval() {
return n;
}
/** toString()
*
* @return String
*/
public String toString() {
return "" + n;
}
/** affichage PostFixe d'une constante n'est pas différent de toString()
*
*/
public String affichagePostFixe() {
return "" + n + " ";
}
/** affichage PreFixe fonctionnel des expressions
*
*/
public String affichagePreFixe() {
return "" + n;
}
} /* end class Entier */
/**
*
* @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 Entier(1),
new Soustraction(
new Multiplication(
new Entier(2) ,
new Inverse(new Entier(5))) ,
new Entier(3)));
System.out.println(e.toString() + " = " + e.eval());
System.out.println(e.affichagePostFixe() + " = " + e.eval());
System.out.println(e.affichagePreFixe() + " = " + e.eval());
}
}
/* c'est tout */
|