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

Tiene sentido? Es posible?

Estas en el tema de Tiene sentido? Es posible? en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola, estoy ampliando una aplicacion web programada en php, mediante POO. El caso es que para una de las funcionalidades que kiero hacer, mi intencion ...
  #1 (permalink)  
Antiguo 26/07/2006, 17:58
 
Fecha de Ingreso: octubre-2003
Mensajes: 40
Antigüedad: 15 años
Puntos: 0
Sonrisa Tiene sentido? Es posible?

Hola,
estoy ampliando una aplicacion web programada en php, mediante POO. El caso es que para una de las funcionalidades que kiero hacer, mi intencion es hacerla usando una clase. El problema es q esta clase no dependería de ella misma, sino que para hacer muchas de las cosas q quiero q haga, necesito usar otras clases del sistema, es decir, dentro de las funciones de la clase q quiero crear habria q usar objetos instanciados de otras clases del sistema. Esto, ¿tiene sentido?

Hasta ahora, he hecho la estructura de la clase, y el contructor, de manera q al crear un objeto de esta clase le paso como parametro un objeto de otra clase del sistema:

//esta es una clase q ya habia en el sistema
$evaluacion = new DefinicionExamen(array ( 'iddefexamen'=>$id_evaluacion,
'idtema'=> $id_tema,
'ibd' => $this->obtenerIBD(),));

//esta es la clase q estoy creando, a la q le paso por parametro un objeto
$exportar_scorm = new ScormExport ($evaluacion);
$exportar_scorm -> ejecutar();

He comprobado q funciona, pq luego puedo usar el objeto q le he pasado por parametro dentro de la clase, pero ¿tiene sentido? ¿puede dar algun problema?

Muchas gracias.

Un saludo.
  #2 (permalink)  
Antiguo 26/07/2006, 20:53
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 13 años, 4 meses
Puntos: 32
Cita:
Iniciado por Diegada
Hola,
estoy ampliando una aplicacion web programada en php, mediante POO. El caso es que para una de las funcionalidades que kiero hacer, mi intencion es hacerla usando una clase. El problema es q esta clase no dependería de ella misma, sino que para hacer muchas de las cosas q quiero q haga, necesito usar otras clases del sistema, es decir, dentro de las funciones de la clase q quiero crear habria q usar objetos instanciados de otras clases del sistema. Esto, ¿tiene sentido?
Primero, por favor escribe correctamente, nada de "k" ni "q" sueltas (no le agregues complejidad extra al asunto)

Parece un mal endémico: programadores del mundo estructurado que quieren pasar al mundo "orientado a objetos", pero sin leer siquiera un tutorial que explique los conceptos básicos.

Estimado, la POO se creó para eso, para tener "objetos" que interactúen con otros "objetos".

Date una vuelta por Wikipedia y leete toda la sección que habla sobre POO.

Cita:
Iniciado por Diegada
Hasta ahora, he hecho la estructura de la clase, y el contructor, de manera q al crear un objeto de esta clase le paso como parametro un objeto de otra clase del sistema:
Totalmente normal.

Cita:
Iniciado por Diegada
//esta es una clase q ya habia en el sistema
$evaluacion = new DefinicionExamen(array ( 'iddefexamen'=>$id_evaluacion,
'idtema'=> $id_tema, 'ibd'=>$this->obtenerIBD(),));
Una sugerencia menor: por claridad yo crearía el array antes y luego lo pasaría por parámetro... como que "auto documentas" pensando en quién viene detrás de ti y quiere entender conceptualmente que estás haciendo. Colocando un nombre adecuado, mejoras aún más la comprensión.

Por ejemplo (estoy inventado):

Código PHP:
$contexto =  array ( 
   
'iddefexamen' => $id_evaluacion,
   
'idtema'      => $id_tema,
   
'ibd'         => $this->obtenerIBD(),
);

$evaluacion = new DefinicionExamen($contexto); 
Cita:
Iniciado por Diegada
Código PHP:
//esta es la clase q estoy creando, a la q le paso por parametro un objeto    

$exportar_scorm = new ScormExport ($evaluacion); 
$exportar_scorm -> ejecutar(); 
He comprobado q funciona, pq luego puedo usar el objeto q le he pasado por parametro dentro de la clase, pero ¿tiene sentido? ¿puede dar algun problema?
Si no funcionara, no podrías programar OO.

Sería muy recomendable que leyeras también sobre UML, y como los diagramas se traducen a código, lo cual facilita enormemente entender la OO y armar de manera menos dolorosa los diseños.

Humilde introducción al UML

Por ejemplo, en UML registras con "flechas" la relación entre clases, supongamos A y B. Existen dos flechas básicas, la "punteada" y la "continua".

A -->B

La "punteada" representa una "dependencia" entre A y B. Se pueden dar los siguientes casos "auto excluyentes" (o uno, o el otro):
  • La clase A recibe por parámetro un objeto de tipo B, ó
  • La clase A crea (en algún momento) una instancia del objeto B

También se le dice que es una "relación de uso", por que A usa a B.

A -> B

