Usuario:ManuelRomero/operacion
De WikiEducator
< Usuario:ManuelRomero
Revisión a fecha de 13:04 4 may 2012; ManuelRomero (Discusión | contribuciones)
Clases para operar
- Estas clases implementan las operacones aritméticas concretas
- Para nuestro caso hay dos tipos de operaciones
- OperacionesRacionales
- OperacionesReales
- Observamos que muchos métodos son comunes
- En realidad todos meos el de realizarCalculo u operar
- Por ello creamos una super clase con los métodos comunes
- Como hay un método que se llama igual pero no se implementa pues cada sub clase la implementa de una manera, este método lo creamos abstracto
- Por ese motivo la clase Operacion es abstracta
- La clase Racional se ha adaptado el constructor para nuevas situaciones
Clase Operacion
package calucladora; public abstract class Operacion { protected String operacion; protected Object operando1; protected Object operando2; protected Object resultado; protected char operador; protected int separador; public Operacion(){ operacion=""; } public Operacion(String operacion){ this.operacion=operacion; } public void setOperacion(String operacion){ this.operacion=operacion; descomponerOperacion(); } private void descomponerOperacion(){ operador = getOperador(); System.out.println("Encontrado operador "+operador); operando1=operacion.substring(0,separador); operando2=operacion.substring(separador+1); } abstract Object resultado(); private char getOperador(){ separador=operacion.indexOf('+'); char op='.'; if (separador != -1) return '+'; separador=operacion.indexOf('-'); if (separador != -1) return '-'; separador=operacion.indexOf('*'); if (separador != -1) return '*'; separador=operacion.indexOf(':'); if (separador != -1) return '/'; separador=operacion.indexOf('/'); if (separador != -1) return '/'; return op; } }
Clase OperacionReal
package calculadora; public class OperacionReal extends Operacion { public OperacionReal(String s){ super(s); } public OperacionReal(){ super(); } public Float resultado (){ System.out.println("En resultado de Operacion Real "+ operador); switch (operador){ case '+': return Float.parseFloat(operando1.toString())+Float.parseFloat(operando2.toString()); case '-': return Float.parseFloat(operando1.toString())-Float.parseFloat(operando2.toString()); case '*': return Float.parseFloat(operando1.toString())*Float.parseFloat(operando2.toString()); case '/': return Float.parseFloat(operando1.toString())/Float.parseFloat(operando2.toString()); default://Caso de error retorno 0 return (float)0; } } }
Clase OperacionRacional
package calculadora; public class OperacionRacional extends Operacion { public OperacionRacional(){ super(); } public Racional resultado (){ System.out.println("Operandoooooo!!"); Racional op1= new Racional(operando1.toString()); Racional op2=new Racional(operando2.toString()); System.out.println("En resultado de Operacion Racional con operador "+ operador); System.out.println("Operando 1"+ operando1); System.out.println("Operando 2"+ operando2); switch (operador){ case '+': return op1.sumar(op2); case '-': return op1.restar(op2); case '*': return op1.multiplicar(op2); case '/': return op1.dividir(op2); default://Caso de error retorno 0 return new Racional(1,1); } } }//fin de la clase
Clase Racional
package calculadora; public class Racional { private int num; private int den; public Racional (String s){ int separador =s.indexOf('/'); if (separador==-1){ if (s.matches("[-]?[0-9]*")) { this.num=Integer.parseInt(s); den = 1; }else System.out.println(s+" no es un racional permitido se crea 1/1."); } else{ this.num=Integer.parseInt(s.substring(0, separador)); this.den=Integer.parseInt(s.substring( separador+1)); } } public Racional(int num, int den) { super(); this.num = num; this.den = den; } public Racional() { this.num = 1; this.den = 1; } public Racional (int num){ this.num = num; this.den = 1; } public int getNum() { return num; } public void setNum(int num) { this.num = num; } public int getDen() { return den; } public void setDen(int den) { this.den = den; } @Override public String toString() { return (this.num+"/"+this.den); } public Racional sumar (Racional r){ return new Racional(this.num*r.den+this.den*r.num ,this.den*r.den); } public Racional restar (Racional r){ return new Racional(this.num*r.den-this.den*r.num ,this.den*r.den); } public Racional multiplicar (Racional r){ return new Racional(this.num*r.num ,this.den*r.den); } public Racional dividir (Racional r){ return new Racional(this.num*r.den,+this.den*r.num ); } }