Usuario:ManuelRomero/operacion

De WikiEducator
Saltar a: navegación, buscar



Clases para operar

Estas clases implementan las operacones aritméticas concretas
  • Para nuestro caso hay dos tipos de operaciones
  1. OperacionesRacionales
  2. 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 );
	}
 
 
 
 
 
 
 
	}