La "continua" (perdona mi "arte ascii" ) representa una "asociación", lo que significa que hay una "relación estructural" entre ambas clases (que es más "fuerte" que la anterior):
  • En la clase A existe un atributo (o varios) que es del tipo B.

¿Que otra cosa dicen las flechas?
  • En ambos casos, que A conoce a B, y que B no conoce a A.
  • Que los cambios de B afectan a A, y no viceversa.
  • Que A es más inestable que B, porque A depende de B.
  • Que B es más estable que A, porque no depende de nadie, pero el hecho que dependan de él genera una "fuerza" que lo presionará a no cambiar

A veces creo que no se puede aprender a programar OO sin aprender antes a usar UML, y de la mano, los conceptos (los humanos entendemos mejor con imágenes).
__________________
Blog phpsenior.com Cursos a Distancia surforce.com

Última edición por enriqueplace; 26/07/2006 a las 21:03
  #3 (permalink)  
Antiguo 27/07/2006, 08:35
 
Fecha de Ingreso: octubre-2003
Mensajes: 40
Antigüedad: 15 años
Puntos: 0
Gracias por contestar enrique.

Lo siento por los de las q y las k, malas costumbres que se adoptan por los SMS. No es la primera vez que trabajaba con programacion orientada a objetos, de hecho en la carrera que espero acabar este año, hemos tenidos varias practicas dedicadas a este tema, aunque fue hace muchos años. Lo que si recordaba es que insistían en que la principal caracteristica de la clase debía ser la encapsulación y la independencia con respecto al exterior (para que fuera reusable y demás), y recuerdo que dentro de los metodos de una clase, nunca usabamos instancias de otras clases (y menos pasar por parametro en el constructor instancias de otras clases), por eso me asalto la duda, pero gracias por aclararmelo.

PD: Por cierto, no tengo ni idea de UML, a pesar de que se que va muy ligado a la POO.
  #4 (permalink)  
Antiguo 27/07/2006, 23:10
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 13 años, 4 meses
Puntos: 32
Cita:
Iniciado por Diegada
Gracias por contestar enrique.
Lo siento por los de las q y las k, malas costumbres que se adoptan por los SMS. No
A pesar que como informático soy "qwerty dependiente" y un teclado en un móvil es diminuto, escribo de todas formas los SMS hasta con tildes

Cita:
Iniciado por Diegada
es la primera vez que trabajaba con programacion orientada a objetos, de hecho en la carrera que espero acabar este año, hemos tenidos varias practicas dedicadas a este tema, aunque fue hace muchos años. Lo que si recordaba es que insistían en que la
Bueno, es un buen momento para hacer un repaso.


Cita:
Iniciado por Diegada
principal caracteristica de la clase debía ser la encapsulación y la independencia con respecto al exterior (para que fuera reusable y demás), y recuerdo que dentro de los metodos de una clase, nunca usabamos instancias de otras clases (y menos pasar por parametro en el constructor instancias de otras clases), por eso me asalto la duda, pero gracias por aclararmelo.
Tu memoria debe estar fallando, porque si te enseñaron así, fue un disparate.

Te digo más, en 1996 (más o menos) estuve en uno de los primeros seminarios que se dieron en mi país, donde trataban de convencer a los programadores actuales de las bondades de la OOP... y te aseguro que los conceptos base vertidos en esa época eran iguales a los de ahora.

Cita:
Iniciado por Diegada
PD: Por cierto, no tengo ni idea de UML, a pesar de que se que va muy ligado a la POO.
Yo te diría que es indispensable, y que te ayudará mucho para comprender los diseños OO.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #5 (permalink)  
Antiguo 28/07/2006, 00:32
 
Fecha de Ingreso: octubre-2003
Mensajes: 40
Antigüedad: 15 años
Puntos: 0
Pues no se si me lo enseñarían mal o no, pero lo cierto es que me lo contaron asi, y usamos C++ para hacer las practicas relacionadas con POO. Lo que está claro es que en php funciona, y me viene muy bien usarlo de esta forma.

Por cierto, sabes que sentido tiene que en el constructor de la clase que te he comentado antes (
$evaluacion = new DefinicionExamen(array ( 'iddefexamen'=>$id_evaluacion,
'idtema'=> $id_tema, 'ibd'=>$this->obtenerIBD(),));), el contructor como imaginaras tiene una pinta asi:

