Your SlideShare is downloading. ×
Stoop 304-metaclasses
Stoop 304-metaclasses
Stoop 304-metaclasses
Stoop 304-metaclasses
Stoop 304-metaclasses
Stoop 304-metaclasses
Stoop 304-metaclasses
Stoop 304-metaclasses
Stoop 304-metaclasses
Stoop 304-metaclasses
Stoop 304-metaclasses
Stoop 304-metaclasses
Stoop 304-metaclasses
Stoop 304-metaclasses
Stoop 304-metaclasses
Stoop 304-metaclasses
Stoop 304-metaclasses
Stoop 304-metaclasses
Stoop 304-metaclasses
Stoop 304-metaclasses
Stoop 304-metaclasses
Stoop 304-metaclasses
Stoop 304-metaclasses
Stoop 304-metaclasses
Stoop 304-metaclasses
Stoop 304-metaclasses
Stoop 304-metaclasses
Stoop 304-metaclasses
Stoop 304-metaclasses
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Stoop 304-metaclasses

497

Published on

Published in: Technology, Sports
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
497
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. S.Ducasse 1 QuickTime™ and aTIFF (Uncompressed) decompressorare needed to see this picture. Stéphane Ducasse Stephane.Ducasse@univ-savoie.fr http://www.listic.univ-savoie.fr/~ducasse/ Classes and Metaclasses - an Analysis
  • 2. S.Ducasse 2 License: CC-Attribution-ShareAlike 2.0 http://creativecommons.org/licenses/by-sa/2.0/
  • 3. S.Ducasse 3 Goals “Some books are to be tasted, others to be swallowed, and some few to be chewed and digested” — Francis Bacon, Of Studies •Recap on Instantiation •Recap on Inheritance
  • 4. S.Ducasse 4 At first sight, a difficult topic! You can live without really understanding them, but metaclasses provide a uniform model, and you will make less errors if you learn how they work, and you will really understand the object model Warning
  • 5. S.Ducasse 5 • Every object is an instance of a class. • Every class (except Object) is ultimately a subclass of Object. • When anObject receives a message, the method is looked up in its class and/or its superclasses. • A class defines the structure and the behavior of all its instances. • Each instance possesses its own set of values. • Each instance shares its behavior with other instances. This behavior is defined in its class, and is accessed via the instance of link. The Meaning of “Instance of”
  • 6. S.Ducasse 6 • Everything is an object • Every object is instance of exactly one class • A class is also an object, and is an instance of its metaclass • An object is a class if and only if it can create instances of itself. Metaclass
  • 7. S.Ducasse 7 Class Responsibilities • instance creation • class information (inheritance link, instance variables, method compilation...) • Examples: • Node allSubclasses -> OrderedCollection (WorkStation OutputServer Workstation File) • LanPrinter allInstances -> #() • Node instVarNames -> #('name' 'nextNode') • Workstation withName: #mac -> aWorkstation • Workstation selectors -> IdentitySet (#accept: #originate:) • Workstation canUnderstand: #nextNode -> true
  • 8. S.Ducasse 8 Node allSubclasses -> OrderedCollection (WorkStation OutputServer Workstation FileServer PrintServer) PrintServer allInstances -> () Node instVarNames -> ('name' 'nextNode') Workstation withName: mac -> aWorkstation Workstation selectors -> IdentitySet (accept: originate:) Workstation canUnderstand: nextNode -> true Metaclass by Example
  • 9. S.Ducasse 9 The Meaning of Is-a • Every object is an instance of a class. • When anObject receives a message, • the method is looked up in its class • And it continues possibly in • its superclasses • Every class is ultimately • a subclass of Object (except Object).
  • 10. S.Ducasse 10 A Class is an Object too… So messages sent to a class are looked up into the class of the class Node withName: #node1 Node is an instance of “Node class” withName: is looked up in the class “Node class” withName: defined in “Node class” lookup stops + method executed
  • 11. S.Ducasse 11 Class Parallel Inheritance
  • 12. S.Ducasse 12 Lookup and Class Methods
  • 13. S.Ducasse 13 Class Parallel inheritance • Workstation withName: #mac • Workstation is an instance of Workstation class • => withName: is looked up in the class Workstation class • withName: is not defined in Workstation class • => lookup continues in the superclass of Workstation class = Node class • withName: is defined in Node class • => lookup stops + method executed
  • 14. S.Ducasse 14 Object represents the common behavior (like error, halting...) shared by all the instances (final instances and classes) all the classes should inherit ultimately from Object -> Workstation inherits from Node -> Node inherits from Object Class represents the common behavior of all the classes (compilation, method storing, instance variable storing) Class inherits from Object because Class is an Object, although a special one -> Class knows how to create instances So all the classes should inherit ultimately from Class Responsibilities of Object & Class
  • 15. S.Ducasse 15 The kernel of CLOS and ObjVlisp but not the kernel of Smalltalk A Fragile Reflective Kernel
  • 16. S.Ducasse 16 Singleton with explicit metaclasses
  • 17. S.Ducasse 17 Deeper into It
  • 18. S.Ducasse 18 No explicit metaclasses, only implicit non-sharable metaclasses. (1) Every class is ultimately a subclass of Object (except Object itself) Object Behavior ClassDescription Class Metaclass (II) Every object is an instance of a class = every class is an instance of a class which is its metaclass. Smalltalk Metaclasses in 7 points
  • 19. S.Ducasse 19 (3) Every class is an instance of a metaclass. Every user defined class is the sole instance of another class (a metaclass). Metaclasses are system generated and they are unnamed. You can access them by sending the message class to a class. Point class name -> ‘Point class’ Smalltalk Metaclasses in 7 points
  • 20. S.Ducasse 20 If X is a subclass ofY then X class is a subclass ofY class. But what is the superclass of the metaclass of Object? The superclass of Object class is Class All metaclasses are (ultimately) subclasses of Class. But metaclasses are also objects so they should be instances of a Metaclass Smalltalk Metaclasses in 7 points
  • 21. S.Ducasse 21 (5) Every metaclass is an instance of Metaclass. So Metaclass is an instance of itself Object : common object behavior Class: common class behavior (name, multiple instances) Metaclass: common metaclass behavior (no name, unique instance) Smalltalk Metaclasses in 7 points
  • 22. S.Ducasse 22 (6) The methods of Class and its superclasses support the behavior common to those objects that are classes. (7) The methods of instances of Metaclass add the behavior specific to particular classes. Methods of instance of Metaclass = methods of “Packet class” = class methods (for example withName: An instance method defined in Behavior or ClassDescription, is available as a class method. Example: new, new: Smalltalk Metaclasses in 7 points
  • 23. S.Ducasse 23 Complete Picture
  • 24. S.Ducasse 24 Final Thoughts Finally it is not sure that the Smalltalk model is more complex than the one of ObjVlisp. If we consider the programmer view of a class, Smalltalk is simpler If we consider the meta-programmer, ObjVlisp is simpler
  • 25. S.Ducasse 25 Responsibilities
  • 26. S.Ducasse 26 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 into hierarchy ( superclass:, addSubclass: accessing (selectors, allSelectors, compiledMethodAt: ) accessing instances and variables (allInstances, instVarNames) accessing class hierarchy (superclass, subclasses) testing (hasMethods, includesSelector, canUnderstand:, inheritsFrom:, isVariable) Behavior Responsibilities
  • 27. S.Ducasse 27 ClassDescription adds a number of facilities to basic Behavior: named instance variables category organization for methods the notion of a name (abstract) the maintenance of the Changes set, 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. ClassDescription Responsibilities
  • 28. S.Ducasse 28 Metaclass initialization of class variables creating initialized instances of the metaclass’s sole instance instance creation (subclassOf:) metaclass instance protocol (name:inEnvironment:subclassOf:....) Class Class adds naming for class Class adds the representation for classVariable names and shared pool variables (addClassVaraNames, addSharedPool:, initialize) Metaclass and Class Responsibilities
  • 29. S.Ducasse 29 Summary Classes are objects too A class is the unique instance of another class, its metaclass

×