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

herencia multiple en php5

Estas en el tema de herencia multiple en php5 en el foro de Frameworks y PHP orientado a objetos en Foros del Web. ¿Alguien conoce algun "truco" para usar la herencia multiple en php5? Gracias de antemano paloclanweb...

  #1 (permalink)  
Antiguo 11/04/2006, 09:37
 
Fecha de Ingreso: marzo-2005
Mensajes: 116
Antigüedad: 19 años
Puntos: 1
herencia multiple en php5

¿Alguien conoce algun "truco" para usar la herencia multiple en php5?
Gracias de antemano
paloclanweb
  #2 (permalink)  
Antiguo 11/04/2006, 20:56
Avatar de Cbas  
Fecha de Ingreso: enero-2002
Ubicación: capital federal
Mensajes: 437
Antigüedad: 22 años, 3 meses
Puntos: 2
No soy el gurú de objetos, pero Java, hace más de 10 años que trabaja con objetos y no acepta herencia múltiple. Por algo será no?

Una pregunta... PHP5, no podés hacer una interface como en java?, es una forma que se me ocurre.

SALUDOS!
__________________
La Perfección es enemigo de lo bueno.
  #3 (permalink)  
Antiguo 12/04/2006, 07:10
Avatar de moron  
Fecha de Ingreso: mayo-2004
Mensajes: 972
Antigüedad: 19 años, 11 meses
Puntos: 2
a ver si te sirve esto:
http://www.desarrolloweb.com/articulos/2197.php

saludos
  #4 (permalink)  
Antiguo 12/04/2006, 07:49
Avatar de vevni  
Fecha de Ingreso: julio-2005
Ubicación: cancun mexico
Mensajes: 598
Antigüedad: 18 años, 8 meses
Puntos: 3
si, php sigue casi la misma filosofia de JAVA, asi k si sabeis JAVA, pos podes hacer lo mismo, usa una interface.......
__________________
Código PHP:
echo"hola mundo ver 1221332143.02";
echo
"cuantos usuarios habran impreso hola mundo en el mundo.!???"
  #5 (permalink)  
Antiguo 12/04/2006, 07:53
Avatar de SiR.CARAJ0DIDA  
Fecha de Ingreso: junio-2004
Ubicación: Acá
Mensajes: 1.166
Antigüedad: 19 años, 9 meses
Puntos: 4
quien dijo que java no acepta herencia multiple?? es una broma?
__________________
Internet Explorer SuckS
Download FireFox
  #6 (permalink)  
Antiguo 12/04/2006, 07:55
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 19 años, 1 mes
Puntos: 33
Exclamación

echale un ojo a este link http://www.desarrolloweb.com/articulos/2026.php
  #7 (permalink)  
Antiguo 13/04/2006, 06:22
 
Fecha de Ingreso: marzo-2005
Mensajes: 116
Antigüedad: 19 años
Puntos: 1
Gracias a todos...realmente php 5 no permite herencia multiple ...la solucion es utilizar interfaces
Saludos
  #8 (permalink)  
Antiguo 13/04/2006, 08:15
 
Fecha de Ingreso: diciembre-2004
Mensajes: 128
Antigüedad: 19 años, 4 meses
Puntos: 1
SiR. Carajodida: Java no utiliza herencia multiple (fijate en cualquier manual, tutorial, etc). Lo que se utiliza es Interfaces. Igual PHP5.
  #9 (permalink)  
Antiguo 13/04/2006, 17:47
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por Cbas
No soy el gurú de objetos, pero Java, hace más de 10 años que trabaja con objetos y no acepta herencia múltiple. Por algo será no?
Ja, me encantan ésas indirectas.

...pero C++, hace más de 15 años que trabaja con objetos y sí acepta herencia múltiple. ¿Por algo será no?

Y ya no te digo lenguajes más antiguos...

Qué manía estos de Java, de decir que si algo existe es que es usado.

Si no quieres herencia múltiple, no la uses. Pero mejor tenerla que no poder usarla, ¿verdad?

paloclanweb, ánimo con tu uso de la herencia múltiple, si es que encuentras la manera de hacerlo funcionar (aunque lo dudo).
  #10 (permalink)  
Antiguo 13/04/2006, 17:50
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por matigro
SiR. Carajodida: Java no utiliza herencia multiple (fijate en cualquier manual, tutorial, etc). Lo que se utiliza es Interfaces. Igual PHP5.
Las interfaces, a mi parecer, no aportan la misma funcionalidad que la herencia múltiple, son conceptos distintos.

