Ver Mensaje Individual
  #17 (permalink)  
Antiguo 15/04/2006, 11:29
MaxExtreme
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 7 meses
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