Knowledge (XXG)

Metaobject

Source 📝

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:.

Index

computer science
object
type
interface
class
methods
attributes
parse tree
reflection
protocol
Bertrand Meyer
open/closed principle
interface
recursively implemented
base case
state
destructively update
OpenC++
Semantic Web
inference engine
Smalltalk
Xerox PARC
Common Lisp Object System
Brian C. Smith
more than one superclass
dynamic multimethod dispatch
generic functions
message passing
single dispatch
The Art of the Metaobject Protocol

Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.