..
Noen ganger du vil opprette en klasse av objekter som har "dette" funksjonen, men "dette" og "dette andre", som sannsynligvis allerede er skrevet andre steder i vår kildekode.
Med andre ord, ønsker vi å lage en klasse som låner metoder og egenskaper er definert i andre deler av kildekoden eller i andre bibliotek.
Omvendt ville vi samles rundt samme funksjonalitet våre kildekoden på ett sted tilgjengelig for alle. How do?
Purister er skremt over objektorientert programmering og støtte - etter min mening ikke helt uten grunn - at behovet for denne typen kan løses ved riktig bruk av polymorfisme.
Andre, særlig hvis de kommer fra erfaring med språk som C + +, hevder at nettopp på grunn av disse kravene med flere arv.
Pragmatic språk som Ruby, men adressen problemet ved å gi en teknikk kalt "mixins", navnet - det virker! - Det er en iskrem Massuchussets ga henne iskrem sammensatt av ulike smaker (krem, sjokolade ...)
Den mixins i Ruby
Teknisk sett er Ruby mixins implementert ved hjelp av klasser innenfor, kode definert i forskjellige moduler (modul).
For å ta et trivielt eksempel, antar jeg ønsket å implementere en tekstbehandler som jeg automatisk skriver vennlighet av en virksomhet brev. Siden du ønsker å oppgi bare de nødvendige data, dvs. mottakeren og meldingen. Programmet vil tro de ulike vennlige som "Dear Sir" og "Vennlig hilsen".
Vi starter med å definere den hjertelighet i et skjema:
modul CordialitaLettera
def start (mottakeren)
return "Dear Mr.." + mottaker + "\ n"
end
endelig underskrift (bokstav)
returnere brevet + "\ n" + "Vennlig hilsen, \ nCarlo Smith"
end
end
Ingenting spesielt, derfor fikk bare to metoder som kan endre skriving.
La oss skrive en klasse "blandet" til disse metodene, en mixin memo:
Klasse Letters
inkluderer CordialitaLettera
endelig stampaLettera (mottaker, melding)
= Startpunkt (mottakeren)
brev + message =
setter underskrift (bokstav)
end
end
Brev ovenfor klasse har en metode som tar som input kun de variable delene av brevet, med vennlig format definert i modulen.
Som du kan se syntaks er ganske lik som arv i Ruby, men i motsetning til sistnevnte, kan i en klasse implementerer en rekke former - og som er kjent, kan en klasse være avledet fra en og bare en av foreldrene klasse (Ruby støtter ikke multippel arv!)
For eksempel kan vi skrive:
def main ()
Lengin = Lettere.new
lEngine.stampaLettera ('Alessio Saltarini',
Jeg bare fortsatte å overføre
du forespurte. ')
setter
lEngine.stampaLettera ('Matthew Pisconi',
'Jeg sender faksen til nr.038283873.')
end
som returnerer:
Kjære sig.Alessio Saltarini, Jeg bare arrangert for å overføre du har bedt om. Vennlig hilsen, Carlo Rossi
Kjære sig.Matteo Pisconi, Jeg sende faks til nr.038283873. Vennlig hilsen, Carlo RossiDenne teknikken, blant annet tillater oss å assimilere bruk av mixins som for Java grensesnitt: Faktisk, hvis en klasse er "mix" med en form, faktisk vil den implementere metoder (dvs. overholde en viss grensesnitt) .
| |
Ruby og Ruby On Rails (Course)
Opprette programvare og web applikasjoner med Ruby og RoR. Starter fra 39 €. |