Ver Mensaje Individual
  #6 (permalink)  
Antiguo 17/09/2010, 08:21
Avatar de Italico76
Italico76
 
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 1 mes
Puntos: 292
De acuerdo Respuesta: metodo abstracto sin implementar ???

Cita:
Iniciado por GatorV Ver Mensaje
Pues si te fijas tu método abstracto se llama caculate, cuando el método que estas sobreescribiendo es calculate.

Saludos.
OHHHHHHHHHHHH! :ojote:

Que buen ojo!


PD: la clase sirve para realizar calculos de medias moviles simples y exponeciales de forma eficiente pues permite alterar el ultimo valor y no es necesario recalcular desde el principio (quien la necesite...ya sabe)

Código PHP:
<?

/*
  MEDIAS MOVILES   
  metodos: add, reset, setN, setNesimo, caculate, unDo (deshace el ultimo calculo)
*/
// superclase
abstract Class Media 
  protected 
$n;
  protected 
$arr = array();
  protected 
$arrSize;
  protected 
$calculo   =null;
  protected 
$calculoAux=null// guarda valor anterior

  
function __construct ($n){
    
$this->setN($n);
  }
  
  
// usar solo despues... de tener el arreglo "lleno" !!
  
function setNesimo ($val){   
       
$this->arr [($this->n) - 1]=$val;
  }    
  
  function 
unDo (){
       
$this->calculo       $this->calculoAux;
  }
  
  
# puede ser protected porque el usuario no la llama directamente  
  
protected function saveCalc(){ 
    
$this->calculoAux $this->calculo;
  }  
    
  function 
reset(){    
    unset (
$this->arr);
    
$this->arrSize=0;
    
$this->n=0;    
    
$this->calculoAux=null;
    
$this->calculo   =null;
  }
  
  
// agrega a $rb los elemenos de $this->arr
  
protected function add_array(array $rb){
    foreach (
$rb as $val){
      
$this->arr[] = $val;
    }    
  }
  
  function 
add($data) {
     
     if (
is_array($data)){
       
$this->add_array ($data);
     }else{
       
$this->arr[] = $data;       
     }    
    
    
$this->arrSize count ($this->arr);
  }
  
  function 
setN($n){
    
$this->$n;
  }
  
  abstract protected function 
calculate(); // debe ser abstracta igual que la clase!!!
  
// fin


Class MediaSimple extends Media {

/*
  // hace falta si el constructor es "protected" en la clase padre
  function __construct ($n){
    parent::__construct($n);
  }
*/

  
private function summ(){
    
$res=0;
    for (
$i=0;$i<$this->arrSize;$i++){
      
$res $res $this->arr[$i];
    }
    return 
$res;
  }
    
  public function 
calculate(){
    
$this->saveCalc;
    
$this->calculo = ($this->summ ($this->arr)/$this->n);
    return (
$this->calculo);  
  }
  
}


Class 
MediaExponencial extends Media {

  function 
__construct ($n){
    if (
$n==null$n=0;  
    
parent::__construct($n);
  }
  
  
/*  
  public function setEma ($ema){
    $this->calculo = $ema;
  }  
  */     
    
  
public function calculate(){
    
$this->saveCalc();
    
    
$k = (/ ( $this->1)); 
        
    if (
$this->calculo==0)
      
$this->calculo $this->arr[0]; 
    
    for (
$i=0;$i<$this->n;$i++){ 
      
$this->calculo $this->calculo + (($this->arr[$i] - $this->calculo) * $k);      
    }
    
    return (
$this->calculo);  
  }
  
}

?>
__________________
Salu2!

Última edición por Italico76; 17/09/2010 a las 08:36