function DefinicionExamen ($param) {

$this->establecerIBD($param['ibd']);
.......

¿por qué pasa los parametros como un array? ¿es mas efectivo que pasarlos por parametro uno a uno?

Es que como veras soy un poco nuevo en php. Lo que mas me ha impactado es que casi toda la gente escribe código en un editor de texto a pelo, y claro no se puede compilar ni nada por el estilo para ver errores que es a lo que yo estaba acostumbrado en C y en Java. Yo estoy escribiendo el codigo en Quanta, bajo linux. ¿Me recomiendas alguna otra forma para programar en php, tu que tienes mas experiencia?

Un saludo y gracias por ayudarme.
  #6 (permalink)  
Antiguo 28/07/2006, 04:24
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 13 años, 4 meses
Puntos: 32
Cita:
Iniciado por Diegada
Pues no se si me lo enseñarían mal o no, pero lo cierto es que me lo contaron asi, y usamos C++ para hacer las practicas relacionadas con POO. Lo que está claro es que en php funciona, y me viene muy bien usarlo de esta forma.
Como te decía, si hace muchos años que estos conceptos se manejan igual, no habiéndose inventado recientemente, y que son parte "base" de la "flexibilidad" de la POO... quedate tranquilo, conceptualmente te enseñaron "cualquier cosa" (o, como te dije, tu memoria es muy mala ).

Cita:
Iniciado por Diegada
¿por qué pasa los parametros como un array? ¿es mas efectivo que pasarlos por parametro uno a uno?
Ideal es usar siempre un "objeto parámetro", o un "array" para pasar los parámetros.

Por ejemplo, si tu tienes que pasar un "objeto" por parámetros y lo haces con sus valores:

Código PHP:
$this->agregarUsuario("enriqueplace""casado""Uruguay"); 
Y luego internamente haces un:

Código PHP:
function agregarUsuario($nombre$estado_civil$pais){
   
$this->usuarioSistema = new Usuario($nombre$estado_civil$pais);

Es casi lo mismo crear el objeto "afuera":

Código PHP:
$this->agregarUsuario(new Usuario("enriqueplace""casado""Uruguay"));

function 
agregarUsuario($usuario){
   
$this->usuarioSistema $usuario;

Pero en el primero se encuentra el siguiente problema: si necesitas ampliar la información del usuario, agregando más atributos, deberás modificar el constructor de la clase Usuario, y en *todos los métodos que pasas los valores para crearlo*, tanto en la clase que los recibe, como en todos los lugares que solo necesitan pasarlos.

En resumen, cada vez que debas modificar los parámetros, deberás hacer cambios en cadena.

Si tu "escondes" los parámetros a través de un array, o de un "objeto parámetro", este problema se reduce.

Nota: Conceptualmente, si tu haces un "new Usuario" para pasarlo por parámetros es lo mismo que crearlo antes y pasarlo luego (en ambos casos pasas un objeto Usuario).

Cita:
Iniciado por Diegada
Es que como veras soy un poco nuevo en php. Lo que mas me ha impactado es que casi toda la gente escribe código en un editor de texto a pelo, y claro no se puede compilar ni nada por el estilo para ver errores que es a lo que yo estaba acostumbrado en C y en Java. Yo estoy escribiendo el codigo en Quanta, bajo linux. ¿Me recomiendas alguna otra forma para programar en php, tu que tienes mas experiencia?
Yo uso GNU/Linux para todo, y además Quanta, pero no edito en modo texto, no soy tan masoquista. Más cuando trabajas con objetos; siempre es bueno crear uno y que el IDE te muestre la lista de métodos disponibles (como sucede en cualquier entorno de desarrollo decente para cualquier otro lenguaje OO).

¿De lo contrario, como haces para trabajar con gran cantidad de objetos y muchos de ellos, desarrollados por otras personas?

Prueba el Eclipse con soporte para PHP. La mejor opción es bajarte la distribución preparada para tu entorno desde Easyeclipse, que son aproximadamente 100 megas.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #7 (permalink)  
Antiguo 01/08/2006, 18:21
 
Fecha de Ingreso: octubre-2003
Mensajes: 40
Antigüedad: 15 años
Puntos: 0
Gracias por la aclaración de el tema del array.

Yo seguiré usando Quanta, pero no uso las miles de opciones que tiene (Crear proyectos, ...), solo abro los ficheros en las pestañas, y los voy modificando. Como colorea el codigo según el tipo de codigo que sea, se hace más ameno. Intentaré bajar algun manual para sacarle más rendimiento al programa. A ver si voy entendiendo todas las cosas, y soy capaz de llevar un ritmo constante, sin atascarme.

Por cierto, hay una parte en todos los módulos de la aplicación, que no se realmente que sentido tienen. Sé que es la documentación interna de cada uno de los metodos de las clases, pero tiene un formato con etiquetas, que no se para que sirve. Supongo que será algo relacionado con XML o Javadoc o algo asi, pero no lo tengo claro. A ver si te suena, te voy a poner un trozo.


<Metodo nombre = generarPedirClave>
<Descripcion>
Genera html para pedir la clave de la evaluacin
</Descripcion>
<Entra>
<Item nombre=tema tipo=objeto >
<Descripcion>
objeto tema
</Descripcion>
</Item>
<Item nombre=evaluacion tipo=objeto >
<Descripcion>
objeto evaluacion
</Descripcion>
</Item>
</Entra>
<Devuelve>
<Item nombre=return tipo=cadena de caracteres>
<Descripcion>
Html para pedir la clave
</Descripcion>
</Item>
</Devuelve>
</metodo>

A lo mejor es algo propio de algun IDE que usaron para programar la aplicacion, y hace falta pasarle algun parser o algo asi para que genere la documentación automaticamente.
¿Que opinas?

(PD:cambiando de tema, ¿sabes si es posible hacer trazas en php con Quanta u otro IDE?)

Última edición por Diegada; 01/08/2006 a las 22:44
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:34.