metaclasses in 7 steps
DESCRIPTION
Metaclasses in 7 Steps. Classes are objects too... Classes are instances of other classes ... One model applied twice. Metaclasses in 7 points. Every object is an instance of a class Every class eventually inherits from Object Every class is an instance of a metaclass - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Metaclasses in 7 Steps](https://reader036.vdocuments.net/reader036/viewer/2022081508/56813e7a550346895da89f74/html5/thumbnails/1.jpg)
S.Ducasse 1
Metaclasses in 7 StepsClasses are objects too...Classes are instances of other classes...One model applied twice
![Page 2: Metaclasses in 7 Steps](https://reader036.vdocuments.net/reader036/viewer/2022081508/56813e7a550346895da89f74/html5/thumbnails/2.jpg)
S.Ducasse 2
Metaclasses in 7 points
Every object is an instance of a classEvery class eventually inherits from ObjectEvery class is an instance of a metaclassThe metaclass hierarchy parallels the class
hierarchyEvery metaclass inherits from Class and
BehaviorEvery metaclass is an instance of MetaclassThe metaclass of Metaclass is an instance
of Metaclass
Adapted from Goldberg & Robson, Smalltalk-80 — The Language
![Page 3: Metaclasses in 7 Steps](https://reader036.vdocuments.net/reader036/viewer/2022081508/56813e7a550346895da89f74/html5/thumbnails/3.jpg)
S.Ducasse 3
Metaclasses in 7 points
Every object is an instance of a classEvery class eventually inherits from ObjectEvery class is an instance of a metaclassThe metaclass hierarchy parallels the class
hierarchyEvery metaclass inherits from Class and
BehaviorEvery metaclass is an instance of MetaclassThe metaclass of Metaclass is an instance
of Metaclass
![Page 4: Metaclasses in 7 Steps](https://reader036.vdocuments.net/reader036/viewer/2022081508/56813e7a550346895da89f74/html5/thumbnails/4.jpg)
S.Ducasse 4
1. Every object is an instance of a class
![Page 5: Metaclasses in 7 Steps](https://reader036.vdocuments.net/reader036/viewer/2022081508/56813e7a550346895da89f74/html5/thumbnails/5.jpg)
S.Ducasse 5
Metaclasses in 7 points
Every object is an instance of a classEvery class eventually inherits from ObjectEvery class is an instance of a metaclassThe metaclass hierarchy parallels the class
hierarchyEvery metaclass inherits from Class and
BehaviorEvery metaclass is an instance of MetaclassThe metaclass of Metaclass is an instance of
Metaclass
![Page 6: Metaclasses in 7 Steps](https://reader036.vdocuments.net/reader036/viewer/2022081508/56813e7a550346895da89f74/html5/thumbnails/6.jpg)
S.Ducasse 6
2. Every class inherits from Object
Every object is-an Object The class of every object ultimately inherits from Object
![Page 7: Metaclasses in 7 Steps](https://reader036.vdocuments.net/reader036/viewer/2022081508/56813e7a550346895da89f74/html5/thumbnails/7.jpg)
S.Ducasse 7
The Meaning of is-a
When an object receives a message, the method is looked up in the method dictionary of its class, and, if necessary, its superclasses, up to Object
![Page 8: Metaclasses in 7 Steps](https://reader036.vdocuments.net/reader036/viewer/2022081508/56813e7a550346895da89f74/html5/thumbnails/8.jpg)
S.Ducasse 8
Responsibilities of Object
Objectrepresents the common object behaviorerror-handling, halting …all classes should inherit ultimately from Object
![Page 9: Metaclasses in 7 Steps](https://reader036.vdocuments.net/reader036/viewer/2022081508/56813e7a550346895da89f74/html5/thumbnails/9.jpg)
S.Ducasse 9
Metaclasses in 7 points
Every object is an instance of a classEvery class eventually inherits from ObjectEvery class is an instance of a metaclassThe metaclass hierarchy parallels the class
hierarchyEvery metaclass inherits from Class and
BehaviorEvery metaclass is an instance of MetaclassThe metaclass of Metaclass is an instance of
Metaclass
![Page 10: Metaclasses in 7 Steps](https://reader036.vdocuments.net/reader036/viewer/2022081508/56813e7a550346895da89f74/html5/thumbnails/10.jpg)
S.Ducasse 10
3. Every class is an instance of a metaclass
Classes are objects too!Every class X is the unique instance of its metaclass, called X class
![Page 11: Metaclasses in 7 Steps](https://reader036.vdocuments.net/reader036/viewer/2022081508/56813e7a550346895da89f74/html5/thumbnails/11.jpg)
S.Ducasse 11
Metaclasses are implicit
There are no explicit metaclassesMetaclasses are created implicitly when classes are createdNo sharing of metaclasses (unique metaclass per class)
![Page 12: Metaclasses in 7 Steps](https://reader036.vdocuments.net/reader036/viewer/2022081508/56813e7a550346895da89f74/html5/thumbnails/12.jpg)
S.Ducasse 12
Metaclasses by Example
Square allSubclassesSquare allSubclassesSnake allSubclassesSnake allSubclasses
Snake allInstancesSnake allInstancesSnake instVarNamesSnake instVarNames
Snake back: 5Snake back: 5
Snake selectorsSnake selectors
Snake canUnderstand: #newSnake canUnderstand: #newSnake canUnderstand: #setBack:Snake canUnderstand: #setBack:
![Page 13: Metaclasses in 7 Steps](https://reader036.vdocuments.net/reader036/viewer/2022081508/56813e7a550346895da89f74/html5/thumbnails/13.jpg)
S.Ducasse 13
Metaclasses in 7 points
Every object is an instance of a classEvery class eventually inherits from ObjectEvery class is an instance of a metaclassThe metaclass hierarchy parallels the class
hierarchyEvery metaclass inherits from Class and
BehaviorEvery metaclass is an instance of MetaclassThe metaclass of Metaclass is an instance of
Metaclass
![Page 14: Metaclasses in 7 Steps](https://reader036.vdocuments.net/reader036/viewer/2022081508/56813e7a550346895da89f74/html5/thumbnails/14.jpg)
S.Ducasse 14
4. The metaclass hierarchy parallels the class hierarchy
![Page 15: Metaclasses in 7 Steps](https://reader036.vdocuments.net/reader036/viewer/2022081508/56813e7a550346895da89f74/html5/thumbnails/15.jpg)
S.Ducasse 15
Uniformity between Classes and Objects
Classes are objects too, so …Everything that holds for objects holds for classes as wellSame method lookup strategyLook up in the method dictionary of the metaclass
![Page 16: Metaclasses in 7 Steps](https://reader036.vdocuments.net/reader036/viewer/2022081508/56813e7a550346895da89f74/html5/thumbnails/16.jpg)
S.Ducasse 16
About the Buttons
![Page 17: Metaclasses in 7 Steps](https://reader036.vdocuments.net/reader036/viewer/2022081508/56813e7a550346895da89f74/html5/thumbnails/17.jpg)
S.Ducasse 17
Metaclasses in 7 points
Every object is an instance of a classEvery class eventually inherits from ObjectEvery class is an instance of a metaclassThe metaclass hierarchy parallels the class
hierarchyEvery metaclass inherits from Class and
BehaviorEvery metaclass is an instance of MetaclassThe metaclass of Metaclass is an instance
of Metaclass
![Page 18: Metaclasses in 7 Steps](https://reader036.vdocuments.net/reader036/viewer/2022081508/56813e7a550346895da89f74/html5/thumbnails/18.jpg)
S.Ducasse 18
5. Every metaclass inherits from Class and Behavior
18
Every class is-a Class =The metaclass of every class inherits from Class
![Page 19: Metaclasses in 7 Steps](https://reader036.vdocuments.net/reader036/viewer/2022081508/56813e7a550346895da89f74/html5/thumbnails/19.jpg)
S.Ducasse 19
Where is new defined?
![Page 20: Metaclasses in 7 Steps](https://reader036.vdocuments.net/reader036/viewer/2022081508/56813e7a550346895da89f74/html5/thumbnails/20.jpg)
S.Ducasse 20
Responsibilities of Behavior
BehaviorMinimum state necessary for objects that have instances. Basic interface to the compiler.State:class hierarchy link, method dictionary, description of instances (representation and number) Methods: creating a method dictionary, compiling methodinstance creation (new, basicNew, new:, basicNew:)class hierarchy manipulation (superclass:, addSubclass:)accessing (selectors, allSelectors, compiledMethodAt: )accessing instances and variables (allInstances, instVarNames)accessing class hierarchy (superclass, subclasses)testing (hasMethods, includesSelector, canUnderstand:, inheritsFrom:, isVariable)
![Page 21: Metaclasses in 7 Steps](https://reader036.vdocuments.net/reader036/viewer/2022081508/56813e7a550346895da89f74/html5/thumbnails/21.jpg)
S.Ducasse 21
Responsibilities of ClassDescription
ClassDescriptionadds a number of facilities to basic Behavior:named instance variablescategory organization for methodsthe notion of a name (abstract)maintenance of Change sets and logging changesmost of the mechanisms needed for fileOutClassDescription is an abstract class: its facilities are intended for inheritance by the two subclasses, Class and Metaclass.
![Page 22: Metaclasses in 7 Steps](https://reader036.vdocuments.net/reader036/viewer/2022081508/56813e7a550346895da89f74/html5/thumbnails/22.jpg)
S.Ducasse 22
Responsibilities of Class
Classrepresents the common behavior of all classesname, compilation, method storing, instance variables …representation for classVariable names and shared pool variables (addClassVarName:, addSharedPool:, initialize) Class inherits from Object because Class is an ObjectClass knows how to create instances, so all metaclasses should inherit ultimately from Class
![Page 23: Metaclasses in 7 Steps](https://reader036.vdocuments.net/reader036/viewer/2022081508/56813e7a550346895da89f74/html5/thumbnails/23.jpg)
S.Ducasse 23
Metaclasses in 7 points
Every object is an instance of a classEvery class eventually inherits from ObjectEvery class is an instance of a metaclassThe metaclass hierarchy parallels the class
hierarchyEvery metaclass inherits from Class and
BehaviorEvery metaclass is an instance of MetaclassThe metaclass of Metaclass is an instance of
Metaclass
![Page 24: Metaclasses in 7 Steps](https://reader036.vdocuments.net/reader036/viewer/2022081508/56813e7a550346895da89f74/html5/thumbnails/24.jpg)
S.Ducasse 24
6. Every metaclass is an instance of Metaclass
![Page 25: Metaclasses in 7 Steps](https://reader036.vdocuments.net/reader036/viewer/2022081508/56813e7a550346895da89f74/html5/thumbnails/25.jpg)
S.Ducasse 25
Metaclass Responsibilities
MetaclassRepresents common metaclass Behaviorinstance creation (subclassOf:)creating initialized instances of the metaclass’s sole instanceinitialization of class variablesmetaclass instance protocol (name:inEnvironment:subclassOf:....)method compilation (different semantics can be introduced)class information (inheritance link, instance variable, ...)
![Page 26: Metaclasses in 7 Steps](https://reader036.vdocuments.net/reader036/viewer/2022081508/56813e7a550346895da89f74/html5/thumbnails/26.jpg)
S.Ducasse 26
Metaclasses in 7 points
Every object is an instance of a classEvery class eventually inherits from ObjectEvery class is an instance of a metaclassThe metaclass hierarchy parallels the class
hierarchyEvery metaclass inherits from Class and
BehaviorEvery metaclass is an instance of MetaclassThe metaclass of Metaclass is an instance of
Metaclass
![Page 27: Metaclasses in 7 Steps](https://reader036.vdocuments.net/reader036/viewer/2022081508/56813e7a550346895da89f74/html5/thumbnails/27.jpg)
S.Ducasse 27
7. The metaclass of Metaclass is an instance of Metaclass
![Page 28: Metaclasses in 7 Steps](https://reader036.vdocuments.net/reader036/viewer/2022081508/56813e7a550346895da89f74/html5/thumbnails/28.jpg)
S.Ducasse 28
Navigating the metaclass hierarchy
MetaclassHierarchyTest>>testHierarchyMetaclassHierarchyTest>>testHierarchy"The class hierarchy""The class hierarchy"self assert: Snake superclass = Square.self assert: Snake superclass = Square.self assert: Square superclass = Object.self assert: Square superclass = Object.self assert: Object superclass superclass = nil. "skip ProtoObject"self assert: Object superclass superclass = nil. "skip ProtoObject""The parallel metaclass hierarchy""The parallel metaclass hierarchy"self assert: Snake class name = 'Snake class'.self assert: Snake class name = 'Snake class'.self assert: Snake class superclass = Square class.self assert: Snake class superclass = Square class.self assert: Square class superclass = Object class.self assert: Square class superclass = Object class.self assert: Object class superclass superclass = Class.self assert: Object class superclass superclass = Class.self assert: Class superclass = ClassDescription.self assert: Class superclass = ClassDescription.self assert: ClassDescription superclass = Behavior.self assert: ClassDescription superclass = Behavior.self assert: Behavior superclass = Object.self assert: Behavior superclass = Object."The Metaclass hierarchy""The Metaclass hierarchy"self assert: Snake class class = Metaclass.self assert: Snake class class = Metaclass.self assert: Square class class = Metaclass.self assert: Square class class = Metaclass.self assert: Object class class = Metaclass.self assert: Object class class = Metaclass.self assert: Class class class = Metaclass.self assert: Class class class = Metaclass.self assert: ClassDescription class class = Metaclass.self assert: ClassDescription class class = Metaclass.self assert: Behavior class class = Metaclass.self assert: Behavior class class = Metaclass.self assert: Metaclass superclass = ClassDescription.self assert: Metaclass superclass = ClassDescription."The fixpoint""The fixpoint"self assert: Metaclass class class = Metaclass.self assert: Metaclass class class = Metaclass.