S.Ducasse 1 7. Understanding Metaclasses. S.Ducasse 2 Roadmap Metaclasses in 7 points Indexed Classes Class Instance Variables Class Variables Pool Dictionaries.

Slides:



Advertisements
Similar presentations
Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz.
Advertisements

Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz.
From Objects to Actors Study of a Limited Symbiosis in Smalltalk-80.
S.Ducasse 1 Metaclasses in 7 Steps Classes are objects too... Classes are instances of other classes... One model applied twice.
Inheritance Inheritance Reserved word protected Reserved word super
Stéphane Ducasse«ChapterNr».1 Selected Design Patterns Design Patterns are recurrent solutions to design problems They are pros and cons We already saw:
Principles of Object-Oriented Software Development The language Smalltalk.
2. Smalltalk Basics. © Oscar Nierstrasz ST — Smalltalk Basics 2.2 Roadmap  Everything is an Object  Syntax on a Postcard  Three Kinds of Messages 
4. Smalltalk Coding Idioms. © Oscar Nierstrasz ST — Smalltalk Coding Idioms 4.2 Roadmap  Snakes and Ladders — Cascade and Yourself  Lots of Little Methods.
Stéphane Ducasse«ChapterNr».1 Arthur Riel Design Heuristics from Object-Oriented Design Heuristics by Arthur Riel Read the Heuristics… –Find reasons why.
7. Understanding Classes and Metaclasses. © Oscar Nierstrasz ST — Understanding Classes and Metaclasses 7.2 Roadmap  Metaclasses in 7 points  Indexed.
Stéphane Ducasse9.1 Inheritance Semantics and Lookup.
Stéphane Ducasse 1 The Taste of Smalltalk.
Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz Summer Semester 2006.
13. Traits. Selected literature  Cook. Interfaces and Specifications for the Smalltalk-80 Collection Classes. OOPSLA 1992  Taivalsaari. On the Notion.
PZ06BX Programming Language design and Implementation -4th Edition Copyright©Prentice Hall, PZ06BX - Introduction to Smalltalk Programming Language.
2. Smalltalk Basics. © Oscar Nierstrasz ST — Smalltalk Basics 2.2 Roadmap  Everything is an Object  Syntax on a Postcard  Three Kinds of Messages 
Some Basic Points on Classes
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter N - 1 Chapter 13 Polymorphism is-a relationships Interfaces.
S.Ducasse Stéphane Ducasse 1 A Taste of Smalltalk.
1 Evan Korth New York University Inheritance and Polymorphism Professor Evan Korth New York University.
Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 2nd edition Tucker and Noonan Chapter 13 Object-Oriented Programming I am surprised.
10. Reflection. © Oscar Nierstrasz ST — Reflection 10.2 Roadmap  What is reflection?  Object meta-operations  Class meta-operations  Method meta-operations.
10. Reflection. Birds-eye view © Oscar Nierstrasz ST — Reflection 1.2 Reflection allows you to both examine and alter the meta-objects of a system. Using.
9. Understanding Classes and Metaclasses. Birds-eye view © Oscar Nierstrasz ST — Introduction 1.2 Reify your metamodel — A fully reflective system models.
1 Evan Korth New York University Inheritance and Polymorphism Professor Evan Korth New York University.
© Oscar Nierstrasz ST — xxx X.1 Class Methods - Class Instance Variables  Classes (Packet class) represents class (Packet).  Class instance variables.
10. Reflection. © Oscar Nierstrasz ST — Reflection 10.2 Roadmap  What is reflection?  Object meta-operations  Class meta-operations  Method meta-operations.
Object-oriented programming and design 1 Smalltalk in a Nutshell Objects & classes Messages & methods Inheritance & metaclasses.
Stéphane Ducasse«ChapterNr».1 Advanced Classes Indexed Classes Classes as Objects Class Instance Variables and Methods Class Variables Pool Dictionaries.
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter N - 1 Chapter 13 Polymorphism is-a relationships Interfaces.
Stéphane Ducasse5.1 Smalltalk in a Nutshell OO Model in a Nutshell Syntax in a Nutshell.
4. Smalltalk Coding Idioms. © Oscar Nierstrasz ST — Smalltalk Coding Idioms 4.2 Roadmap  Snakes and Ladders — Cascade and Yourself  Lots of Little Methods.
Stéphane Ducasse 1 Smalltalk in a Nutshell.
S.Ducasse Stéphane Ducasse 1 The Taste of Smalltalk.
CSE 331 Software Design & Implementation Hal Perkins Autumn 2012 Java Classes, Interfaces, and Types 1.
Tutorial: Squeak — An Open-Source Smalltalk Environment Oscar Nierstrasz scg.unibe.ch TOOLS Europe 2008 Zürich, July 1, 2008.
CS 403 – Programming Languages Class 25 November 28, 2000.
CS 598 Scripting Languages Design and Implementation 7. Smalltalk 80.
S.Ducasse Stéphane Ducasse 1 Classes and Metaclasses - an Analysis.
S.Ducasse Stéphane Ducasse 1 Design Heuristics.
S.Ducasse Stéphane Ducasse savoie.fr e/ e/ 1 Inheritance Semantics and Method Lookup.
Chapter 6 Introduction to Defining Classes. Objectives: Design and implement a simple class from user requirements. Organize a program in terms of a view.
Stéphane Ducasse 1 Singleton.
Object-Oriented Programming Chapter Chapter
(1) ICS 313: Programming Language Theory Chapter 12: Object Oriented Programming.
Design Patterns Software Engineering CS 561. Last Time Introduced design patterns Abstraction-Occurrence General Hierarchy Player-Role.
S.Ducasse Stéphane Ducasse 1 Essential OO Concepts Stéphane Ducasse.
Nathanael Schärli (SCG, University of Bern) and Andrew P. Black (CSE, Oregon Health & Science University) Nathanael Schärli (SCG, University of Bern) and.
Stéphane Ducasse 1 Some Advanced Points on Classes.
3C-1 Identifiers Variables Literal Objects  Numbers  Characters  Strings Control Structure  Blocks  Conditionals  Loops Messages Defining New Classes.
1 Advanced Object Oriented Systems (CM0318) Lecture 8 (Last updated 15th February 2002)
S.Ducasse Marcus Denker 1 Working with Bytecodes: IRBuilder and InstructionStream.
Stéphane Ducasse 1 Some Points on Classes.
S.Ducasse Stéphane Ducasse 1 Smalltalk in a Nutshell.
S.Ducasse Stéphane Ducasse savoie.fr e/ e/ 1 Smalltalk in a Nutshell.
CSE 3302 Programming Languages Chengkai Li Fall 2007 Smalltalk Lecture 14 – Smalltalk, Fall CSE3302 Programming Languages, UT-Arlington ©Chengkai.
Stéphane Ducasse 1 A Little Journey in the Smalltalk Syntax.
Stéphane Ducasse 1 Abstract Classes.
S.Ducasse Stéphane Ducasse 1 Some Advanced Points on Classes.
ISBN Chapter 12 Support for Object-Oriented Programming.
Administrative Issues Lecture 22 – Prolog (III), Fall 2007 CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, HW3 (due at March 18 th ) Essay.
1 Case Study: Meta Classes  Class representation in memory  Class variables and class methods  Meta Classes  3 Level System  4 Level System  5 Level.
Smalltalk Meta-Programming Programming Languages HUJI 2010 Yardena Meymann.
S.Ducasse 1 Instance Initialization How to ensure that an instance is well initialized? Automatic initialize Lazy initialization Proposing the right interface.
Object-Oriented Programming
The Procedure Abstraction Part V: Run-time Structures for OOLs
Chapter 2 Squeak: Object-oriented design with multimedia applications
Introduction to Smalltalk
Introduction to Smalltalk
Presentation transcript:

