Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Asociacion de clases

Estas en el tema de Asociacion de clases en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola a todos, Estoy buscando informacion sobre la asociacion de clases (Simple, agregacion, Composicion) y sobre herencia entre clases (Simple, Multiple, Estricta, No Estricta) pero ...
  #1 (permalink)  
Antiguo 16/04/2008, 11:30
 
Fecha de Ingreso: abril-2008
Mensajes: 4
Antigüedad: 16 años
Puntos: 0
Información Asociacion de clases

Hola a todos,

Estoy buscando informacion sobre la asociacion de clases (Simple, agregacion, Composicion) y sobre herencia entre clases (Simple, Multiple, Estricta, No Estricta) pero como se imaginaran.

No pude encontrar nada que hable como implementar esto con PHP5, salvo algunas excepciones como la herencia simple o la asociacion simple.

Mi primer pensamiento fue "Seguro que esto con PHP5 no se puede hacer...", pero quizas alguien puede ayudarme con este tema, ya que estoy intentando implementar con UML y PHP tratando de aprovechar al maximo los beneficios de hacer el analisis con UML.

Dejo un ejemplo simple que grafique de lo que quiero hacer:

Quiero armar la clase (Modelo) Auto, que asociada por agregacion con las clases: Motor, Rueda y Volante, y con el agregado de metodos y atributos propios de Auto, forman una unica clase.
Hasta ahora lo estoy implementando así:
Código PHP:
class Auto extends Model
{
    private 
$marca;//string
    
private $modelo;//string
    
.......

    private 
$ruedas//Array de punteros a objetos instanciados de la clase Rueda.
    
private $motor//Objeto instanciado de la clase Motor.
    
private $volante//Objeto instanciado de la clase Volante.

    
.....

Pero me gustaría conocer si existen distintas formas de implementar algo similar.

Cuento con que alguno me pueda ayudar a aclarar mis ideas.

Muchas gracias
  #2 (permalink)  
Antiguo 16/04/2008, 11:45
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Asociacion de clases

De la forma que lo haz planteado es la correcta, sin embargo te adelanto que en PHP no hay herencia múltiple.

Saludos.
  #3 (permalink)  
Antiguo 17/04/2008, 09:25
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
Re: Asociacion de clases

Estimado, UML es independiente del lenguaje de programación, el único requisito es que el lenguaje soporte POO y PHP5 lo hace (bueno, hasta hace poco agregaron namespaces, así que ya estamos bastante completitos ).

Sobre UML hay muchas corrientes, la actual es simplificar al máximo el uso del diagrama, casi quedándonos con las relaciones básicas, como asociaciones, agregaciones y dependencias. Es decir, muchos desarrolladores no le dan mucha importancia a la "composición" y se quedan simplemente con "agregación" (también dependerán del contexto del lenguaje, como el "stateless", ya que luego de cada ejecución indudablemente todo "muere").

La agregación ("la flecha que en su base tiene un rombo") siempre se traduce en un atributo que es de tipo Array (contenedores de "algo") y de alguna forma siempre un método de tipo "add" para agregar los objetos que serán contenidos.

Código PHP:
<?php
class Mueble
{
    private 
$cajon = array();

    public function 
addElementoGuardable $elemento )
    {
        
$this->cajon[] = $elemento;
    }
}

interface 
ElementoGuardable
{
   public function 
__toString();
}
class 
Tijera implements ElementoGuardable
{
    public function 
__toString()
    {
        return 
"soy tijera!";
    }
}

$Mueble = new Mueble();
$Mueble->add( new Tijera() );
$Mueble->add( new Tijera() );

var_dump$Mueble );

?>

// resultado 

object(Mueble)#1 (1) {
  ["cajon:private"]=>
  array(2) {
    [0]=>
    object(Tijera)#2 (0) {
    }
    [1]=>
    object(Tijera)#3 (0) {
    }
  }
}
La asociación ("flecha continua") se traduce en definir un atributo de una clase de tipo objeto de otra, y la dependencia ("flecha discontinua") se da cuando recibes por parámetro un objeto o cuando creas una instancia dentro de un método ("relación de uso", "lo usas y lo tiras", "nace con el método y muere al terminar", etc).

Pero, lo más importante de todo, aunque estos conceptos no hay casi discusión de su traducción a código, un diagrama UML siempre está sujeto a interpretación y dependerá su detalle de acuerdo al público objetivo del mismo (expertos, novatos, etc).

Espero haber aportado algo.

PD: Sugiero que busques por POO PHP5 UML, y creo que en este foro ya hemos hablado también de este tema, así que puedes buscar por UML a ver que encuentras.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com

Última edición por enriqueplace; 26/01/2009 a las 08:36
  #4 (permalink)  
Antiguo 17/04/2008, 12:29
 
Fecha de Ingreso: abril-2008
Mensajes: 4
Antigüedad: 16 años
Puntos: 0
Re: Asociacion de clases

Enrique, GatorV,

Muchas gracias a ambos, y sin duda que es un gran aporte para mi saber que voy por un camino, medianamente correcto, y que además puedo incorporar algun conocimiento.

Muchas gracias, nuevamente y saludos


Leo
  #5 (permalink)  
Antiguo 26/01/2009, 08:32
Avatar de moron  
Fecha de Ingreso: mayo-2004
Mensajes: 972
Antigüedad: 20 años
Puntos: 2
Respuesta: Asociacion de clases

Enrique, una consulta, para que está la interface en el ejemplo que das?
  #6 (permalink)  
Antiguo 26/01/2009, 08:38
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
Respuesta: Asociacion de clases

Cita:
Iniciado por moron Ver Mensaje
Enrique, una consulta, para que está la interface en el ejemplo que das?
Sorry, el tema es que con la interfaz tu defines qué métodos deberían contener las clases que sean "guardables". La idea es que agreguen ahí lo que necesiten de acuerdo al problema concreto.

Para que quede más claro agregué entonces la firma

Código PHP:
public function __toString() 


Así todas las clases deben, por lo menos, tener el método toString,
ya que así lo requiere la clase Mueble.

No sé si así queda más claro.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #7 (permalink)  
Antiguo 26/01/2009, 08:47
Avatar de moron  
Fecha de Ingreso: mayo-2004
Mensajes: 972
Antigüedad: 20 años
Puntos: 2
Respuesta: Asociacion de clases

si si, perfecto.

muchas gracias
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:20.