160:
its own metaobject protocol - its internal self-representation - but the potential destructiveness of some updates is non-trivial to predict and may be hard to reason about), depending on the recursive depth to which the desired modifications are propagated. For this reason, metaobject protocol, when
169:
When compilation is not available at run-time there are additional complications for the implementation of metaobject protocol. For example, it is possible to change the type hierarchy with such a protocol but doing so may cause problems for code compiled with an alternative class model definition.
125:"). Metaobject protocol, by contrast, transparently exposes the internal composition of objects and the entire object system in terms of the system itself. In practice, this means that programmers may use objects to redefine themselves, possibly in quite complex ways.
240:
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.
155:
Implementing object systems in such a way opens the possibility for radical discretionary redesign, providing deep flexibility but introducing possibly complex or difficult-to-understand metastability issues (for instance, the object system must not
178:
object-oriented model is more dynamic than most standard object systems, and is consistent with runtime metaobject protocols. For example, in the
Semantic Web model classes are expected to change their relations to each other and there is a special
31:
that manipulates, creates, describes, or implements objects (including itself). The object that the metaobject pertains to is called the base object. Some information that a metaobject might define includes the base object's
60:, where a system has access (usually at run time) to its own internal structure. Reflection enables a system to essentially rewrite itself on the fly, to alter its own implementation as it executes.
161:
present in a language, is usually used sparingly and for specialised purposes such as software that transforms other software or itself in sophisticated ways, for example in reverse engineering.
567:
631:
864:
1235:
869:
211:; this raises additional complexity in issues such as resolving the lineage of the class hierarchy on some object instance. CLOS also allows for
152:
of the object system) is determined, with the protocol as such being the recursive functional relationship between these implementation levels.
859:
854:
73:
433:
616:
Johnson, Lewis; David R. Harris; Kevin M. Benner; Martin S. Feather (October 1992). "Aries: The
Requirements/Specification Facet for KBSA".
842:
743:
170:
Some environments have found innovative solutions for this, e.g., by handling metaobject issues at compile time. A good example of this is
1286:
600:
543:
470:
328:
229:
526:
Daniel P. Friedman; Mitchell Wand (1988). "The mystery of the tower revealed: A non-reflective description of the reflective tower".
207:'s original studies on 3-Lisp as an infinite tower of evaluators. The CLOS model, unlike the Smalltalk model, allows a class to have
129:
57:
76:) to access and manipulate the structure and behaviour of systems of objects. Typical functions of a metaobject protocol include:
993:
1110:
915:
847:
809:
701:
381:
696:
307:
1010:
940:
788:
37:
1265:
716:
261:
245:
642:
227:. The most influential book describing the semantics and implementation of the metaobject protocol in Common Lisp is
416:
Favre, Lilliana; Liliana
Martinez; Claudia Pereira (2009). "MDA-Based Reverse Engineering of Object Oriented Code".
1020:
888:
1198:
1150:
1062:
1040:
1035:
963:
829:
301:
253:
200:
157:
45:
28:
1072:
736:
41:
455:
Proceedings of the tenth annual conference on Object-oriented programming systems, languages, and applications
171:
1225:
1140:
968:
824:
783:
778:
958:
933:
145:
98:
49:
252:, have since moved on to be the primary advocates for aspect-oriented programming. Kiczales et al. of
760:
208:
204:
133:
1230:
1208:
1135:
988:
980:
900:
729:
1213:
1193:
1145:
1120:
905:
874:
549:
476:
450:
273:
1100:
1030:
1005:
819:
814:
596:
539:
466:
429:
420:. Lecture Notes in Business Information Processing. Vol. 29. Springer. pp. 251–263.
377:
286:
216:
212:
149:
1245:
1130:
928:
531:
458:
421:
367:
180:
132:
to an "underlying" implementation; rather, through metaobject protocol the object system is
20:
336:
1250:
1115:
1067:
1000:
249:
234:
224:
220:
364:
Conference proceedings on Object-oriented programming systems, languages and applications
1203:
1025:
1015:
923:
94:
1280:
1125:
1082:
1057:
553:
528:
Proceedings of the 1986 ACM conference on LISP and functional programming - LFP '86
502:
480:
291:
175:
425:
1260:
1255:
1105:
1052:
879:
33:
117:
an object by redefining it, proposing that the former is a desirable quality ("
1165:
1160:
1077:
950:
893:
196:
86:
Cause a class to inherit from a different class ("change the class structure")
53:
501:
Knublauch, Holger; Oberle, Daniel; Tetlow, Phil; Wallace, Evan (2006-03-09).
203:(CLOS) came later and was influenced by the Smalltalk protocol as well as by
1240:
1218:
1175:
1170:
837:
793:
752:
278:
192:
183:
known as a classifier that can validate and analyze evolving class models.
535:
462:
359:
1155:
296:
123:
objects should provide a stable interface not subject to summary revision
119:
objects should be extensible to meet the requirements of future use cases
16:
Object that manipulates, creates, describes, and implements other objects
372:
140:-object system, which itself is theoretically implemented in terms of a
257:
706:
591:
Kiczales, Gregor; Jim des
Rivieres; Daniel G. Bobrow (July 30, 1991).
56:, etc. Metaobjects are examples of the computer science concept of
264:, a language which does not possess a native metaobject protocol.
773:
725:
503:"A Semantic Web Primer for Object-Oriented Software Developers"
768:
506:
721:
418:
Enterprise, Business-Process and
Information Systems Modeling
89:
Generate or change the code defining the methods of a class
667:
109:. This principle effectively draws a distinction between
568:"Integrating Object-Oriented and Functional Programming"
697:
The Guile MOP specification (GOOPS, based on Tiny CLOS)
101:, which holds that software object systems should be
1184:
1093:
979:
949:
914:
802:
759:
195:object-oriented programming language developed at
128:Furthermore, metaobject protocol is not merely an
144:-metaobject system, and so on until an arbitrary
358:Foote, Brian; Ralph Johnson (1–6 October 1989).
329:"Procedural Reflection In Programming Languages"
248:. Many of the early founders of MOPs, including
244:A metaobject protocol is one way to implement
737:
707:Common Lisp Object System Metaobject Protocol
8:
744:
730:
722:
371:
191:The first metaobject protocol was in the
702:Metaobjects and the Metaobject Protocol
360:"Reflective facilities in Smalltalk-80"
319:
641:. Metaware White Paper. Archived from
618:Rome Laboratory Final Technical Report
406:, Appendix C — Living with Circularity
121:"), while the latter is undesirable ("
7:
287:Joose JavaScript meta object system
93:Metaobject protocol is contrary to
711:The Art of the Metaobject Protocol
593:The Art of the Metaobject Protocol
404:The Art of the Metaobject Protocol
230:The Art of the Metaobject Protocol
14:
335:(MIT-LCS-TR-272). Archived from
451:"A metaobject protocol for C++"
113:an object by adding to it, and
83:Create a new property or method
72:(MOP) provides the vocabulary (
1:
810:Arbitrary-precision or bignum
327:Smith, Brian C (1982-01-01).
292:Moose Perl meta object system
709:(contains two chapters from
426:10.1007/978-3-642-01862-6_21
213:dynamic multimethod dispatch
80:Create or delete a new class
668:"OMG's MetaObject Facility"
246:aspect-oriented programming
1303:
717:Python 2.6 Metaprogramming
1287:Object (computer science)
1151:Strongly typed identifier
674:. Object Management Group
302:Unified Modeling Language
201:Common Lisp Object System
209:more than one superclass
165:Runtime and compile time
1226:Parametric polymorphism
449:Chiba, Shigeru (1995).
215:, which is handled via
134:recursively implemented
107:closed for modification
632:"The Origin of Refine"
536:10.1145/319838.319871
463:10.1145/217838.217868
256:were hired to design
99:open/closed principle
530:. pp. 298–307.
457:. pp. 285–299.
366:. pp. 327–335.
333:MIT Technical Report
223:like in Smalltalk's
158:destructively update
1231:Primitive data type
1136:Recursive data type
989:Algebraic data type
865:Quadruple precision
373:10.1145/74877.74911
339:on 13 December 2015
70:metaobject protocol
64:Metaobject protocol
1194:Abstract data type
875:Extended precision
834:Reduced precision
274:Kind (type theory)
103:open for extension
1274:
1273:
1006:Associative array
870:Octuple precision
648:on 7 January 2014
595:. The MIT Press.
435:978-3-642-01861-9
217:generic functions
1294:
1246:Type constructor
1131:Opaque data type
1063:Record or Struct
860:Double precision
855:Single precision
746:
739:
732:
723:
684:
683:
681:
679:
664:
658:
657:
655:
653:
647:
636:
628:
622:
621:
613:
607:
606:
588:
582:
581:
579:
577:
572:
564:
558:
557:
523:
517:
516:
514:
513:
498:
492:
491:
489:
487:
446:
440:
439:
413:
407:
401:
395:
394:
392:
390:
375:
355:
349:
348:
346:
344:
324:
181:inference engine
21:computer science
1302:
1301:
1297:
1296:
1295:
1293:
1292:
1291:
1277:
1276:
1275:
1270:
1251:Type conversion
1186:
1180:
1116:Enumerated type
1089:
975:
969:null-terminated
945:
910:
798:
755:
750:
693:
688:
687:
677:
675:
666:
665:
661:
651:
649:
645:
639:www.metaware.fr
634:
630:
629:
625:
620:. RL-TR-92-248.
615:
614:
610:
603:
590:
589:
585:
575:
573:
570:
566:
565:
561:
546:
525:
524:
520:
511:
509:
500:
499:
495:
485:
483:
473:
448:
447:
443:
436:
415:
414:
410:
402:
398:
388:
386:
384:
357:
356:
352:
342:
340:
326:
325:
321:
316:
270:
250:Gregor Kiczales
235:Gregor Kiczales
225:single dispatch
221:message passing
189:
167:
66:
17:
12:
11:
5:
1300:
1298:
1290:
1289:
1279:
1278:
1272:
1271:
1269:
1268:
1263:
1258:
1253:
1248:
1243:
1238:
1233:
1228:
1223:
1222:
1221:
1211:
1206:
1204:Data structure
1201:
1196:
1190:
1188:
1182:
1181:
1179:
1178:
1173:
1168:
1163:
1158:
1153:
1148:
1143:
1138:
1133:
1128:
1123:
1118:
1113:
1108:
1103:
1097:
1095:
1091:
1090:
1088:
1087:
1086:
1085:
1075:
1070:
1065:
1060:
1055:
1050:
1049:
1048:
1038:
1033:
1028:
1023:
1018:
1013:
1008:
1003:
998:
997:
996:
985:
983:
977:
976:
974:
973:
972:
971:
961:
955:
953:
947:
946:
944:
943:
938:
937:
936:
931:
920:
918:
912:
911:
909:
908:
903:
898:
897:
896:
886:
885:
884:
883:
882:
872:
867:
862:
857:
852:
851:
850:
845:
843:Half precision
840:
830:Floating point
827:
822:
817:
812:
806:
804:
800:
799:
797:
796:
791:
786:
781:
776:
771:
765:
763:
757:
756:
751:
749:
748:
741:
734:
726:
720:
719:
714:
704:
699:
692:
691:External links
689:
686:
685:
659:
623:
608:
602:978-0262610742
601:
583:
559:
545:978-0897912006
544:
518:
493:
472:978-0897917032
471:
441:
434:
408:
396:
382:
350:
318:
317:
315:
312:
311:
310:
305:
299:
294:
289:
284:
281:
276:
269:
266:
205:Brian C. Smith
188:
185:
166:
163:
148:(a consistent
136:in terms of a
95:Bertrand Meyer
91:
90:
87:
84:
81:
65:
62:
15:
13:
10:
9:
6:
4:
3:
2:
1299:
1288:
1285:
1284:
1282:
1267:
1264:
1262:
1259:
1257:
1254:
1252:
1249:
1247:
1244:
1242:
1239:
1237:
1234:
1232:
1229:
1227:
1224:
1220:
1217:
1216:
1215:
1212:
1210:
1207:
1205:
1202:
1200:
1197:
1195:
1192:
1191:
1189:
1183:
1177:
1174:
1172:
1169:
1167:
1164:
1162:
1159:
1157:
1154:
1152:
1149:
1147:
1144:
1142:
1139:
1137:
1134:
1132:
1129:
1127:
1126:Function type
1124:
1122:
1119:
1117:
1114:
1112:
1109:
1107:
1104:
1102:
1099:
1098:
1096:
1092:
1084:
1081:
1080:
1079:
1076:
1074:
1071:
1069:
1066:
1064:
1061:
1059:
1056:
1054:
1051:
1047:
1044:
1043:
1042:
1039:
1037:
1034:
1032:
1029:
1027:
1024:
1022:
1019:
1017:
1014:
1012:
1009:
1007:
1004:
1002:
999:
995:
992:
991:
990:
987:
986:
984:
982:
978:
970:
967:
966:
965:
962:
960:
957:
956:
954:
952:
948:
942:
939:
935:
932:
930:
927:
926:
925:
922:
921:
919:
917:
913:
907:
904:
902:
899:
895:
892:
891:
890:
887:
881:
878:
877:
876:
873:
871:
868:
866:
863:
861:
858:
856:
853:
849:
846:
844:
841:
839:
836:
835:
833:
832:
831:
828:
826:
823:
821:
818:
816:
813:
811:
808:
807:
805:
801:
795:
792:
790:
787:
785:
782:
780:
777:
775:
772:
770:
767:
766:
764:
762:
761:Uninterpreted
758:
754:
747:
742:
740:
735:
733:
728:
727:
724:
718:
715:
712:
708:
705:
703:
700:
698:
695:
694:
690:
673:
669:
663:
660:
644:
640:
633:
627:
624:
619:
612:
609:
604:
598:
594:
587:
584:
569:
563:
560:
555:
551:
547:
541:
537:
533:
529:
522:
519:
508:
504:
497:
494:
482:
478:
474:
468:
464:
460:
456:
452:
445:
442:
437:
431:
427:
423:
419:
412:
409:
405:
400:
397:
385:
379:
374:
369:
365:
361:
354:
351:
338:
334:
330:
323:
320:
313:
309:
306:
303:
300:
298:
295:
293:
290:
288:
285:
282:
280:
277:
275:
272:
271:
267:
265:
263:
259:
255:
251:
247:
242:
238:
236:
232:
231:
226:
222:
218:
214:
210:
206:
202:
198:
194:
186:
184:
182:
177:
173:
164:
162:
159:
153:
151:
147:
143:
139:
135:
131:
126:
124:
120:
116:
112:
108:
104:
100:
96:
88:
85:
82:
79:
78:
77:
75:
71:
63:
61:
59:
55:
51:
47:
43:
39:
35:
30:
26:
22:
1045:
1031:Intersection
710:
676:. Retrieved
671:
662:
650:. Retrieved
643:the original
638:
626:
617:
611:
592:
586:
574:. Retrieved
562:
527:
521:
510:. Retrieved
496:
484:. Retrieved
454:
444:
417:
411:
403:
399:
387:. Retrieved
363:
353:
341:. Retrieved
337:the original
332:
322:
243:
239:
228:
219:rather than
190:
176:Semantic Web
168:
154:
141:
137:
127:
122:
118:
114:
110:
106:
102:
92:
69:
67:
24:
18:
1261:Type theory
1256:Type system
1106:Bottom type
1053:Option type
994:generalized
880:Long double
825:Fixed point
486:27 December
389:16 December
343:16 December
1166:Empty type
1161:Type class
1111:Collection
1068:Refinement
1046:metaobject
894:signedness
753:Data types
512:2008-07-30
383:0897913337
314:References
197:Xerox PARC
58:reflection
54:parse tree
50:attributes
25:metaobject
1241:Subtyping
1236:Interface
1219:metaclass
1171:Unit type
1141:Semaphore
1121:Exception
1026:Inductive
1016:Dependent
981:Composite
959:Character
941:Reference
838:Minifloat
794:Bit array
678:7 January
652:6 January
283:Javassist
279:Metaclass
193:Smalltalk
146:base case
130:interface
115:modifying
111:extending
38:interface
1281:Category
1266:Variable
1156:Top type
1021:Equality
929:physical
906:Rational
901:Interval
848:bfloat16
297:OpenJava
268:See also
74:protocol
1209:Generic
1185:Related
1101:Boolean
1058:Product
934:virtual
924:Address
916:Pointer
889:Integer
820:Decimal
815:Complex
803:Numeric
672:omg.org
554:7974739
481:3090058
258:AspectJ
237:et al.
172:OpenC++
46:methods
1199:Boxing
1187:topics
1146:Stream
1083:tagged
1041:Object
964:String
599:
576:7 July
552:
542:
479:
469:
432:
380:
308:Groovy
199:. The
174:. The
29:object
27:is an
1094:Other
1078:Union
1011:Class
1001:Array
784:Tryte
646:(PDF)
635:(PDF)
571:(PDF)
550:S2CID
477:S2CID
304:: UML
187:Usage
150:state
42:class
1214:Kind
1176:Void
1036:List
951:Text
789:Word
779:Trit
774:Byte
680:2014
654:2014
597:ISBN
578:2016
540:ISBN
488:2013
467:ISBN
430:ISBN
391:2013
378:ISBN
345:2013
262:Java
260:for
254:PARC
142:meta
138:meta
105:but
34:type
23:, a
1073:Set
769:Bit
532:doi
507:W3C
459:doi
422:doi
368:doi
233:by
97:'s
19:In
1283::
670:.
637:.
548:.
538:.
505:.
475:.
465:.
453:.
428:.
376:.
362:.
331:.
68:A
52:,
48:,
44:,
40:,
36:,
745:e
738:t
731:v
713:)
682:.
656:.
605:.
580:.
556:.
534::
515:.
490:.
461::
438:.
424::
393:.
370::
347:.
Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.