..


Sponsede Lenker

Bruk av mixins i Ruby

Artikkel skrevet av Alessio Saltarini
Side 1 av 2

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 Rossi



Denne 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) .

I samme kategori ...
E-Learning
Ruby og Ruby On Rails (Course) Ruby og Ruby On Rails (Course)
Opprette programvare og web applikasjoner med Ruby og RoR. Starter fra 39 €.
Sponsede Lenker