![]() |
Paja mental con la herencia en PHP5 Vamos a ver, tengo un problema con la herencia. Me cuesta decidir cual clase heredará de que otra... pues en PHP 5 no podemos usar la herencia multiple. Eso a mí por lo menos me parece algo que condiciona la logica de un programa. Como si nos quitase libertad y capacidad. Es decir, si nosotros definimos lo siguiente... class Config class DB_Abstraction extends Config Que pasaría si necesitasemos que la clase "DB_Abstraction" heredase de alguna clase más ? Esto no sería posible, puesto que como ya he dicho no hay herencia multiple... Como mucho podriamos hacer esto: Class Config Class DB_Abstraction extends Config Class Algo_Mas extends DB_Abstraction Usando la clase "Algo_Mas" podríamos usar pues los miembros (atributos, metodos, constantes de clase...) de las tres clases. . . Hasta aki bien... pero que pasaría si mas tarde necesitasemos que DB_Abstraction utilizase miembros de alguna otra clase... por herencia... Entonces no podriamos... por que esta ya está heredando de otra... Estaríamos entonces ante un problema de lógica ?... es decir, deberiamos haber distribuido mejor al crear las clases para ke esto no suceda ? Que opinais de este caso que he expuesto ? Algo que estaría bien para los novatos (de cabeza cuadrada) como yo, sería que comentaseis que como entendeis vosotros el hacer esto mismo de la herencia. Es un tema con el que siempre me rayo :S Ojalá me ayuden un poco... voy a leer algo mas sobre herencia... a ver si consigo solventar dudas. Gracias de antemano ! |
Re: Paja mental con la herencia en PHP5 Estimado Yoguuu La herencia multiple es una caracteristica que se agrego al C++ pero practicamente todos los lenguajes modernos han ido eliminando (PHP, Java, C#, Ruby etc.). Incluso la version "managed" de C++ de .NET ya no la soporta. A grandes rasgos, la postura de la "comunidad" es que la HM causa mas problemas de los que resuelve. Tal vez el mas famoso es el de "colisiones de nombres". Ejemplo: Si tienes la clase Hijo extends Padre, Madre, y tanto padre como madre tienen un metodo llamado "trabajar", ¿Cual esperas que se use? Normalmente la forma de hacer el diseño es heredar cuando la clase hija es una especializacion de la clase padre. Ejemplo, si la clase padre es DatabaseDriver, los hijos pueden ser MySQLDriver, OracleDriver etc. (Por cierto, si quieres ahorrar tiempo hay librerias que hacen esto). La clase Config no deberia formar parte de la jerarquia y posiblemente la otra tampoco. Cuando requieres el polimorfismo, lo que si puedes hacer es implementar multiples interfaces (el problema de los nombres ya no se da en este caso). Te recomiendo que veas la libreria AdoDB o PearDB, para que veas como se han hecho los diseños de ese tipo de sistemas, incluso tal vez te gusten para usar en tu proyecto. Tambien te puede interesar el Creole, que es mas moderno y esta basado en la filosofia de ORM (mapeo objeto relacional). |
Re: Paja mental con la herencia en PHP5 Ya con tu título desubicado y nada técnico se le debe a la mayoría quitar las ganas de contestarte. No te olvides que lo valiente no quita lo cortés. Cita:
Cita:
Cita:
Cita:
Busca en este mismo foro la palabra "Liskov" y verás por qué no a la herencia múltiple. Cita:
PD: y ya tuvimos esta discusión en este mismo foro sobre herencia múltiple |
Re: Paja mental con la herencia en PHP5 Enriqueplace, siempre tengo tus posts y respuestas junto con las de GatorV y otros pocos en muy buena cuenta... Por que os he leido mucho y sé lo que hay. Te agradezco la apreciación sobre la herencia multiple inexistente o deprecada en la programación hoy día. También la referencia a liskov y el link al hilo de la herencia, que cuando tenga un rato le dedicaré lo debido. Cita:
|
Re: Paja mental con la herencia en PHP5 Por cierto tozanni, gracias por responder... desconocia lo de que la herencia multiple está obsoleta... Si conocía que php 5 no la soporta. mi pregunta era unicamente sobre herencia simple. No me gusta usar PEAR por que prefiero hacer y practicar yo... bajo mi punto de vista PEAR es util para gente que ya sabe... pero no para noobs como yo. Aunque no descarto nunca el usarlo. Creole :) es algo que te agradezco que me conectes por ke paralelamente a esto tambien estoy interesado en el ORM :D lo cual me viene de perlas para enterarme un poco ;) Lo dicho gracias a los dos. Pero amablemente ;) |
| La zona horaria es GMT -6. Ahora son las 23:25. |
Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.