Knowledge (XXG)

Metaobject

Source 📝

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

Index

Metaobject protocol
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

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