..
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 RossiTato 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í) .
| |
Ruby a Ruby on Rails (kurz)
Vytvořit software a webových aplikací s Ruby a RoR. Od 39 €. |