S.Ducasse 1 7. Understanding Metaclasses

S.Ducasse 2 Roadmap Metaclasses in 7 points Indexed Classes Class Instance Variables Class Variables Pool Dictionaries

S.Ducasse 3 Metaclasses in 7 points 1. Every object is an instance of a class 2. Every class eventually inherits from Object 3. Every class is an instance of a metaclass 4. The metaclass hierarchy parallels the class hierarchy 5. Every metaclass inherits from Class and Behavior 6. Every metaclass is an instance of Metaclass 7. The metaclass of Metaclass is an instance of Metaclass Adapted from Goldberg & Robson, Smalltalk-80 — The Language

S.Ducasse 4 Metaclasses in 7 points 1. Every object is an instance of a class 2. Every class eventually inherits from Object 3. Every class is an instance of a metaclass 4. The metaclass hierarchy parallels the class hierarchy 5. Every metaclass inherits from Class and Behavior 6. Every metaclass is an instance of Metaclass 7. The metaclass of Metaclass is an instance of Metaclass

S.Ducasse 5 1. Every object is an instance of a class

S.Ducasse 6 Metaclasses in 7 points 1. Every object is an instance of a class 2. Every class eventually inherits from Object 3. Every class is an instance of a metaclass 4. The metaclass hierarchy parallels the class hierarchy 5. Every metaclass inherits from Class and Behavior 6. Every metaclass is an instance of Metaclass 7. The metaclass of Metaclass is an instance of Metaclass

