Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Frameworks y PHP orientado a objetos (http://www.forosdelweb.com/f68/)
-   -   Paja mental con la herencia en PHP5 (http://www.forosdelweb.com/f68/paja-mental-con-herencia-php5-487526/)

yoguuu 05/05/2007 18:59

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 !

tozanni 06/05/2007 00:29

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).

enriqueplace 06/05/2007 08:11

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:

Me cuesta decidir cual clase heredará de que otra... .
Gruesos problemas de conceptos... el problema no es el lenguaje.

Cita:

pues en PHP 5 no podemos usar la herencia multiple
Como en el 100% de los lenguajes modernos. Y no es que "no lo tienen implementado", ya está asumido que por un tema de conceptos de diseño que la "herencia múltiple" no es conveniente para nada.

Cita:

Eso a mí por lo menos me parece algo que condiciona la logica de un programa. Como si nos quitase libertad y capacidad.
... de hacer malos diseños.


Cita:

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:
¿Y la relación de uso y dependencia entre clases? ¿Solo herencia conoces?

Busca en este mismo foro la palabra "Liskov" y verás por qué no a la herencia múltiple.

Cita:

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.
No leas libros sobre lenguajes, lee conceptos y diseño OO.

PD: y ya tuvimos esta discusión en este mismo foro sobre herencia múltiple

yoguuu 06/05/2007 17:56

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:

Una reflexión "enriqueplace":
-------------------------------------------------------------------------
Te pierde la soberbia cuando hablas, intransigente quizá en ciertas ocasiones. Y yo comprendo que mi alegre titulo o el planteamiento de mis dudas a tí te puedan parecer algo kaoticas. Pero te recuerdo... Hay mas gente en este foro que pueda tener en un momento dado una duda similar y así no ayudas mucho. Hay formas y formas de decir las cosas amigo.

Quiero decir... Que si el post te parece mal, por lo que sea... eres libre de no responder. Pero si lo haces... hazlo con amabilidad. Es algo que todos pienso, te agradeceremos, pues te he leido otras veces con esa misma actitud.

Yo leo mucho, tengo 5 gigas en ebooks ara mismo y leo por internet, tengo libros de poo y de arquitectura del software... que muchas veces ni comprendo... Pero no quiero que pienses que me pongo a postear a la ligera.

Y si hay mas gente que piensa así... dirijanse a moderadores o administradores, reporten el post o califiquenlo (opcion del foro).

yoguuu 06/05/2007 18:04

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.