Common Lisp Object System
Common Lisp Object System ( CLOS ) un sistem de obiecte . Face parte din standardul Common Lisp ANSI . A fost portat de alte dialecte Lisp, cum ar fi EuLisp sau Emacs Lisp . [ 1 ] [ 2 ] CLOS este inspirat de sistemele de obiecte Lisp anterioare, cum ar fi MIT Flavours sau Common LOOPS . Unul dintre obiectivele de proiectare a fost să fie compatibil cu aceste sisteme. [ 3 ] CLOS oferă programatorului abilitatea de a-și modifica și extinde semantica printr-un protocol Meta-Object (MOP). [ 4 ]
Caracteristici
Rezoluție multiplă
CLOS este un sistem cu rezoluții multiple . Aceasta înseamnă că metodele pot fi distinse în funcție de tipurile tuturor argumentelor. Multe limbaje OO sunt soluții simple , metodele lor se disting doar prin primul argument. Metodele din CLOS sunt grupate în funcții generice , colecții de metode cu același nume și structură de argumente, dar tipuri diferite de argumente.
Combinație de metode
CLOS permite combinarea diferitelor metode asociate unei funcții generice sub diferite strategii. Rezultatul acestei combinații se numește metoda eficientă. Strategia implicită este denumită standard . În plus, CLOS definește următoarele combinații de metode : progn , + și , append , list , max , min sau și nconc . Utilizatorul poate defini noi combinații folosind MOP. Strategia standard urmează următoarea logică: se alege metoda cea mai specifică . Această metodă poate alege dacă să apeleze sau nu restul metodelor folosind ; apoi rulați toate metodele de la cea mai mare la cea mai mică specificitate, urmate de cea mai specifică metodă primară și, în final, toate metodele de la cea mai mică la cea mai mare specificitate.
:around(call-next-method):before:after
Moștenire multiplă
CLOS permite moștenirea multiplă . Când ordinea implicită în care metodele sunt executate în moștenirea multiplă nu este corectă, programatorul poate rezolva problema diamantului specificând ordinea combinației de metode.
Dinamic
CLOS este dinamic, nu numai conținutul, ci și structurile obiectelor pot fi modificate în timpul execuției. CLOS acceptă încărcarea definițiilor de clasă din mers (chiar și atunci când instanțe de clasă există deja), precum și schimbarea membrilor clasei unei anumite instanțe prin intermediul operatorului change-class.
Bazat pe clasă
CLOS nu este un limbaj bazat pe prototip , clasele trebuie definite înainte ca obiectele să poată fi instanțiate ca membri ai acelei clase. Cu toate acestea, există Sheeple, un sistem orientat pe obiecte bazat pe prototipuri, care în propriul protocol meta-obiect [ 5 ]
Protocol meta-obiect
În afara standardului ANSI , există o extensie utilizată pe scară largă pentru CLOS numită protocol meta-obiect (MOP). MOP definește o interfață standard pentru a sprijini implementările CLOS, tratând clasele în sine ca instanțe ale metaclaselor și permițând definirea de noi metaclase și modificarea comportamentului clasic. Flexibilitatea CLOS-MOP-urilor avansează programarea orientată pe aspecte, care a fost dezvoltată ulterior de unii dintre aceiași ingineri, cum ar fi Gregor Kiczales .
Referințe
- ↑ „CLOS este un standard. Mai mulți furnizori furnizează CLOS. CLOS (sau părți ale acestuia) este folosit pentru a adăuga orientarea obiectelor altor dialecte Lisp, cum ar fi EuLisp sau Emacs Lisp.” pg 110 din Veitch 1998
- ^ „EIEIO („Implementarea îmbunătățită a obiectelor interpretate Emacs”)” .
- ↑ Bobrow, Daniel (1993). CLOS în context: forma spațiului de design . MIPress . Consultat la 13 martie 2015 .
- ↑ pag. 108 din Veitch 1998
- ↑ https://github.com/sykopomp/sheeple
Link- uri externe
În limba engleză:
- The Common Lisp Object System: An Overview by Richard P. Gabriel și Linda DeMichiel oferă o bună introducere în motivația pentru definirea claselor prin funcții generice.
- Kiczales, des Rivieres și Bobrow, The Art of the Metaobject Protocol. 1991, MIT Press. ISBN 0-262-61074-4
- Pasionat, Sonya. Programarea orientată pe obiecte în Common Lisp: Ghidul pentru programator pentru CLOS. 1988, Addison-Wesley. ISBN 0-201-17589-4 .
- „ CommonLoops: îmbinarea Lisp și programarea orientată pe obiecte ”, de Daniel G. Bobrow, Kenneth Kahn, Gregor Kiczales, Larry Masinter, Mark Stefik, Frank Zdybel. 1986, Portland, Oregon, Statele Unite ale Americii. Paginile 17 - 29 ale Conferinței privind limbaje și aplicații ale sistemelor de programare orientată pe obiecte , ISSN 0362-1340.
- „O istorie și descriere a CLOS”, de Jim Veitch. Paginile 107-158 din Manualul limbajelor de programare, volumul IV: limbaje de programare funcționale și logice , ed. Peter H.Salus . 1998 (ediția I), Editura tehnică Macmillian; ISBN 1-57870-011-6