stoop 400 o-metaclassonly

28
S.Ducasse 1 Metaclasses in 7 Steps Classes are objects too... Classes are instances of other classes ... One model applied twice

Upload: the-world-of-smalltalk

Post on 09-May-2015

467 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Stoop 400 o-metaclassonly

S.Ducasse 1

Metaclasses in 7 StepsClasses are objects too...Classes are instances of other classes...One model applied twice

Page 2: Stoop 400 o-metaclassonly

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: Stoop 400 o-metaclassonly

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: Stoop 400 o-metaclassonly

S.Ducasse 4

1. Every object is an instance of a class

Page 5: Stoop 400 o-metaclassonly

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: Stoop 400 o-metaclassonly

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: Stoop 400 o-metaclassonly

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: Stoop 400 o-metaclassonly

S.Ducasse 8

Responsibilities of Object

Objectrepresents the common object behaviorerror-handling, halting …all classes should inherit ultimately from Object

Page 9: Stoop 400 o-metaclassonly

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: Stoop 400 o-metaclassonly

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: Stoop 400 o-metaclassonly

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: Stoop 400 o-metaclassonly

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: Stoop 400 o-metaclassonly

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: Stoop 400 o-metaclassonly

S.Ducasse 14

4. The metaclass hierarchy parallels the class hierarchy

Page 15: Stoop 400 o-metaclassonly

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: Stoop 400 o-metaclassonly

S.Ducasse 16

About the Buttons

Page 17: Stoop 400 o-metaclassonly

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: Stoop 400 o-metaclassonly

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: Stoop 400 o-metaclassonly

S.Ducasse 19

Where is new defined?

Page 20: Stoop 400 o-metaclassonly

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: Stoop 400 o-metaclassonly

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: Stoop 400 o-metaclassonly

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: Stoop 400 o-metaclassonly

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: Stoop 400 o-metaclassonly

S.Ducasse 24

6. Every metaclass is an instance of Metaclass

Page 25: Stoop 400 o-metaclassonly

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: Stoop 400 o-metaclassonly

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: Stoop 400 o-metaclassonly

S.Ducasse 27

7. The metaclass of Metaclass is an instance of Metaclass

Page 28: Stoop 400 o-metaclassonly

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.