Claudio, Personalmente nunca usaria herencia multiple. Para mi en los casos de herencia multiple siempre hay un error de concepto.
Como vos decis en lo que envie esta el problema del "self" y muchos otros problemas. En si lo que envie es un ejemplo que hice frente a un amigo (de la linea C#) para que viera la flexibilidad que tiene Smalltalk. Como esta preocupado por la herencia multiple le mostre esto, solo eso. No se trata de implementar HM ni mostrar por donde se podria ir para implementar HM, sino que fue algo que hice en 5 min (ahora son las 8:04 para 8:09 que podria hacer de de HM???) y fue solamente eso. Ya se que el ejemplo es muy burdo; y simple como dijo gallego. Saludos, Bruno -----Original Message----- From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of Claudio Sent: Friday, April 25, 2008 10:47 AM To: ClubSmalltalk Subject: [clubSmalltalk] Re: Herencia multiple "7 lineas de codigo" o 5 minutos ... Hola Bruno, Cada vez que alguno sugiere la necesidad de la herencia múltiple en el paradigma de Objetos, los que consideramos que es innecesaria (y perjudicial) mostramos que esas supuestas necesidades pueden satisfacerse con delegaciones. Esto es exactamente lo que Vos estás haciendo en tu solución. Tu Dragón recibe un mensaje que no tiene implementado entonces lo delega en sus colaboradores, una INSTANCIA de Lagarto y una INSTANCIA de Pájaro. Extrañamente se lo enviás a ambos en lugar de "elegir" de algún modo quién lo responderá. Ahora supongamos que tu mecanismo de selección (on: Error, result notNil:...) funcionara... entrás en el famoso "Problema de self" que podríamos resumirlo en lo siguiente: Supongamos que La Clase Pájaro implementa #message1 y #message2 y la clase Dragón implementa el mensaje #message2. Supongamos que tu Dragón recibe un mensaje #message1 que no implementa, y entonces lo delega y lo resuelve el Pájaro. Supongamos ahora también que dentro del código del método correspondiente a #message1 en la clase Pájaro , hay una línea que dice: self message2. .... Si estuviésemos hablando de Herencia, es decir, si Dragón heredara de Pájaro, el objeto que está ejecutando #message1 es UN DRAGÓN, aunque use la implementación de la clase Pájaro, pero es un dragón, por lo cual, en la línea "self message2" self es el dragón y el message2 que se ejecuta es el de dragón.... en cambio en tu ejemplo, el objeto que está ejecutando #message1 es un pájaro, entonces cuando la línea "self message2" ejecuta el método "incorrecto".... y ni hablar de lo que pasaría si el pájaro does not understand #message2 ... Me quedan muchas más preguntas, como por ejemplo que pasa con super.... pero no lo quiero hacer muy largo!!! Abrazo, Claudio On 19 abr, 16:59, "Bruno Buzzi Brassesco" <[EMAIL PROTECTED]> wrote: > Discutiendo con un amigo que decía que Smalltalk no tenia herencia múltiple. > > Aunque sea discutible la necesidad de herencia múltiple, me pregunte cuan > rápido se podrá implementar herencia múltiple en Smalltalk y poner a prueba > su flexibilidad. > > En "7 líneas de código" o 5 minutos ... hice esto: > > Se puede discutir sobre la validez de la implementación (la variable # > superinstances y sus implicaciones) pero NO es el punto central. > > Lo central es que si en 5 minutos se puede hacer esto, que será después de > estar un año trabajando sobre un tema... > > Implementa algo así en C# (u otro) valor!!! > > Object subclass: #HerenciaMultiple > > instanceVariableNames: 'superinstances' > > classVariableNames: '' > > poolDictionaries: '' > > classInstanceVariableNames: '' > > initialize > > super initialize. > > superinstances := OrderedCollection new. > > superinstances addAll: (self superclasses collect: [:each | each > new initialize]) > > doesNotUnderstand: failedMessage > > superinstances do: [:each | | result | > > [result := each perform: failedMessage selector > withArguments: failedMessage arguments] on: Error do: [:ex | ]. > > result ifNotNil: [:value | ^value]]. > > ^super doesNotUnderstand: failedMessage > > Object > > Lagarto > > Pajaro > > HerenciaMultiple > > Dragon > > Dragon class > > superclasses > > ^OrderedCollection with: Lagarto with: Pajaro > > Saludos, > > bruno > > No virus found in this outgoing message. > Checked by AVG. > Version: 7.5.524 / Virus Database: 269.23.2/1387 - Release Date: 4/19/2008 > 11:31 AM No virus found in this incoming message. Checked by AVG. Version: 7.5.524 / Virus Database: 269.23.5/1398 - Release Date: 4/25/2008 2:31 PM No virus found in this outgoing message. Checked by AVG. Version: 7.5.524 / Virus Database: 269.23.5/1398 - Release Date: 4/25/2008 2:31 PM --~--~---------~--~----~------------~-------~--~----~ Has recibido este mensaje porque estás suscrito a Grupo "ClubSmalltalk" de Grupos de Google. Si quieres publicar en este grupo, envía un mensaje de correo electrónico a [email protected] Para anular la suscripción a este grupo, envía un mensaje a [EMAIL PROTECTED] Para obtener más opciones, visita este grupo en http://groups.google.com/group/clubSmalltalk?hl=es. -~----------~----~----~----~------~----~------~--~---
