IT Mídia
Notícias em destaque

Módulos como mixin

15 de janeiro de 2012 23:32

Em um post anterior vimos como usar módulos como namespaces. Agora veremos como usar os módulos em Ruby como mixin, misturando os métodos de instância de um módulo em outras classes.

Para misturar um módulo em uma classe, usamos o método privado include de Module passando como parâmetros qual ou quais módulos serão misturados na classe.
Ruby não suporta herança múltipla de classes, então o mixin de módulos oferece uma alternativa para adicionar funcionalidades em suas classes. Veja um exemplo misturando os módulos Enumerable e Comparable em uma classe:

Módulos também podem ser misturados em outros módulos:

Entretanto, não é possível fazer mixin de classes, ou seja, adicionar funcionalidades de uma classe para outras classes. Se você deseja ou necessita fazer isso, extraia a funcionalidade que você quer compartilhar de uma classe para um módulo e misture esse módulo em outras classes e/ou módulos.

Algo interessante é que você pode definir o método construtor de classe também em um módulo, já que o initialize é um método de instância.

Para uma classe fornecer a própria implementação do initialize e ainda sim utilizar a implementação do módulo, use super para chamar o método initialize do módulo.

Note que nos dois últimos códigos acima foi utilizada a variável de instância @title definida no módulo Information. As variáveis de instância definidas nos módulos ficam disponíveis para as classes onde eles são misturados. Criar variáveis de instância em módulos não é uma boa prática, pois poderá acontecer colisões de nomes dessas variáveis por outros módulos ou mesmo nas classes onde eles estão sendo misturados.

Se você realmente precisa definir variáveis de instância em um módulo, uma alternativa seria prefixar o nome da variável de instância com o nome do módulo.

Sobre Fernando Hamasaki de Amorim

Desenvolvedor sênior na Locaweb, empresa na qual está desde 2007, Fernando Hamasaki de Amorim trabalha desde a criação até a arquitetura, modelagem, análise e integração de sistemas e aplicativos na companhia. Graduado em Tecnologia em Informática pela UniSant'Anna, o profissional possui pós-graduação em Tecnologias Web com Ênfase em Java pela Fiap. Já atuou em diversas outras companhias, tais como a TV Online, empresa brasileira pioneira em transmissões ao vivo e SAC Sistemas, que desenvolve ERP. Neste espaço, abordará temas envolvendo o desenvolvimento por meio da linguagem Ruby.

Entre em contato com Fernando Hamasaki de Amorim

Parceiros

Portais: IT Mídia | IT Web | Saúde Web

Publicações: InformationWeek Brasil | CRN Brasil | FH

Fóruns: IT Forum | IT Forum + | IT Business Forum | Saúde Business Forum