S.Ducasse 7 2. Every class inherits from Object Every object is-an Object = The class of every object ultimately inherits from Object

S.Ducasse 8 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

S.Ducasse 9 Responsibilities of Object Object represents the common object behavior error-handling, halting … all classes should inherit ultimately from Object

S.Ducasse 10 Metaclasses in 7 points 1. Every object is an instance of a class 2. Every class eventually inherits from Object 3. Every class is an instance of a metaclass 4. The metaclass hierarchy parallels the class hierarchy 5. Every metaclass inherits from Class and Behavior 6. Every metaclass is an instance of Metaclass 7. The metaclass of Metaclass is an instance of Metaclass

S.Ducasse 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

S.Ducasse 12 Metaclasses are implicit There are no explicit metaclasses Metaclasses are created implicitly when classes are created No sharing of metaclasses (unique metaclass per class)

S.Ducasse 13 Metaclasses by Example Square allSubclasses Snake allSubclasses Snake allInstances Snake instVarNames Snake back: 5 Snake selectors Snake canUnderstand: #new Snake canUnderstand: #setBack:

S.Ducasse 14 Metaclasses in 7 points 1. Every object is an instance of a class 2. Every class eventually inherits from Object 3. Every class is an instance of a metaclass 4. The metaclass hierarchy parallels the class hierarchy 5. Every metaclass inherits from Class and Behavior 6. Every metaclass is an instance of Metaclass 7. The metaclass of Metaclass is an instance of Metaclass

S.Ducasse The metaclass hierarchy parallels the class hierarchy

S.Ducasse 16 Uniformity between Classes and Objects Classes are objects too, so … Everything that holds for objects holds for classes as well Same method lookup strategy Look up in the method dictionary of the metaclass

S.Ducasse 17 About the Buttons

S.Ducasse 18 Metaclasses in 7 points 1. Every object is an instance of a class 2. Every class eventually inherits from Object 3. Every class is an instance of a metaclass 4. The metaclass hierarchy parallels the class hierarchy 5. Every metaclass inherits from Class and Behavior 6. Every metaclass is an instance of Metaclass 7. The metaclass of Metaclass is an instance of Metaclass

S.Ducasse Every metaclass inherits from Class and Behavior Every class is-a Class = The metaclass of every class inherits from Class

S.Ducasse 20 Where is new defined?

S.Ducasse 21 Responsibilities of Behavior Behavior Minimum 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 method instance 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)

S.Ducasse 22 Responsibilities of ClassDescription ClassDescription adds a number of facilities to basic Behavior: named instance variables category organization for methods the notion of a name (abstract) maintenance of Change sets and logging changes most of the mechanisms needed for fileOut ClassDescription is an abstract class: its facilities are intended for inheritance by the two subclasses, Class and Metaclass.

S.Ducasse 23 Responsibilities of Class Class represents the common behavior of all classes name, compilation, method storing, instance variables … representation for classVariable names and shared pool variables (addClassVarName:, addSharedPool:, initialize) Class inherits from Object because Class is an Object Class knows how to create instances, so all metaclasses should inherit ultimately from Class

