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

Paja mental con la herencia en PHP5

Estas en el tema de Paja mental con la herencia en PHP5 en el foro de Frameworks y PHP orientado a objetos en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 05/05/2007, 18:59
 
Fecha de Ingreso: enero-2005
Mensajes: 149
Antigüedad: 19 años, 3 meses
Puntos: 2
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 !
  #2 (permalink)  
Antiguo 06/05/2007, 00:29
Avatar de tozanni  
Fecha de Ingreso: mayo-2007
Ubicación: Seattle, WA
Mensajes: 62
Antigüedad: 17 años
Puntos: 0
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).
  #3 (permalink)  
Antiguo 06/05/2007, 08:11
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
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
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #4 (permalink)  
Antiguo 06/05/2007, 17:56
 
Fecha de Ingreso: enero-2005
Mensajes: 149
Antigüedad: 19 años, 3 meses
Puntos: 2
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).
  #5 (permalink)  
Antiguo 06/05/2007, 18:04
 
Fecha de Ingreso: enero-2005
Mensajes: 149
Antigüedad: 19 años, 3 meses
Puntos: 2
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 ;)
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 14:22.