Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Metaobject
(section)
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
=== Usage === The first metaobject protocol was in the [[Smalltalk]] object-oriented programming language developed at [[Xerox PARC]]. The [[Common Lisp Object System]] (CLOS) came later and was influenced by the Smalltalk protocol as well as by [[Brian Cantwell Smith|Brian C. Smith]]'s original studies on 3-Lisp as an infinite tower of evaluators.<ref>{{cite book |pages=298β307 |author1=Daniel P. Friedman |author2=Mitchell Wand |title=Proceedings of the 1986 ACM conference on LISP and functional programming - LFP '86 |chapter=The mystery of the tower revealed: A non-reflective description of the reflective tower |date=1988 |doi=10.1145/319838.319871 |isbn=978-0897912006 |s2cid=7974739 }}</ref> The CLOS model, unlike the Smalltalk model, allows a class to have [[Multiple inheritance|more than one superclass]]; this raises additional complexity in issues such as resolving the lineage of the class hierarchy on some object instance. CLOS also allows for [[multiple dispatch|dynamic multimethod dispatch]], which is handled via [[generic functions]] rather than [[message passing]] like in Smalltalk's [[single dispatch]].<ref>{{cite web|title=Integrating Object-Oriented and Functional Programming|url=https://www.cip.ifi.lmu.de/~langeh/test/2004%20-%20Gabriel%20-%20CLOS%20-%20Integrating%20Object-Oriented%20and%20Functional%20Programming.pdf|access-date=7 July 2016}}</ref> The most influential book describing the semantics and implementation of the metaobject protocol in Common Lisp is ''[[The Art of the Metaobject Protocol]]'' by [[Gregor Kiczales]] et al.<ref>{{cite book|last=Kiczales|first=Gregor|title=The Art of the Metaobject Protocol|publisher=The MIT Press|isbn=978-0262610742|author2=Jim des Rivieres |author3=Daniel G. Bobrow |date=July 30, 1991}}</ref> Metaobject protocols are also extensively used in software engineering applications. In virtually all commercial CASE, re-engineering, and Integrated Development Environments there is some form of metaobject protocol to represent and manipulate the design artifacts.<ref>{{cite journal|last=Johnson|first=Lewis|author2=David R. Harris |author3=Kevin M. Benner |author4=Martin S. Feather |title=Aries: The Requirements/Specification Facet for KBSA|journal=Rome Laboratory Final Technical Report|date=October 1992|volume=RL-TR-92-248}}</ref><ref>{{cite web|title=The Origin of Refine|url=http://www.metaware.fr/images/pdf/1_Metaware_The_Origin%20of_Refine_Whitepaper.pdf|work=www.metaware.fr|publisher=Metaware White Paper|access-date=6 January 2014|url-status=dead|archive-url=https://web.archive.org/web/20140107000613/http://www.metaware.fr/images/pdf/1_Metaware_The_Origin%20of_Refine_Whitepaper.pdf|archive-date=7 January 2014}}</ref><ref>{{cite web|title=OMG's MetaObject Facility|url=http://www.omg.org/mof/|work=omg.org|publisher=Object Management Group|access-date=7 January 2014}}</ref> A metaobject protocol is one way to implement [[aspect-oriented programming]]. Many of the early founders of MOPs, including [[Gregor Kiczales]], have since moved on to be the primary advocates for aspect-oriented programming. Kiczales et al. of [[Palo Alto Research Center|PARC]] were hired to design [[AspectJ]] for [[Java (programming language)|Java]], a language which does not possess a native metaobject protocol.
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)