Ver Mensaje Individual
  #2 (permalink)  
Antiguo 26/07/2006, 20:53
Avatar de enriqueplace
enriqueplace
 
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 11 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