..
Niekedy chcete vytvoriť triedy objektov, ktoré majú "to" funkcie, ale "toto" a "to ostatné", ktoré sú pravdepodobne už bolo napísané na inom mieste v našom zdrojovom kóde.
Inými slovami, chceme vytvoriť triedu, ktorá si požičiava metódy a vlastnosti sú definované v iných častiach zdrojového kódu alebo v knižnici.
Naopak by sme zhromažďovali okolo rovnaké funkcie zdrojový kód na jednom mieste, prístupné všetkým. Ako to?
Puristi sú zdesení objektovo orientovaného programovania a podpora - podľa môjho názoru nie celkom bez dôvodu - že by bolo nutné pre tento druh je možné vyriešiť vhodným použitím polymorfizmu.
Iní, najmä ak pochádzajú zo skúseností s jazyky ako C + +, argumentovať, že práve preto, že tieto požiadavky za použitia viacnásobné dedičnosti.
Pragmatický jazyky ako Ruby, ale riešiť problém tým, že techniku zvanú "mixins", meno - zdá sa! - To je Massuchussets zmrzlina jej zmrzlinu skladá z rôznych príchutí (smotana, čokoláda ...)
Mixins v Ruby
Technicky sú Ruby mixins implementované pomocou triedy v rámci, kód definovaný v rôznych moduloch (modul).
Ak chcete triviálne príklad, že by som chcel implementovať textový procesor, ktorý sa automaticky vytlačí ústretovosť obchodného listu. Vzhľadom k tomu chcete zadať len potrebné údaje, tj príjemcu a správu. Program budú myslieť, že rôzne priateľské ako: "Vážený pane" a "úprimne."
Začneme tým, že definuje srdečnosť v tvare:
Modul CordialitaLettera
def štart (príjemcu)
return "Vážený pane." + + príjemca "\ n"
koniec
posledný podpis (list)
návrat list + "\ n" + "S pozdravom, \ nCarlo Smith"
koniec
koniec
Nič konkrétneho, teda len dve metódy, ktoré môžu zmeniť text získaným informáciám.
Poďme písať triedy "zmiešané", aby tieto metódy, Memo mixin:
Triedy písmená
Zahŕňa CordialitaLettera
posledné stampaLettera (príjemca správy)
= Počiatočný bod (príjemcu)
list + message =
dá podpis (list)
koniec
koniec
Listy nad trieda má metódu, ktorá berie ako vstup len variabilná časť listu, s priateľským formát definovaný v module.
Ako môžete vidieť, syntax je veľmi podobná tomu dedičstva v Ruby, ale na rozdiel od druhej, môže v triede implementovať ľubovoľný počet formulárov - a ako je známe, môžu byť odvodené z triedy a len jeden rodič triedy (Ruby nepodporuje viacnásobnú dedičnosť!)
Napríklad, my môžeme písať:
def main ()
Lengin = Lettere.new
lEngine.stampaLettera ("Alessio Saltarini"
"Len som pristúpil k prenosu
ste požadovali. ")
kladie
lEngine.stampaLettera ("Matthew Pisconi"
"Poslal som fax nr.038283873.")
koniec
, Ktorý sa vracia:
Vážení sig.Alessio Saltarini, Len som zariadil, aby transfer ste požadovali. S pozdravom, Carlo Rossi
Vážení sig.Matteo Pisconi, Aj odoslať fax nr.038283873. S pozdravom, Carlo RossiTáto technika, okrem iného, umožňuje prispôsobiť použitie mixins k tomu rozhraní Java: V skutočnosti, ak trieda je "mix" sa formulár, v skutočnosti to bude robiť metódy (tj v súlade s určitým rozhraním) .
| |
Ruby a Ruby on Rails (kurz)
Tvorba softvéru a webových aplikácií s Ruby a ROR. Od 39 €. |