S.Ducasse 24 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 The metaclass hierarchy parallels the class hierarchy Every metaclass inherits from Class and Behavior Every metaclass is an instance of Metaclass The metaclass of Metaclass is an instance of Metaclass

S.Ducasse Every metaclass is an instance of Metaclass

S.Ducasse 26 Metaclass Responsibilities Metaclass Represents common metaclass Behavior instance creation (subclassOf:) creating initialized instances of the metaclass’s sole instance initialization of class variables metaclass instance protocol (name:inEnvironment:subclassOf:....) method compilation (different semantics can be introduced) class information (inheritance link, instance variable,...)

S.Ducasse 27 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 The metaclass hierarchy parallels the class hierarchy Every metaclass inherits from Class and Behavior Every metaclass is an instance of Metaclass The metaclass of Metaclass is an instance of Metaclass

S.Ducasse The metaclass of Metaclass is an instance of Metaclass

S.Ducasse 29 Navigating the metaclass hierarchy MetaclassHierarchyTest>>testHierarchy "The class hierarchy" self assert: Snake superclass = Square. self assert: Square superclass = Object. self assert: Object superclass superclass = nil. "skip ProtoObject" "The parallel metaclass hierarchy" self assert: Snake class name = 'Snake class'. self assert: Snake class superclass = Square class. self assert: Square class superclass = Object class. self assert: Object class superclass superclass = Class. self assert: Class superclass = ClassDescription. self assert: ClassDescription superclass = Behavior. self assert: Behavior superclass = Object. "The Metaclass hierarchy" self assert: Snake class class = Metaclass. self assert: Square class class = Metaclass. self assert: Object class class = Metaclass. self assert: Class class class = Metaclass. self assert: ClassDescription class class = Metaclass. self assert: Behavior class class = Metaclass. self assert: Metaclass superclass = ClassDescription. "The fixpoint" self assert: Metaclass class class = Metaclass.

S.Ducasse 30 Roadmap  Metaclasses in 7 points  Indexed Classes  Class Instance Variables  Class Variables  Pool Dictionaries

S.Ducasse 31 Two ways to represent objects Named or indexed instance variables Named: name of GamePlayer Indexed: #(Jack Jill) at: 1 Or looking at them in another way: Objects with pointers to other objects Objects with arrays of bytes (word, long) Difference for efficiency reasons: arrays of bytes (like C strings) are faster than storing an array of pointers, each pointing to a single byte.

S.Ducasse 32 Different methods to create classes Indexed Named Instance Variables Definition Method NoYes#subclass: … Yes #variableSubclass: … YesNo#variableByteSubclass: … See the subclass creation protocol of Class Constraints Pointer classes defined using #subclass: support any kind of subclasses Byte classes defined using #variableSubclass: can only have: variableSubclass: or variableByteSubclass: subclasses

S.Ducasse 33 Testing methods See testing protocols of Behavior: #isPointers, #isBits, #isBytes, #isFixed, #isVariable #kindOfSubclass Object allSubclasses select: [:class | class isBytes] a Set(ByteArray MwSynchronizationWrapper MwBlockMethodWrapper ExternalAddress MCMockClassH LargeNegativeInteger LargePositiveInteger ByteSymbol MwCountMethodWrapper MwTimeMethodWrapper MwMethodWrapper MwBlockHandlerMethodWrapper ByteString MwCalledMethodWrapper UUID CompiledMethod)

S.Ducasse 34 Defining Indexed Classes Example — instantiating an Array: ArrayedCollection variableSubclass: #Array instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Collections-Arrayed' Array new: 4#(nil nil nil nil) #( ) class isVariabletrue

S.Ducasse 35 Defining an Indexed Class Object variableSubclass: #IndexedObject instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: '' (IndexedObject new: 2) at: 1 put: 'Jack'; at: 2 put: 'Jill'; at: 1 'Jack'

S.Ducasse 36 Indexed Classes / Instance Variables An indexed variable is implicitly added to the list of instance variables Only one indexed instance variable per class Access with at: and at:put: NB: answers the value, not the receiver Subclasses should also be indexed

