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

Duda conceptual.. o basica!

Estas en el tema de Duda conceptual.. o basica! en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola, como desde hace un tiempo sigo intentando mejorar en esto de POO y me ha surgido una duda. Por ejemplo, tengo una clase para ...
  #1 (permalink)  
Antiguo 14/08/2006, 20:39
 
Fecha de Ingreso: julio-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.304
Antigüedad: 18 años, 9 meses
Puntos: 6
Duda conceptual.. o basica!

Hola, como desde hace un tiempo sigo intentando mejorar en esto de POO y me ha surgido una duda.

Por ejemplo, tengo una clase para la conexion a bases de datos "bd" y otra clase "alumnos" que lo que hace es, utilizando la clase "bd", agregar, buscar, modificar y eliminar alumnos de una de mis tablas.

Mi duda es, donde es mejor o donde es correcto crear la instancia de "bd"?

La creo fuera y se la paso por parametro a la clase alumnos?
La creo dentro de la clase alumnos?
Extiendo la clase "bd" como alumnos?



Gracias!
__________________
Federico.

Mi página: www.jourmoly.com.ar
  #2 (permalink)  
Antiguo 14/08/2006, 20:57
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Hola, pues lo mejor seria que la isntancia de tu clase db fuera un parametro (privado) de tu clase Alumno y que los metodos de alumno realizen las consultas via DB.
  #3 (permalink)  
Antiguo 14/08/2006, 21:32
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 20 años, 5 meses
Puntos: 8
yo "creo" que lo mejor es utilizar el patron de diseño Register, corriganme si me equivoco,
  #4 (permalink)  
Antiguo 15/08/2006, 08:09
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
El patron Register es muy util, pero para eso, para registrar varios objetos, y tenerlos disponibles en un "lugar" pero contenidos.

En el caso de nuestro compañero, el lo que quiere saber es donde iniciar o crear su objeto DB para poder realizar sus consultas, la respuesta es simple:

En el constructor y almacenado en una variable privada de la clase (y si puedes implementar Singleton para evitar muchas instancias de la clase mejor)
  #5 (permalink)  
Antiguo 15/08/2006, 16:20
 
Fecha de Ingreso: julio-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.304
Antigüedad: 18 años, 9 meses
Puntos: 6
Gracias a los dos

Quiza lo del Singleton en mi caso particular quedaria un poco de mas ya que la instancia de "alumnos" solo se crea una sola vez en cada pagina, pero lo tendre en cuenta. Gracias.

Por lado me cuesta un poco darme cuenta por que es correcta la solucion que me diste GatorV, es decir, no se por que las otras estan mal o mejor dicho por que es mas correcta la que tu me diste. Si me pueden dar un pequeño ejemplo, link o lo que sea para que entienda un poco mejor este temita lo agradecere mucho!!

Y sino bueno, muchas gracias ya por la ayuda que me dieron!

Saludos compis!
__________________
Federico.

Mi página: www.jourmoly.com.ar
  #6 (permalink)  
Antiguo 15/08/2006, 16:27
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
No es que sea o no correcta, pero es mas sencillo de utilizar si la tienes por decir asi:
Código PHP:
class ejemplo {
     private 
$db;
     public function 
__construct() {
           
$this->db = new Conexion();
     }

     public function 
haceralgo$parametro ) {
          
$this->db->Query"SELECT * FROM $parametro" );

          return 
$this->db->Result();
     }
}

// Usar la clase
$ej = new ejemplo();
$ej->haceralgo("tabla");

// la otra forma:
class ejemplo2 {
     public function 
__construct() {

     }

     public function 
haceralgo$parametro$db ) {
           
$db->Query"SELECT * FROM $parametro" );

           return 
$db->Result();
     }
}

$ej2 = new ejemplo2();
$db = new Conexion();
$ej2->haceralgo"tabla"$db ); 
Como te daras cuenta de la segunda forma, es mas codigo el que tienes que teclear, aunque sirve para lo mismo

  #7 (permalink)  
Antiguo 15/08/2006, 17:33
 
Fecha de Ingreso: julio-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.304
Antigüedad: 18 años, 9 meses
Puntos: 6
Buenisimo!!, era lo que necesitaba leer para aclararme. Muchas gracias GatorV
__________________
Federico.

Mi página: www.jourmoly.com.ar
  #8 (permalink)  
Antiguo 16/08/2006, 21:01
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 11 meses
Puntos: 32
Como complemento: piensa en la "encapsulación" y en ocultar la complejidad del objeto, tal que los "usuarios" del mismo desconozcan su funcionamiento interno (no solicites cosas de "afuera" si lo puedes resolver internamente de forma independiente al exterior).

Ahí logras "desacoplar" el código, lo que hará que sea más fácil de reutilizar, disminuyendo el costo de mantenimiento (algo no menor, si tenemos en cuenta que le dedicamos más del 60% del tiempo a esa tarea).

Aunque lo hayan leido la primera vez, y luego piensen que no les va a servir de nada, y lo terminen olvidando, los "conceptos base" hay que tenerlos claros *siempre* (esto ayuda a hacer buenos diseños).

Una cosa es hacer "Programación OO" y otra, "Diseño OO".
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
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:15.