Foros del Web » Programando para Internet » PHP »

PHP OO Aplicando UML a mis códigos PHP con MySQL ¿?

Estas en el tema de Aplicando UML a mis códigos PHP con MySQL ¿? en el foro de PHP en Foros del Web. Compañeros, he estado leyendo varios textos sobre lo que el UML es. Algunas cosas se me han aclarado y otras todavía no. Por lo cuál ...
  #1 (permalink)  
Antiguo 14/10/2010, 14:47
 
Fecha de Ingreso: noviembre-2007
Mensajes: 35
Antigüedad: 17 años
Puntos: 0
Información Aplicando UML a mis códigos PHP con MySQL ¿?

Compañeros, he estado leyendo varios textos sobre lo que el UML es.
Algunas cosas se me han aclarado y otras todavía no. Por lo cuál pase de la teoría a la práctica y quiero compartirlo para conocer su comentarios y críticas.

La práctica es básicamente una agenda.
La redacción de la necesidad sería mas o menos así:
Un Usuario tiene una agenda y la agenda tiene contactos
Se puede ver un listado de contactos agregados a la agenda
y se pueden agregar mas contactos.

pues bien sencillo que están las clases (creo):



hasta donde llego a comprender estas serían mis clases entidad y también necesitaría una clase control llamada Operciones y otras 2 de Borde:
Reporte
AgregarContacto <-- que dejaré pendiente
Y una de persistencia que hará consultas a la BD disñeado al estilo singleton

bueno pasemos al código:
Clase Usuario
Código PHP:
Ver original
  1. class Usuario
  2. {
  3.     private $_db;
  4.     private $_nombre;
  5.     private $_id;
  6.     private $_agenda;
  7.    
  8.     public function __construct()
  9.     {
  10.         $this->_db = Persistencia::conectar();
  11.     }  
  12.     private function cargarDatos($usr)
  13.     {        
  14.          $query = "SELECT nombreUsuario, id FROM usuario "
  15.                 . "WHERE nombreUsuario = '$usr' LIMIT 1";
  16.          $rs = $this->_db->query($query);        
  17.          $data = $rs->fetch_object();        
  18.          $this->_nombre = $data->nombreUsuario;        
  19.          $this->_id= $data->id;        
  20.          $this->_sesionActiva = true;        
  21.     }            
  22.     public function asociaAgenda(Agenda $agenda)
  23.     {
  24.         $this->_agenda = $agenda;
  25.     }
  26.     public function __set($atr,$valor)
  27.     {
  28.         $this->$atr = $valor;      
  29.     }    
  30.     public function __get($atr)
  31.     {
  32.         return $this->$atr;
  33.     }
  34. }
Clase Agenda
Código PHP:
Ver original
  1. class Agenda {
  2.     private $_listaContactos = array();
  3.      
  4.     public function __construct()
  5.     {
  6.                
  7.     }    
  8.     public function agregaContacto(Contacto $contacto)
  9.     {
  10.         $this->_listaContactos[] = $contacto;
  11.     }    
  12.     public function __get($atributo) {
  13.         return  $this->$atributo;
  14.     }
  15. }

Clase Contacto
Código PHP:
Ver original
  1. class Contacto
  2. {
  3.     private $_id ;    
  4.     private $_nombre;    
  5.     private $_apellido;            
  6.     private $_telefono;
  7.            
  8.     public function __construct($id, $nombre, $apellido, $telefono) {
  9.         $this->_id = $id;        
  10.         $this->_nombre = $nombre;        
  11.         $this->_apellido = $apellido;        
  12.         $this->_telefono = $telefono;                
  13.     }    
  14.     public function __get($atributo)
  15.     {
  16.         return $this->$atributo;
  17.     }
  18.     public function __set($atributo,$valor)
  19.     {
  20.         $this->$atributo = $valor;
  21.     }
  22. }

Clase Persistencia
Código PHP:
Ver original
  1. class Persistencia extends mysqli
  2. {
  3.     private static $_instancia;
  4.        
  5.     private function __construct($servidor = SERVIDOR, $usuario = USUARIO,
  6.                                 $password = PASSWORD, $baseDatos = BD)
  7.    {      
  8.         parent::__construct($servidor, $usuario, $password, $baseDatos);  
  9.     }    
  10.     public static function conectar()
  11.     {
  12.         if (!isset(self::$_instancia)) {
  13.             $thisClass = __CLASS__;      
  14.             self::$_instancia = new $thisClass ;
  15.         }
  16.         return self::$_instancia ;
  17.     }
  18. }