S.Ducasse 37 Roadmap  Metaclasses in 7 points  Indexed Classes  Class Instance Variables  Class Variables  Pool Dictionaries

S.Ducasse 38 Class Instance Variables Class are objects too Instances of their metaclass Methods looked up in the method dictionary of their metaclass Can also define instance variables When a metaclass defines a new instance variable, then its instance (a Class) gets a new variable I.e., in addition to subclass, superclasses, methodDict… Use class instance variables to represent the private state of the class E.g., number of instances, superclass etc. Not to represent information shared by all instances!

S.Ducasse 39 Example: the Singleton Pattern A class having only one instance We keep the unique instance created in an instance variable WebServer class instanceVariableNames: 'uniqueInstance’ WebServer class>>new self error: 'Use uniqueInstance to get the unique instance' WebServer class>>uniqueInstance uniqueInstance isNil uniqueInstance isNil ifTrue: [uniqueInstance := self basicNew initialize]. ^ uniqueInstance ^ uniqueInstance WebServer class instanceVariableNames: 'uniqueInstance’ WebServer class>>new self error: 'Use uniqueInstance to get the unique instance' WebServer class>>uniqueInstance uniqueInstance isNil uniqueInstance isNil ifTrue: [uniqueInstance := self basicNew initialize]. ^ uniqueInstance ^ uniqueInstance

S.Ducasse 40 Roadmap  Metaclasses in 7 points  Indexed Classes  Class Instance Variables  Class Variables  Pool Dictionaries

S.Ducasse 41 Class Variable = Shared Variable To share information amongst all instances of a class, use a “class variable” Shared and directly accessible by all the instances of the class and subclasses Accessible to both instance and class methods Begins with an uppercase letter

S.Ducasse 42 Initializing class variables Class variables should be initialized by an initialize method on the class side Magnitude subclass: #Date instanceVariableNames: 'julianDayNumber ' classVariableNames: 'DaysInMonth FirstDayOfMonth MonthNames SecondsInDay WeekDayNames ' poolDictionaries: '' category: 'Kernel-Magnitudes' Date class>>initialize... WeekDayNames := #(Sunday Monday...). MonthNames := #(January February... ). DaysInMonth := #( ).

S.Ducasse 43 ClassVariables vs. Instance Variables

S.Ducasse 44 Roadmap  Metaclasses in 7 points  Indexed Classes  Class Instance Variables  Class Variables  Pool Dictionaries

S.Ducasse 45 Pool Dictionaries A Pool Dictionary is a shared variable Begins with a uppercase letter. Shared by a group of classes not linked by inheritance. Each class possesses its own pool dictionary (containing pool variables). They are not inherited. Don’t use them!

S.Ducasse 46 Examples of Pool Dictionaries ArrayedCollection subclass: #Text instanceVariableNames: 'string runs' classVariableNames: '' poolDictionaries: 'TextConstants' category: 'Collections-Text' Elements stored into TextConstants like Ctrl, CR, ESC, Space can be directly accessed from all the classes like ParagraphEditor.... Hint: You can inspect any Pool Dictionary

S.Ducasse 47 Smalltalk System Dictionary Pool Dictionaries are stored in the Smalltalk system dictionary Smalltalk inspect (Smalltalk at: #TextConstants) at: #ESC$

S.Ducasse 48 Accessing globals Use message-sending instead of directly accessing pool variables stream nextPut: Lf "A pool variable visible to the class" stream nextPut: Character lf vs.vs.

S.Ducasse 49 What you should know! What does is-a mean? What is the difference between sending a message to an object and to its class? What are the responsibilities of a metaclass? What is the superclass of Object class? Where is new defined? What is the difference between class variables and class instance variables?

S.Ducasse 50 Can you answer these questions? Why are there no explicit metaclasses? When should you override new? Why don’t metaclasses inherit from Class? Are there any classes that don’t inherit from Object? Is Metaclass a Class? Why or why not? Where are the methods class and superclass defined? When should you define an indexed class? Are Java static variables just like class variables or class instance variables? Where is the SystemDictionary Smalltalk defined?

S.Ducasse License: CC-Attribution-ShareAlike