Código PHP:
<?
/*
MEDIAS MOVILES
metodos: add, reset, setN, setNesimo, caculate, unDo (deshace el ultimo calculo)
*/
// superclase
abstract Class Media {
protected $n=5;
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 = $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);
}
}
?>