Ingresar:

Wilfredo Vargas Almendras :: Blog :: Mixins

April 07, 2008

Bueno, retomando algunos conceptos. Recorde otro: Mixins En POO, un mixin es una "clase", que declara atributos y firmas de métodos. No representa como tal una especialización, y bueno también un mixin no "funciona" por si solo, necesita que los método cuyas firmas declara, sean implementados en clases derivadas. En cierta forma permiten definir interfaces, muchas veces utilizados en arquitecturas de software por capas, servicios y otros. Donde lo que importa es conocer los servicios que se ofrecen y poder utilizarlos. Lo más próximo a un mixin en Java son las interfaces, donde se declaran firmas de métodos que deben sobre-escribirse en clases que "implementen" de dica interface, en Java también se pueden declarar "atributos", variables :) .. constantes. Bueno también se puede tener una buena estructura para manejar Mixins en Java en base al combinando interfaces con POA (Programación Orientada a aspectos), tema del que estaremos hablando más adelante :) .... (AspectJ)

Palabras clave: conceptos, mixins, POA

Enviado por Wilfredo Vargas Almendras



Comentarios

  1. Si mal no recuerdo Ruby si tiene Mixins

    Invitado on Tuesday, 08 April 2008, 17:07 BOT # |

  2. Un mixin[1] es una clase que no se instancia, puede tener métodos y atributos que representan parte de una abstracción. Necesita de una abstracción de primera clase. Podemos compararla con un adjetivo calificativo. Ambos, adjetivo y sustantivo describen algo. La clase mixin y la clase asociada se complementan para formar una abstracción que tenga más posibilidades. El mixin está pensado para describir posibilidades asociadas a muchas abstracciones (calificar muchos sustantivos). Provee una flexibilidad interesante.

    En un modelo normalmente se anota como una herencia múltiple formada por: la clase mixin y la clase asociada, la nueva abstracción compuesta hereda de ambas clases.

    Yo pienso que lo importante del mixin es el concepto. Siempre es posible implementarlas en un lenguaje que sea lo suficientemente flexible. En Java lo puedes hacer de distintas formas siempre y cuando sepas que tiene la clase mixin. La forma más directa de hacerlo es usando delegación.

    Con Ruby puedes implementar un mixin[2] con más flexibilidad ya que el lenguaje tiene dos tipos de elementos de abstracción: módulos y clases. Los módulos son como clases que no se pueden instanciar. Te aprovechas de eso para implementar de una forma más transparente un mixin. Pero así como de forma disciplinada puedes hacer programas interesantes, también puedes hacer cosas feas. En los módulos puedes usar variables de instancia ... que por supuesto no están definidos en los módulos. Hay que tener cuidado. Además es un lenguaje dinámico.

    Tambien se puede implementar en PHP [3].

    Hay tambien un breve articulo que argumenta sobre las facilidades que tiene Ruby sobre Java para construir infraestructuras (frameworks) [4]. 

    No queremos armar una guerra santa, solamente estudiar un poco sobre mixins. 

    --

    Referencias

    [1] Mixin based inheritance. Gilad Bracha y William Cook. OOPSLA 90. 1990.

    [2] Ruby mixin tutorial

    [3] Ruby style mixins in PHP

    [4] Why Ruby’s Mixins Gives Rails an Advantage over Java Frameworks

     

    user iconPablo Azero on Wednesday, 09 April 2008, 08:11 BOT # |

  3. Supongo que lo más cercano a los mixins en C++ son las ABCs (clases base abstractas) que son clases donde todos los métodos son virtuales puros [abstractos] y que se podrían usar mediante herencia múltiple.

    Ernesto Bascón Pantoja on Wednesday, 09 April 2008, 10:46 BOT # |

Añadir un comentario

Tu texto de comentario

Tu nombre

Por favor ingresa el código de la imagen

Security Code