Ver Mensaje Individual
  #33 (permalink)  
Antiguo 04/11/2008, 11:04
Casuis
 
Fecha de Ingreso: septiembre-2005
Mensajes: 142
Antigüedad: 19 años, 3 meses
Puntos: 3
Respuesta: Duda sobre teoria de clases

Básicamente es un problema de composición. Es decir, las clases no tiene carácteristicas de "parentesco" pero lógicamente la Clase coche contiene Ruedas.

Es decir está compuesta de ruedas.
La composición de objetos se utiliza para encapsular los atributos del objeto que a su vez representa un atributo en la clase que se compone. Así la clase coche puede utilizar este objeto para ampliar operaciones.

Imaginate que queremos saber el precio total de las ruedas que tiene nuestro coche.
Un objeto rueda puede tener un precio unitario, cada objeto su precio. La rueda marca michelin valdrá 10 pero la pirelli valdrá 20.
Si suponemos que un coche tiene 4 ruedas y las dos delanteras son michelin y las dos traseras pirelli como haremos para saber su precio.
Pues utilizaremos la composicion de ruedas para definir un metodo en la clase coche que calcule el coste independientemente de la Rueda.

Ahora pasamos al caso practico:

clase Rueda:
Código PHP:
class Rueda
{
    private 
$_marca;
    private 
$_model;
    private 
$_precio;
    
    public function 
__construct($marca$modelo ,$precio)
    {
        
$this->_marca  $marca;
        
$this->_modelo $modelo;
        
$this->_precio $precio;    
    }    
    
    public function 
getMarca(){
        return 
$this->_marca;
    }
    
    public function 
getModel(){
        return 
$this->_modelo;
    }
    
    public function 
getPrecio(){
        return 
$this->_precio;
    }

clase Coche:
Código PHP:
class Coche{
    
    private 
$_nombre;
    private 
$_ruedas = array();
    
    public function 
__construct($nombre){
        
$this->_nombre $nombre;
    }
    
    public function 
getNombre(){
        return 
$this->_nombre;
    }
    
    public function 
addRueda(Rueda $rueda)
    {
        if(
count($this->_ruedas)<4)
            
$this->_ruedas[] = $rueda;
    }
    
    public function 
getTotalCosteRuedas()
    {
        
$precio 0;
        foreach(
$this->_ruedas as $rueda){
            
$precio += $rueda->getPrecio(); 
        }
        return 
$precio;
    }
    
    public function 
getNumeroRuedas(){
        return 
count($this->_ruedas);
    }
    

Ahora para hacemos unas intancias para ver lo expuesto:
Código PHP:
$coche = new Coche('ford');
$coche->addRueda(new Rueda('Pirelli','p600',20));
$coche->addRueda(new Rueda('Pirelli','p600',20));
$coche->addRueda(new Rueda('Michelin','gc400',10));
$coche->addRueda(new Rueda('Michelin','gc400',10));

echo 
"El coche: "$coche->getNombre() . "<br />";

echo 
"contiene: "$coche->getNumeroRuedas() 
     . 
" ruedas con precio: " $coche->getTotalCosteRuedas(); 
La salida será la siguiente:
Código:
El coche: ford
contiene: 4 ruedas con precio: 60
Como ves podemos saber el precio del total de ruedas independientemente del tipo de rueda que use.
Espero haberte aclarado algo. Si aun te quedas con dudas exponlas estamos para ayudar