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