Retroceder   Foros del Web > Programación para sitios web > PHP > PHP orientado a objetos

Respuesta
 
Herramientas Desplegado
Antiguo 16-abr-2008, 11:30   #1 (permalink)
lbisaro ha deshabilitado el karma
 
Fecha de Ingreso: abril-2008
Mensajes: 2
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
lbisaro está desconectado   Responder Citando
Antiguo 16-abr-2008, 11:45   #2 (permalink)
Moderador
GatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy pronto
 
Avatar de GatorV
 
Fecha de Ingreso: mayo-2006
Ubicación: Queretaro, Mexico
Mensajes: 11.283
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.
__________________
Blog Web
GatorV está desconectado   Responder Citando
Antiguo 17-abr-2008, 09:25   #3 (permalink)
Colaborador
enriqueplace tiene algunos puntos positivos de karma
 
Avatar de enriqueplace
 
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay
Mensajes: 529
Enviar un mensaje por MSN a enriqueplace
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
{

}
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.
__________________
Saludos, Enrique Place

Blogs: Enrique Place y PHPSenior.
enriqueplace esta en línea ahora   Responder Citando
Antiguo 17-abr-2008, 12:29   #4 (permalink)
lbisaro ha deshabilitado el karma
 
Fecha de Ingreso: abril-2008
Mensajes: 2
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
lbisaro está desconectado   Responder Citando
Respuesta
No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 09:34.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93