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

Codificando clases y relaciones UML

Estas en el tema de Codificando clases y relaciones UML en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola a todos, estoy con el tema de UML y la POO en PHP y haciendo unos practicas de clases me encuentro con una duda ...
  #1 (permalink)  
Antiguo 09/02/2012, 13:09
 
Fecha de Ingreso: noviembre-2007
Mensajes: 35
Antigüedad: 16 años, 5 meses
Puntos: 0
Codificando clases y relaciones UML

Hola a todos, estoy con el tema de UML y la POO en PHP
y haciendo unos practicas de clases me encuentro con una duda en una Clase Domicilio que estoy tratando de hacer

Explico con un ejemplillo

necesito registrar los datos generales de una persona
entre ellos son:
  • Persona
  • nombre
  • apellidos
  • genero

    Domicilio
  • calle y numero
  • colonia
  • codigo postal
  • ciudad
  • estado


entonces identifico facilmente estas clases:


clase Estado <-- es clase por en caso de que quiera almacenar mas que un simple nombre de estado
clase Ciudad <-- es una clase por en caso de que quiera almacenar mas que un nombre de ciudad

estas 2 clases encuentro una relación de composición
en dónde estado contiene muchas ciudades


Persona <-- datos de persona
Domicilio <-- para registrar los datos del domicilio

para estas 2 clases encuentro una relación de asociación

Hasta aquí todo iba bien hasta que comence a codificar

aquí el código PHP

Clase de Ciudad

Código PHP:
Ver original
  1. <?php
  2.  
  3.  
  4. class Ciudad
  5. {
  6.  
  7.     private $_descripcion;
  8.     private $_zona;
  9.     /** mas atributos aquí **/
  10.  
  11.     public function __consutruct()
  12.     {
  13.        //CODIGO AQUí
  14.     }
  15.    
  16.     /** mas métodos aquí */
  17. }


continuando con la clase Estado la cuál tiene la relación con Ciudad
Código PHP:
Ver original
  1. <?PHP
  2. class Estado
  3. {
  4.     private $_descripcion;
  5.     private $_numeroOficial;
  6.    
  7.     /** mas atributos aquí **/
  8.  
  9.     /** relación de composición */
  10.     private $_ciudades;
  11.  
  12.     public function __construct()
  13.     {
  14.         //CODIGO AQUí
  15.     }
  16.  
  17.     public function agregarCiudad( Ciudad $ciudad )
  18.     {
  19.         $this->_ciudades[] = $ciudad;
  20.     }
  21.  
  22.     /** mas métodos aquí */
  23. }


Clase domicilio, aquí es en dónde se me presenta mi problema
puesto que yo estaba colocando un atributo llamado estado, pues el estado contiene la ciudad pero cuando reflexiono un poco recuerdo que un estado contiene muchas ciudad, dejando la clase Domicilio con un error de diseño


el diseño deberia permitir que el domicilio de una persona tenga solamente una ciudad y un estado le doy vueltas al asunto y no se me ocurre como hacer esta relación

Código PHP:
Ver original
  1. class Domicilio
  2. {
  3.     private $_callle;
  4.     private $_numero;
  5.     private $_codigoPostal;
  6.     private $_colonia;
  7.  
  8.  
  9.     /*** relación con estado, solo que
  10.      *** habra problema prque un estado
  11.     ***  contiene muchas ciudad
  12.      **/
  13.     private $_estado;
  14.  
  15.  
  16.  
  17.     public function __consutruct()
  18.     {
  19.        //CODIGO AQUí
  20.     }
  21. }

y por último la clase Persona que se relaciona con el Domicilio
Código PHP:
Ver original
  1. class Persona
  2. {
  3.     private $_nombre;
  4.     private $_apellidos;
  5.  
  6.     /* asocación */
  7.     private $_domicilio;
  8.  
  9.     public function __consutruct()
  10.     {
  11.        //CODIGO AQUí
  12.     }
  13.  
  14.     public function agregarCiudad( Domicilio $domicilio )
  15.     {
  16.         $this->_domicilio; = $domicilio
  17.     }
  18.    
  19.     /** mas métodos aquí */
  20.  
  21. }


