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