..
Ibland vill du skapa en klass av objekt som har "denna" funktion, men också "denna" och "det andra", som kanske redan har skrivits på andra håll i vår källkod.
Med andra ord vill vi skapa en klass som lånar metoder och egenskaper som definieras i andra delar av källkoden eller i vissa bibliotek.
Omvänt skulle vi samlas kring samma funktioner vår källkod på en plats tillgänglig för alla. Hur?
Den purister förfasar objektorienterad programmering och support - enligt min mening inte helt utan anledning - att varje behov av denna typ kan lösas med en korrekt användning av polymorfism.
Andra, särskilt om de kommer från erfarenheter med språk som C + +, hävdar att just på grund av dessa krav med hjälp av flera arv.
Pragmatisk språk som Ruby, men ta itu med frågan genom att tillhandahålla en teknik som kallas "Mixin", namnet - det låter! - En glass mannen gav henne Massuchussets består av olika smaker glass (grädde, choklad ...)
Ruby mixins
Tekniskt sett är Ruby mixins genomförs med hjälp av klasserna, kod som avses i olika moduler (modul).
För att ta ett trivialt exempel, antar att jag ville genomföra en ordbehandlare som automatiskt skriver ut min vänlighet ett affärsbrev. Eftersom du bara ange de nödvändiga uppgifterna, dvs mottagaren och meddelandet. Programmet kommer att tänka olika vänliga som "sir" och "vänliga hälsningar".
Låt oss börja med att definiera i en vänlig form:
modul CordialitaLettera
def start (adress)
return "Dear Mr." + mottagare + "\ n"
slutet
slutliga undertecknandet (brev)
tillbaka bokstav + "\ n" + "Med vänliga hälsningar, \ nCarlo Smith"
slutet
slutet
Ingenting i synnerhet då, fick endast två metoder som kan ändra texten som indata.
Låt oss skriva en klass "blandad" med dessa metoder, bara en Mixin:
Klass brev
inkluderar CordialitaLettera
slutgiltiga stampaLettera (mottagare, meddelande)
= Startpunkten (mottagare)
= Bokstav + inlägg
sätter signatur (brev)
slutet
slutet
Brev ovanför klassen har en metod som tar som indata endast de rörliga delarna av skrivelsen, med vänligt format som anges i modulen.
Som du kan se syntaxen är ganska lik arv i Ruby, men till skillnad från den senare, kan i en klass implementera ett obegränsat antal former - och som är känd, kan en klass härledas från en och bara en förälder klass (Ruby stöder inte multipelt arv!)
Till exempel kan vi skriva:
def main ()
Lengin = Lettere.new
lEngine.stampaLettera ('Alessio Saltarini "
Jag fortsatte bara att överföra
du har begärt. ")
sätter
lEngine.stampaLettera (Matteus Pisconi "
"Jag skickar faxet till nr.038283873. ')
slutet
som returnerar:
Kära sig.Alessio Saltarini, Jag har precis gjort en överföring du begärde. Med vänliga hälsningar, Carlo Rossi
Kära sig.Matteo Pisconi, Jag skickar faxet till nr.038283873. Med vänliga hälsningar, Carlo RossiDenna teknik, bland annat gör att vi kan tillgodogöra användningen av mixins som gränssnitt i Java: Faktum är att om en klass är "blandning" med en form, i själva verket kommer att genomföra de metoder (och därför uppfyller ett visst gränssnitt) .
| |
Ruby och Ruby on Rails (kurs)
Skapa program och webbapplikationer med Ruby och RoR. Från 39 €. |