..


Sponzorované odkazy

Použití mixins v Ruby

Článek napsal Alessio Saltarini
Strana 1 z 2

Někdy chcete vytvořit třídy objektů, které mají "to" funkce, ale také "to" a "to ostatní", které se snad již bylo napsáno na jiném místě v našem zdrojovém kódu.

Jinými slovy, chceme vytvořit třídu, která si půjčuje metody a vlastnosti jsou definovány v jiných částech zdrojového kódu, nebo v nějaké knihovně.

Naopak bychom získat přibližně stejné vlastnosti zdrojový kód na jednom místě, přístupné všem. Jak?

Puristé jsou zděšeni objektově orientovaného programování a podporu - podle mého názoru ne zcela bez důvodu - že veškeré potřeby tohoto typu lze vyřešit pomocí správné použití polymorfismu.

Jiní, zejména pokud pocházejí ze zkušeností s jazyky jako C + +, argumentovat, že právě proto, že tyto požadavky za použití vícenásobné dědičnosti.

Pragmatický jazyky jako Ruby, ale řešit problém tím, že techniku ​​zvanou "mixin", jméno - zní to! - Zmrzlina muž jí Massuchussets skládá z různých druhů zmrzlin (smetana, čokoláda ...)

Ruby mixins

Technicky jsou implementována pomocí Ruby mixins v rámci třídy, kód definovaný v různých modulech (moduly).

Chcete-li triviální příklad, že bych chtěl provádět textový procesor, který automaticky vytisknou moje vstřícnost obchodní dopis. Vzhledem k tomu chcete zadat pouze potřebné údaje, tj. příjemce a zprávu. Program budou myslet, že různé přátelské jako "sir" a "upřímně."

Začněme tím, že definuje v přátelské formě:






 Modul CordialitaLettera



    



 def start (adresa)



        



 return "Vážený pane." + příjemcem + "\ n"



    



 konec



    



 poslední podpis (dopis)



        



 návrat dopis + "\ n" + "S pozdravem, \ nCarlo Smith"



    



 konec







 konec



Nic zvláštního, pak pouze dvě metody, které mohou změnit text získal jako vstup.

Pojďme napsat třídu "smíšený", aby tyto metody, jen mixin:






 Třídy písmena



    



 Zahrnuje CordialitaLettera



    



 poslední stampaLettera (příjemce zprávy)



        



 = Výchozí bod (přijímač)



        



 = Písmeno + příspěvek



        



 dá podpis (dopis)



    



 konec







 konec



Dopisy nad třída má metodu, která bere jako vstup pouze variabilní část dopisu, s přátelským formát definovaný v modulu.

Jak můžete vidět, syntaxe je velmi podobná dědictví v Ruby, ale na rozdíl od druhé, může ve třídě implementovat libovolný počet formulářů - a jak je známo, může být odvozena z třídy a jen jeden z rodičů třídy (Ruby nepodporuje vícenásobnou dědičnost!)

Například můžeme psát:






 def main ()



    



 Lengin = Lettere.new



    



 lEngine.stampaLettera ("Alessio Saltarini"



                          



 "Jen jsem přistoupil k přenosu



                           



 jste požadovali. ")



    



 klade



    



 lEngine.stampaLettera ("Matthew Pisconi"



                          



 "Poslal jsem fax nr.038283873.")







 konec



, který se vrací:





 Vážení sig.Alessio Saltarini,







 Právě jsem udělal transfer jste požadovali.







 S pozdravem,







 Carlo Rossi








 Vážení sig.Matteo Pisconi,







 Poslal jsem fax nr.038283873.







 S pozdravem,







 Carlo Rossi



Tato technika, mimo jiné, nám umožňuje přizpůsobit použití mixins, že rozhraní v jazyce Java: Ve skutečnosti, pokud je třída "míchání" se formulář, ve skutečnosti to bude provádět metody (a tím splňuje určité rozhraní) .

Ve stejné kategorii ...
E-Learning
Ruby a Ruby on Rails (kurz) Ruby a Ruby on Rails (kurz)
Vytvořit software a webových aplikací s Ruby a RoR. Od 39 €.
Sponzorované odkazy