Retroceder   Foros del Web > Programación para sitios web > PHP > PHP orientado a objetos

Respuesta
 
Herramientas Desplegado
Antiguo 05-may-2007, 18:59   #1 (permalink)
yoguuu ha deshabilitado el karma
 
Fecha de Ingreso: enero-2005
Mensajes: 104
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 !
yoguuu está desconectado   Responder Citando
Antiguo 06-may-2007, 00:29   #2 (permalink)
tozanni no se puede cailificar en este momento
 
Avatar de tozanni
 
Fecha de Ingreso: mayo-2007
Ubicación: Seattle, WA
Mensajes: 62
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).
tozanni está desconectado   Responder Citando
Antiguo 06-may-2007, 08:11   #3 (permalink)
Colaborador
enriqueplace tiene algunos puntos positivos de karma
 
Avatar de enriqueplace
 
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 752
Enviar un mensaje por Skype™ a enriqueplace
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
__________________
Saludos, Enrique Place

Reserva tu lugar, no te lo pierdas:
Nuevo Taller a Distancia de POO para PHP (2008)
enriqueplace está desconectado   Responder Citando
Antiguo 06-may-2007, 17:56   #4 (permalink)
yoguuu ha deshabilitado el karma
 
Fecha de Ingreso: enero-2005
Mensajes: 104
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 está desconectado   Responder Citando
Antiguo 06-may-2007, 18:04   #5 (permalink)
yoguuu ha deshabilitado el karma
 
Fecha de Ingreso: enero-2005
Mensajes: 104
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 ;)
yoguuu está desconectado   Responder Citando
Respuesta

No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 11:09.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93