..
Uneori doriţi să creaţi o clasă de obiecte care au "această" facilitate, dar, de asemenea, "acest lucru" şi "acest alt", care sunt, probabil, deja a fost scris în altă parte, în codul nostru sursa.
Cu alte cuvinte, vrem să creăm o clasă care împrumută metode si proprietati definite în alte părţi ale codului sursă sau, în unele bibliotecă.
În schimb, ne-ar aduna în jurul valorii de aceleaşi caracteristici codul nostru sursa într-un singur loc accesibil tuturor. Cum?
Puristii sunt îngrozit programarea orientată pe obiecte şi de sprijin - în opinia mea, nu în întregime fără motiv - că fiecare nevoie de acest tip pot fi rezolvate cu utilizarea corectă a polimorfismului.
Alţii, mai ales în cazul în care vin din experienta cu limbaje ca C + +, susţin că tocmai din cauza acestor cerinţe folosind mostenirea multipla.
Limbi pragmatice ca Ruby, cu toate acestea, aborda problema prin furnizarea de o tehnica numita "mixin", numele - sună! - Un om inghetata ia dat Massuchussets compus din diverse arome inghetata (crema, ciocolata ...)
Ruby mixins
Punct de vedere tehnic, mixins Ruby sunt implementate folosind în cadrul claselor, codul definit la diferite module (modul).
Pentru a lua un exemplu banal, să presupunem că am vrut să pună în aplicare un procesor de cuvinte care imprimă automat pe prietenia mea de o scrisoare de afaceri. Din moment ce doriţi să introduceţi numai datele necesare, şi anume destinatarul şi mesajul. Programul se va gândi prietenos diferite cum ar fi, "Sir" si "sinceritate".
Să începem prin definirea într-o forma prietenoasa:
Modul CordialitaLettera
def start (adresa)
întoarcere "Draga domnule." destinatar + + "\ n"
capăt
semnătura finală (scrisoare)
întoarcere scrisoare + "\ n" + "cu sinceritate, \ nCarlo Smith"
capăt
capăt
Nimic, în special, apoi, doar două metode care pot modifica textul primit ca intrare.
Să scrie o clasa "mixt", la aceste metode, doar o mixin:
Clasa scrisori
include CordialitaLettera
finală stampaLettera (destinatar, mesaj)
= Punctul de start (receptor)
= Scrisoare + mesaj
pune semnătura (scrisoare)
capăt
capăt
Scrisori mai sus, clasa are o metodă care ia ca date de intrare numai părţile variabil al scrisorii, cu format prietenos definite în modulul.
După cum puteţi vedea sintaxa este destul de similar cu moştenirea, în Ruby, cu toate acestea, spre deosebire de acesta din urmă, într-o clasă poate pune în aplicare orice număr de formulare - şi după cum se ştie, o clasă poate fi derivată dintr-o şi un singur părinte Class (Ruby nu suportă moştenirea multiplă!)
De exemplu, putem scrie:
def main ()
Lengin = Lettere.new
lEngine.stampaLettera ("Alessio Saltarini",
"Am procedat doar pentru a transfera
le-aţi solicitat ").
pune
lEngine.stampaLettera ("Matei Pisconi",
"Am trimis fax la nr.038283873.")
capăt
care returnează:
Stimati sig.Alessio Saltarini, Am făcut doar de transfer le-aţi solicitat. Cu stimă, Carlo Rossi
Stimati sig.Matteo Pisconi, Am trimis fax la nr.038283873. Cu stimă, Carlo RossiAceasta tehnica, printre altele, ne permite să asimileze utilizarea mixins că de interfeţe în Java: în fapt, dacă o clasa este "amestecarea" cu un formular, de fapt, aceasta va pune în aplicare metodele (şi îndeplineşte, prin urmare, o interfata anumit) .
| |
Ruby şi Ruby on Rails (Curs)
Crearea aplicatii software si web cu Ruby şi RoR. De la 39 €. |