Por ejemplo, C++ tiene interfaces (clases abstractas puras que se llaman en realidad) y herencia múltiple y se usan para cosas diferentes.
  #11 (permalink)  
Antiguo 13/04/2006, 20:48
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 10 meses
Puntos: 32
Por lo que he visto en varios lenguajes, la discusión legítima no es "si se puede hacer o no". En muchos casos no se implementa (como en Java, PHP, etc) porque usarla es un posible camino al desastre.

Verdaderamente no es problema técnico, o de evolución, es un problema de criterios de diseño "OO".

De todas formas siempre hay una puerta trasera: hacer "herencia múltiple" a través de interfaces; pero el sentido es distinto a hacerlo con clases. Las herencias de clases definen el "que son" y las interfaces agrupan clases que definen el "que hacen".

Y finalmente, las interfaces permiten pasar del estilo de diseño "orientado a la implementación" a uno "orientado a la interfaz", donde todas las clases acceden a servicios a través de interfaces que son implementadas por clases concretas. Y al no depender de clases concretas (solo de entidades abstractas) nuestro diseño será más reutilizable que el anterior.

Al final de cuentas, todo es una discusión de diseño OO
__________________
Blog phpsenior.com Cursos a Distancia surforce.com

Última edición por enriqueplace; 03/11/2006 a las 21:54
  #12 (permalink)  
Antiguo 13/04/2006, 21:20
Avatar de Cbas  
Fecha de Ingreso: enero-2002
Ubicación: capital federal
Mensajes: 437
Antigüedad: 22 años, 3 meses
Puntos: 2
Me parece que se está transformando en una discusión filosófica y lo importante sería PHP5 no implementa herencia multiple.
Porque sino vamos a terminar hablando de SmallTalk :)

SALUDOS.

PD: MaxExtreme, my buena respuesta, más allá que estabas ironizando también con mi mensaje.

PD2: Dejo otra reflexión, los desarrollos en JAVA, no funcionan tan bien en Windows, por algo será no? jejejeje
__________________
La Perfección es enemigo de lo bueno.
  #13 (permalink)  
Antiguo 13/04/2006, 21:20
Avatar de TolaWare
Colaborador
 
Fecha de Ingreso: julio-2005
Mensajes: 4.352
Antigüedad: 18 años, 9 meses
Puntos: 24
Cita:
Iniciado por Cbas
No soy el gurú de objetos, pero Java, hace más de 10 años que trabaja con objetos y no acepta herencia múltiple. Por algo será no?

Una pregunta... PHP5, no podés hacer una interface como en java?, es una forma que se me ocurre.

SALUDOS!
C++ existe hace 20 años y logró implementar la herencia múltiple de una manera eficaz.

Java no lo hace pora poder simplificar un poco el modelo de objetos que tiene. Y en realidad Java implementa una pseudo herencia múltiple, con Interfaces.

Saludos
__________________
http://blog.tolaware.com.ar -> Blog de Java, Ruby y Linux
  #14 (permalink)  
Antiguo 15/04/2006, 08:36
Avatar de SiR.CARAJ0DIDA  
Fecha de Ingreso: junio-2004
Ubicación: Acá
Mensajes: 1.166
Antigüedad: 19 años, 9 meses
Puntos: 4
perdon pero no entiendo, en java nose puede hacer esto?

Código:
public class A {

}
public class B extends A {

}
public class C extends B {

}
public class D extends C {

}
lo veo en todos lados, acaso eso no es herencia multiple??
__________________
Internet Explorer SuckS
Download FireFox
  #15 (permalink)  
Antiguo 15/04/2006, 11:12
Avatar de TolaWare
Colaborador
 
Fecha de Ingreso: julio-2005
Mensajes: 4.352
Antigüedad: 18 años, 9 meses
Puntos: 24
no, eso es un arbol de herencia. Para que fuese herencia multiple deberia ser algo asi:

