Novo OS 2.0 traz email integrado e aplicativos Android para o PlayBook
Boatos: Microsoft pode ter Office para iPad
Guia de salários: carreira em e-commerce pode pagar até R$ 16 mil
Google ignora controles de privacidade do IE, diz Microsoft
iPad 3 terá SoC Apple A5X
Lista de falhas: iPad 2 é mais seguro que Kindle Fire
Fundador do Megaupload é solto pela justiça
Anonymous: conheça os 10 principais fatos do grupo
Anônimos, trolls e fakes: dicas de etiqueta para lidar na internet
Especial Carreiras em TI: entenda o que faz um arquiteto de solução
Solução capta e reporta falhas em softwares
Guia de salários: profissionais de help desk ganham até R$ 16,7 mil

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.
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.
Inovação, tecnologia e futurismo
Bráulio Medina
SIRI, MAJEL, EVI - Colhemos os frutos da semântica e inteligência artificial
Mundo RIA
Zaedy Sayão
Construindo Mobile Apps com Sencha Touch e Phonegap - Parte 1
Conversando sobre Tecnologia
Anderson Rocha
Transpondo Fronteiras da Multidisciplinaridade para Lidar Com Falsificações de Imagens e Vídeos no Século XXI*
Mídias Sociais e Negócios - Direto do Vale do Silício
Marcio Saito
7 Ações em Mídia Social para quem tem mais o que fazer
Expedição WDC: o diário do sinal de internet no Brasil
Expedição WDC
Pegue uma carona na Expedição WDC/Abranet