Creo que yo que es un ejemplo sencillo que debe tener una solución sencilla pero elegante solo que no puedo dar con ella.

Algún gurú del UML ue pueda orientarme con este caso?

de antemano gracias

Última edición por GatorV; 09/02/2012 a las 15:01
  #2 (permalink)  
Antiguo 09/02/2012, 13:30
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
Respuesta: Codificando clases y relaciones UML

Estas bien, un domicilio debe de tener un Estado y una Ciudad, ahí no hay de otra, Ciudad es una entidad por sí sola, aunque tenga un Estado, también es una Ciudad, por lo que tu clase Domicilio tiene 2 entidades más, Estado y Ciudad.

Ya dentro de la clase verificas que esa Ciudad pertenezca a ese Estado, pero como tal debes de guardar la relación a ambas entidades ya que son las que componen el objeto Domicilio.

Saludos.
  #3 (permalink)  
Antiguo 09/02/2012, 14:49
 
Fecha de Ingreso: noviembre-2007
Mensajes: 35
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Codificando clases y relaciones UML

Cita:
Iniciado por GatorV Ver Mensaje
Estas bien, un domicilio debe de tener un Estado y una Ciudad, ahí no hay de otra, Ciudad es una entidad por sí sola, aunque tenga un Estado, también es una Ciudad, por lo que tu clase Domicilio tiene 2 entidades más, Estado y Ciudad.

Ya dentro de la clase verificas que esa Ciudad pertenezca a ese Estado, pero como tal debes de guardar la relación a ambas entidades ya que son las que componen el objeto Domicilio.

Saludos.

Enterado GatorV, entonces solo dibujo un par de relaciones mas a mi diagrama y listo

quedando el código de la clase Domicilio de este modo:


Código PHP:
Ver original
  1. <?php
  2. class Domicilio
  3. {
  4. * * private $_callle;
  5. * * private $_numero;
  6. * * private $_codigoPostal;
  7. * * private $_colonia;
  8. *
  9. *   /**asociación**/
  10. * * private $_estado;
  11.  
  12.     private $_ciudad;
  13. *
  14. *
  15. *
  16. * * public function __consutruct()
  17. * * {
  18. * * * *//CODIGO AQUí
  19. * * }
  20. }


gracias por la orientación.

Saludos

Última edición por GatorV; 09/02/2012 a las 15:01
  #4 (permalink)  
Antiguo 10/02/2012, 20:49
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Codificando clases y relaciones UML

Cita:
Iniciado por GatorV Ver Mensaje
Estas bien, un domicilio debe de tener un Estado y una Ciudad, ahí no hay de otra, Ciudad es una entidad por sí sola, aunque tenga un Estado, también es una Ciudad, por lo que tu clase Domicilio tiene 2 entidades más, Estado y Ciudad.

Ya dentro de la clase verificas que esa Ciudad pertenezca a ese Estado, pero como tal debes de guardar la relación a ambas entidades ya que son las que componen el objeto Domicilio.

Saludos.
aunque no me gusta contradecir a quien tiene mucho mas experiencia creo que domicilio al tener un objeto ciudad que contiene el estado, crear una propiedad estado no estaría creando una relación de mas?? si tienes la ciudad de esta podrias obtener un estado con un getter?? la pregunta es educativa, porque estaba leyendo el diseño que se establecía y me llamo la atención un poco esto
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #5 (permalink)  
Antiguo 11/02/2012, 17:36
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
Respuesta: Codificando clases y relaciones UML

También podría ser una manera, aunque si quieres obtener solo el estado tienes que pasar por la ciudad, por eso es que también en este caso se recomienda tener las dos, aunque no esta mal, es solo por ser más práctico
  #6 (permalink)  
Antiguo 12/02/2012, 10:18
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Codificando clases y relaciones UML

Personalmente en estos casos suelo utilizar metodos proxies a las propiedades que me interesan, algo asi:
Código PHP:
Ver original
  1. public function getAddressCity()
  2. {
  3.     $this->address->getCity();
  4. }

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)

Etiquetas: clase, clases, php, poo, relaciones, uml
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 02:53.