public class A {//...}
public class B {//...}
public class C {//...}
public class D {//...}
public class E extends A,B,C,D{//..}

Java esto no lo permite.
__________________
http://blog.tolaware.com.ar -> Blog de Java, Ruby y Linux
  #16 (permalink)  
Antiguo 15/04/2006, 11:22
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por TolaWare
C++ existe hace 20 años y logró implementar la herencia múltiple de una manera eficaz.

Java no lo hace pora poder simplificar un poco el modelo de objetos que tiene. Y en realidad Java implementa una pseudo herencia múltiple, con Interfaces.
Bueno, su predecesor es de 1983, hace 23 años, pero no tenía prácticamente nada como tiene ahora.

El comité C++ salió allá por el 1990, y se empezó a implementar después.

Pero el primer estándar verdadero ISO salió en 1998. Luego otro en 2003, y por último saldrá otro en el 2010.

Java no lo hace porque no lo han visto esencial, por ahora, pero puede que lo añadan en un futuro. Java no para de cambiar. Lo cual no quiere decir que no deban implementar la herencia múltiple, que es MUY útil.
  #17 (permalink)  
Antiguo 15/04/2006, 11:29
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por enriqueplace
Por lo que he visto en varios lenguajes, la discusión legítima no es "si se puede hacer o no". En muchos casos no se implementa (como en Java, PHP, etc) porque usarla es un posible camino al desastre.

Verdaderamente no es problema técnico, o de evolución, es un problema de criterios de diseño "OO".

De todas formas siempre hay una puerta trasera: hacer "herencia múltiple" a través de interfases; pero el sentido es distinto a hacerlo con clases. Las herencias de clases definen el "que son" y las interfases agrupan clases que definen el "que hacen".

Y finalmente, las interfases permiten pasar del estilo de diseño "orientado a la implementación" a uno "orientado a la interfaz", donde todas las clases acceden a servicios a través de interfases que son implementadas por clases concretas. Y al no depender de clases concretas (solo de entidades abstractas) nuestro diseño será más reutilizable que el anterior.

Al final de cuentas, todo es una discusión de diseño OO
El primer argumento que has usado es el que más odio xD: "Como es complicado, no lo soporta el lenguaje". Si es complicado, o no te atreves con ello, no lo uses.

Pero tampoco conduzcas, no sea que te estrelles, o no salgas a la calle, que hay bacterias. ;) Las cosas como son: Es mejor tener que no tener, que sobre, que no que falte. Al menos, es mi punto de vista.

Como Java soporte algún día la herencia múltiple, voy a reirme mucho xD Yo no suelo usar herencia múltiple, pero QUIERO que esté abierta la posibilidad.

La excusa de "no está porque es un desastre" no es válida. Si existe la herencia múltiple es porque hubo gente que la vió útil.

Por otro lado, C++ soporta "interfaces", que no son más que clases abstractas puras en realidad, así que existen las dos opciones.

En C también puedes implementar interfaces. No son más que listas enlazadas que contienen estructuras que indiquen la dirección de memoria de cada función, los parámetros y el tipo de retorno (por poner un ejemplo). Se usa bastante cuando se trabaja con DLLs y plugins. Es código sucio, pero como en Java, no es más que "trucar" el asunto :P
  #18 (permalink)  
Antiguo 15/04/2006, 11:35
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por SiR.CARAJ0DIDA
perdon pero no entiendo, en java nose puede hacer esto?

lo veo en todos lados, acaso eso no es herencia multiple??
No, eso son varias herencias simples, como bien dice Tolaware.

En C++ se implemente así:

Código:
class ClientSide;
class Destructible;
class Model3D;

class SillaDecorativa : public ClientSide, private Destructible, private Model3D;
Eso podría significar, en un videojuego multijugador, que hemos definido un objeto llamado "Silla", que tiene asociado un modelo 3D, que es destructible, y que se calcula en el lado del cliente (porque es decorativa y no afecta a la jugabilidad así que el servidor no tiene que manejarla).

Es una forma de programación muy útil si se sabe controlar. Si no sabes bien las reglas de la herencia múltiple (mucho más complejas que la de la simple, debido a la cantidad de "peros" y "qué-pasa-sí", constructores, destructores, ...) es un CAOS.
  #19 (permalink)  
Antiguo 15/04/2006, 11:41
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por Cbas
Me parece que se está transformando en una discusión filosófica y lo importante sería PHP5 no implementa herencia multiple.
Porque sino vamos a terminar hablando de SmallTalk :)

SALUDOS.

PD: MaxExtreme, my buena respuesta, más allá que estabas ironizando también con mi mensaje.

PD2: Dejo otra reflexión, los desarrollos en JAVA, no funcionan tan bien en Windows, por algo será no? jejejeje
Soy algo puntilloso cuando contesto :P

En teoría deberían funcionar igual, ¿no? Ups, no, depende de la máquina virtual y de los cafés que se dejaron de tomar los de GNU/Linux/Microsoft/Sun cuando trataban de implementar todo el J2XX.
  #20 (permalink)  
Antiguo 15/04/2006, 11:54
Avatar de SiR.CARAJ0DIDA  
Fecha de Ingreso: junio-2004
Ubicación: Acá
Mensajes: 1.166
Antigüedad: 19 años, 9 meses
Puntos: 4
aa ahora entiendo, siempre entendi que herencia multiple era eso, pero en mi opinion no estaría bien eso, es como si una clase tuviera varios padres y eso no tiene sentido... nose, es mi humilde opinion, soy newbie en java :P
__________________
Internet Explorer SuckS
Download FireFox
  #21 (permalink)  
Antiguo 15/04/2006, 12:10
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 10 meses
Puntos: 32
Eso es hacer "múltiples herencias", no "herencia múltiple".

La herencia múltiple sería:

class C extends A,B{
}

Donde la clase C hereda atributos y/o métodos de dos clases o más.

Por ejemplo, la clase "HombreLobo" puede heredar de la clase "Hombre" y de la clase "Lobo", pero el problema es que se pueden hacer tantas combinaciones que es difícil de seguir y mantener un diseño de este tipo. Por eso muchos lenguajes no la implementan, no por un tema técnico, solo por un tema de salvaguardar la integridad del diseño.

Los problemas más comunes son las "colisiones de nombres" y la "herencia repetida".

Y ya que estamos, comento: en las guías de diseño recomiendan que para una buena jerarquía de herencia:

- Deben tener no más de 7 (+-2) niveles
- Las jerarquías "gordas y bajas" son síntoma de "poca especialización"
- Las jerarquías "altas y flacas" son síntoma de "excesiva especialización".

El tema es no abusar de la herramienta.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #22 (permalink)  
Antiguo 15/04/2006, 12:13
Avatar de TolaWare
Colaborador
 
Fecha de Ingreso: julio-2005
Mensajes: 4.352
Antigüedad: 18 años, 9 meses
Puntos: 24
en que basas tu opinión SIR?
__________________
http://blog.tolaware.com.ar -> Blog de Java, Ruby y Linux
  #23 (permalink)  
Antiguo 15/04/2006, 12:15
Avatar de TolaWare
Colaborador
 
Fecha de Ingreso: julio-2005
Mensajes: 4.352
Antigüedad: 18 años, 9 meses
Puntos: 24
Cita:
Iniciado por SiR.CARAJ0DIDA
aa ahora entiendo, siempre entendi que herencia multiple era eso, pero en mi opinion no estaría bien eso, es como si una clase tuviera varios padres y eso no tiene sentido... nose, es mi humilde opinion, soy newbie en java :P
Me he visto en varias situaciones en Java, en que he necesitado a gritos la herencia multiple y ha sido en esos casos en que he extrañado a C++.
No explico que situaciones, porque son problemas tecnicos muy especificas de una apliciacion.
__________________
http://blog.tolaware.com.ar -> Blog de Java, Ruby y Linux
  #24 (permalink)  
Antiguo 15/04/2006, 17:21
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por SiR.CARAJ0DIDA
aa ahora entiendo, siempre entendi que herencia multiple era eso, pero en mi opinion no estaría bien eso, es como si una clase tuviera varios padres y eso no tiene sentido... nose, es mi humilde opinion, soy newbie en java :P
Bueno, el ejemplo que te he puesto antes es perfectamente válido.

Por ejemplo, yo uso herencia múltiple en muchos proyectos, tantos como haga una clase que no tenga que ser copiable.

Defines una clase base que no permita su propia copia. Luego, de ahí heredas para que la hija adquiera ese comportamiento.

Por ejemplo, defino una clase "ServidorFTP". No tiene sentido copiar la clase de un servidor FTP, por tanto, le define así:

Código:
class ServidorFTP : public Servidor, private NoCopiable;
Y ya no puede ser copiado nunca. Esto, será añadido en C++0x.

La librería Boost ya lo implementa. La clase "Noncopyable" sirve para eso.
  #25 (permalink)  
Antiguo 15/04/2006, 17:22
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por TolaWare
en que basas tu opinión SIR?
En poco, porque ni sabía que existía... :P

Lo extraño asusta, pero no por ello es malo.
  #26 (permalink)  
Antiguo 15/04/2006, 17:26
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por enriqueplace
Por eso muchos lenguajes no la implementan, no por un tema técnico, solo por un tema de salvaguardar la integridad del diseño.

El tema es no abusar de la herramienta.
No abusar, pero sí poder usarla.

Y bueno, no opino lo mismo. Será el programador el que tenga que salvaguardar el proyecto, no el lenguaje. Por esa regla de tres, programemos en un Basic.

Los problemas se pueden evitar, si se sabe hacer. Pero hay que aprender claro.

En verdad, lo que ocurre es que para usar herencia múltiple hay que pensar bien las cosas antes de escribir nada, porque luego no hay vuelta a atrás.

En cambio, con la simple, la gente lo ve como algo "más o menos fácil", y aún así, como no diseñes bien la aplicación, la has fastidiado.

Los problemas más complejos vienen en el seguimiento del código, entender qué se está ejecutando antes y qué después, el seguimiento de la memoria, los punteros, que van y vienen entre clases y hay que reservar y liberar correctamente, no tener objetos duplicados, no perder rendimiento, etc.
  #27 (permalink)  
Antiguo 15/04/2006, 18:00
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 10 meses
Puntos: 32
Sobre el lenguaje, todos tienes reglas distintas y distintas formas de atacar los problemas. Siempre existen limitaciones técnicas y no-técnicas, por eso optamos por uno u otro lenguaje.

Con respecto al tema de "herencia múltiple", no es una sugerencia personal, lo dicen los grandes autores de grandes libros
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #28 (permalink)  
Antiguo 15/04/2006, 18:06
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 10 meses
Puntos: 32
... tampoco bueno ... por eso es bueno leer, adquirir conocimiento, razonar, cuestionar, acumular experiencia para luego poder decidir por nosotros mismos.

Conozco pocos programadores que leen o estudian materiales sobre diseño, principios y guías sobre Orientación a Objetos.

Programar orientado a objetos es fácil, hacer un sistema reutilizable y con bajo costo de mantenimiento, difícil (todo un arte, diría).
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #29 (permalink)  
Antiguo 15/04/2006, 20:29
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por enriqueplace
Con respecto al tema de "herencia múltiple", no es una sugerencia personal, lo dicen los grandes autores de grandes libros
Son de esos "grandes autores" de los que hicieron que fuera posible que existiese y promoviesen la herencia múltiple en su día. Que ahora vengan algunos a criticarla algunos "nuevos gurús", es otro tema.

No leamos sólo a los autores que nos interesan :)

Por otra parte, muchos grandes programadores que no salen a la luz con libros, que trabajan detrás del escenario, programando fundamentalmente compiladores y sistemas operativos, tienen mucho que decir, y seguramente puedan opinar mejor ellos que un miembro del comité de estandarización de "X" lenguaje.

Pero en la vida todo depende de la situación, no de la capacidad de las personas ;)
  #30 (permalink)  
Antiguo 15/04/2006, 20:34
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por enriqueplace
Conozco pocos programadores que leen o estudian materiales sobre diseño, principios y guías sobre Orientación a Objetos.

Programar orientado a objetos es fácil, hacer un sistema reutilizable y con bajo costo de mantenimiento, difícil (todo un arte, diría).
Ahí te doy 100% apoyo.

Conozco a muchos programadores, pero pocos lo son.

Muchos se autoproclaman programadores de tal lenguaje, tecnología, metodología, paradigma (no sólo POO)... y no lo son ni de lejos.

Hoy en día ser programador es muy fácil, hay críos de 10 años que programan. Por tanto, son "programadores".

En cambio, encontrar personas que lleven o hayan llevado el tema de un kernel, de una aplicación ofimática, de un engine3d o proyectos de similar importancia en otras categorías, casi imposible si no les buscas expresamente.

Supongo que ocurre en cualquier materia de la vida, pero en la programación, ha sido tan simplificada hoy en día (sobre todo con la aparición del dios-VB6), que parece que ser programador es ser tonto, puesto que te comparan con niños de 10 años. Lógico. Es como si ahora los niños de 10 años saben integrar porque usan Derive o Mathlab.
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 23:23.