..
Às vezes você quer criar uma classe de objetos que têm recurso de "isto", mas "isso" e "esse outro", que são, provavelmente, já foi escrito em outros lugares em nosso código fonte.
Em outras palavras, queremos criar uma classe que toma emprestado métodos e propriedades definidas em outras partes do código-fonte ou em qualquer biblioteca.
Por outro lado, nos reuníamos em torno da mesma funcionalidade nosso código fonte em um lugar acessível a todos. Como fazer?
Os puristas ficam horrorizados com a programação orientada a objeto e suporte - na minha opinião, não inteiramente sem razão - que qualquer necessidade deste tipo podem ser resolvidos pelo uso apropriado de polimorfismo.
Outros, especialmente se forem provenientes de experiência com linguagens como C + +, argumentam que, precisamente por causa destes requisitos usando herança múltipla.
Linguagens como Ruby pragmática, no entanto, abordar a questão, fornecendo uma técnica chamada "mixins", o nome - que parece! - Isso é uma Massuchussets sorvete deu-lhe sorvete composto de vários sabores (chocolate, creme ...)
O mixins em Ruby
Tecnicamente, mixins Ruby são implementados usando classes dentro, código definido em diferentes módulos (módulo).
Para dar um exemplo trivial, suponha que eu queria implementar um processador de texto que eu imprime automaticamente a simpatia de uma carta comercial. Desde que você deseja inserir apenas os dados necessários, ou seja, o destinatário ea mensagem. O programa vai pensar o amistoso diversos como, "Dear Sir" e "Sincerely".
Começamos por definir a cordialidade em um formulário:
módulo CordialitaLettera
def start (o destinatário)
return "Dear Mr.." + destinatário + "\ n"
final
assinatura final (letra)
retorno carta + "\ n" + "Atenciosamente, \ nCarlo Smith"
final
final
Nada em particular, portanto, apenas dois métodos que podem alterar a entrada de texto recebidas.
Vamos escrever uma classe "misto" para esses métodos, um memorando mixin:
Cartas de classe
inclui CordialitaLettera
finais stampaLettera (destinatário, mensagem)
= Ponto de partida (o destinatário)
carta + message =
coloca assinatura (letra)
final
final
Letras acima da classe tem um método que recebe como entrada apenas as partes variáveis da carta, com formato amigável definido no módulo.
Como você pode ver a sintaxe é bastante semelhante ao de herança no Ruby, mas, ao contrário deste último, em uma classe pode implementar qualquer número de formas - e como é sabido, uma classe pode ser derivada de uma e apenas uma classe pai (Ruby não suporta herança múltipla!)
Por exemplo, podemos escrever:
def main ()
Lengin = Lettere.new
lEngine.stampaLettera ('Alessio Saltarini',
"Eu só procedeu à transferência
que você pediu. ')
coloca
lEngine.stampaLettera ('Matthew Pisconi',
'Eu enviar o fax para nr.038283873.')
final
que retorna:
Caro sig.Alessio Saltarini, Eu só dispostos a transferi-lo solicitado. Atenciosamente, Carlo Rossi
Caro sig.Matteo Pisconi, Eu enviar o fax para nr.038283873. Atenciosamente, Carlo RossiEsta técnica, entre outras coisas, permite-nos assimilar o uso de mixins ao de interfaces Java: na verdade, se uma classe é "mix" com um formulário, na verdade, vai implementar os métodos (ou seja, cumprir uma determinada interface) .
| |
Ruby e Ruby On Rails (Curso)
Criação de software e aplicações Web com Ruby e RoR. A partir de 39 €. |