Clase Operaciones
Código PHP:
Ver original
  1. class Operaciones
  2. {
  3.     private $_usuario;    
  4.     private $_db;    
  5.     public function __construct(usuario $usuario)
  6.     {
  7.         $this->_usuario = $usuario;
  8.         $this->_db = Persistencia::conectar();
  9.     }
  10.  
  11.     public function traerContactos()
  12.     {
  13.         $query = "SELECT id, FirstName, LastName, phonenumber FROM phonebook "
  14.                 ."WHERE idUsuario = ". $this->_usuario->_id;
  15.          
  16.         $rs = $this->_db->query($query);
  17.         return $rs;
  18.     }
  19.    
  20.     public function traerContacto($idContacto) {
  21.         $query = "SELECT id, FirstName, LastName, phonenumber FROM phonebook "
  22.                 ."WHERE id = $idContacto";        
  23.         $rs = $this->_db->query($query);
  24.         if (is_object($rs)) {
  25.             return $rs;
  26.         } else {
  27.             return false;
  28.         }
  29.     }    
  30.     public function muestraContactos()
  31.     {        
  32.         $html ="";
  33.         foreach ($this->_usuario->_agenda->_listaContactos as $contactos) {
  34.             $html .= "<tr class='row'>";
  35.             $html .= "<td>";
  36.             $html .= $contactos->_nombre;
  37.             $html .= "</td>";
  38.             $html .= "<td>";
  39.             $html .= $contactos->_apellido;
  40.             $html .= "</td>";
  41.             $html .= "<td>";
  42.             $html .= $contactos->_telefono;
  43.             $html .= "</td>";
  44.             $html .= "</tr>";
  45.         }
  46.         return $html;
  47.     }    
  48.     public function agregarContacto($nombre, $apellido, $telefono)
  49.     {        
  50.         $query = "INSERT INTO phonebook (FirstName, LastName, phonenumber,idUsuario) "
  51.                 ."VALUES('$nombre', '$apellido', '$telefono',{$this->_usuario->_id})";        
  52.         $this->_db->query($query);
  53.     }
  54. }

Bien ahora por último vamos a ver como se dibuja en pantalla lo que el usuario quiere ver que para este caso es un reporte de los contactos almacenados

Clase Borde
Código PHP:
Ver original
  1. $usr = $_GET["usr"];
  2.  
  3. class Reporte
  4. {
  5.     public static function main() {
  6.         $usuario = new Usuario();
  7.         $usuario->cargarDatos($usr);
  8.        
  9.         $agenda = new Agenda();
  10.         $usuario->asociaAgenda($agenda);
  11.        
  12.         $oc = new Operaciones($usuario);
  13.         $objContactos = $oc->traerContactos();
  14.        
  15.         while ($contactoRs = $objContactos->fetch_object()) {
  16.             $agenda->agregaContacto(new Contacto($contactoRs->id, $contactoRs->FirstName,
  17.                                                  $contactoRs->LastName,
  18.                                                  $contactoRs->phonenumber));
  19.         }
  20.  
  21.         require_once 'head.html';;
  22.         echo "<a href='agregarContacto.php'><img src='imagenes/user__plus.png' border=0> Agregar Contacto</a></a><br><br>";
  23.         echo "<div class='centrado'><table align='center'><tr ><th>Nombre</th>";
  24.         echo "<th>Apellido</th>";
  25.         echo "<th>Teléfono</th></tr>";
  26.         echo $oc->muestraContactos();
  27.         echo "</table></div><br>";
  28.    
  29.     }
  30. }
  31.  
  32. Reporte::main();

y para verlo en acción: http://localhost/Reporte.php?usr=7th_Sign

En este ejemplo traté de usar, la agregación y la asociación y no se si las aplique bien, también tengo duda sobre el uso de la multiplicidad así como las consultas a la BD.

A ver si alguien puede decirme que deficiencias tiene este ejemplo en cuanto a UML así como que hacer para mejorarlo.

¿o creen que ya soy un experto?

Saludos
  #2 (permalink)  
Antiguo 14/10/2010, 14:53
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Aplicando UML a mis códigos PHP con MySQL ¿?

Pues como ejemplo se ve bien, solo un detalle en tu clase Reporte lees $usr pero este lo lees al inicio de tu programa, dentro de main no lo vas a poder ver, solo que uses el operador global.

Por otro lado es buena idea que separes la logica de la vista de lo que es tu proceso, asi dejas mas limpio y delegas a cada clase su tarea.

Saludos.
  #3 (permalink)  
Antiguo 14/10/2010, 15:00
 
Fecha de Ingreso: noviembre-2007
Mensajes: 35
Antigüedad: 17 años
Puntos: 0
Respuesta: Aplicando UML a mis códigos PHP con MySQL ¿?

Si de hecho va justo debajo de la declaración del método main,

Código PHP:
Ver original
  1. class Reporte
  2. {
  3.     public static function main() {
  4.         $usr = $_GET["usr"];
  5.         $usuario = new Usuario();
  6.         $usuario->cargarDatos($usr);
  7. .
  8. .
  9. .

¿Se puede editar el post original? y es así: ¿cómo?
  #4 (permalink)  
Antiguo 14/10/2010, 15:43
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Aplicando UML a mis códigos PHP con MySQL ¿?

Usa la opción de editar para hacerlo.

Saludos.

Etiquetas: mysql, 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 23:10.