![]() |
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. |
Cita:
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:
Cita:
Por ejemplo (estoy inventado): Código PHP: Cita:
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):
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):
¿Que otra cosa dicen las flechas?
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). |
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. |
Cita:
Cita:
Cita:
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:
|
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. |
Cita:
Cita:
Por ejemplo, si tu tienes que pasar un "objeto" por parámetros y lo haces con sus valores: Código PHP: Código PHP: Código PHP: 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:
¿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. |
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?) |
| La zona horaria es GMT -6. Ahora son las 08:52. |
Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.