S.Ducasse 1
QuickTime™ and aTIFF (Uncompressed) decompressorare needed to see this picture.
Stéphane Ducasse
Stephane.Duca...
S.Ducasse 2
License: CC-Attribution-ShareAlike 2.0
http://creativecommons.org/licenses/by-sa/2.0/
S.Ducasse 3
Outline
• Class definition
• Method definition
• Basic class instantiation
S.Ducasse 4
A template is proposed by the browser:
Smalltalk defineClass: #NameOfClass
superclass: #{NameOfSuperclass}
ind...
S.Ducasse 5
Fill the Template (VW)
Smalltalk defineClass: #Packet
superclass: #{Object}
indexedType: #none
private: false
...
S.Ducasse 6
Class Definition: (Sq)
A template is proposed by the browser:
NameOfSuperclass subclass: #NameOfClass
instance...
S.Ducasse 7
Filling the Template (Sq)
Just fill this Template in:
Object subclass: #Packet
instanceVariableNames: 'content...
S.Ducasse 8
Named InstanceVariables
instanceVariableNames: 'instVarName1 instVarName2'
...
instanceVariableNames: 'content...
S.Ducasse 9
Roadmap
• Class definition
• Method definition
• Basic class instantiation
S.Ducasse 10
Method Definition
• Fill in the template. For example:
Packet>>defaultContents
“returns the default contents ...
S.Ducasse 11
Accessing InstanceVariables
Using direct access for the methods of the class
Packet>>isSentBy: aNode
^ origin...
S.Ducasse 12
Methods always return aValue
• Message = effect + return value
• By default, a method returns self
• In a met...
S.Ducasse 13
Methods always return a value
• If we want to return the value returned by #send:
Node>>accept: thePacket
^se...
S.Ducasse 14
Some Naming Conventions
• Shared variables begin with an upper case letter
• Private variables begin with a l...
S.Ducasse 15
Some Naming Conventions
• Use imperative verbs for methods performing an action
like #openOn:, #close, #sleep...
S.Ducasse 16
Roadmap
• Class definition
• Method definition
• Basic class instantiation
S.Ducasse 17
Object Instantiation
Objects can be created by:
- Direct Instance creation: new/new:
- Messages to instances ...
S.Ducasse 18
Object Creation
-When a class creates an object =
allocating memory + marking it to
be instance of that class
S.Ducasse 19
Instance Creation with new
aClass new
returns a newly and UNINITIALIZED instance
OrderedCollection new -> Ord...
S.Ducasse 20
Messages to Instances
Messages to Instances that create Objects
1 to: 6 (an
interval)
1@2 (a point)
(0@0) ext...
S.Ducasse 21
Opening the Box
1 to: 6
creates an interval
Number>>to: stop
"Answer an Interval from the receiver up to the ...
S.Ducasse 22
Strings...
1 printString
Object>>printString
"Answer a String whose characters are a description
of the recei...
S.Ducasse 23
Instance Creation
1@2
creates a point
Number>>@ y
"Answer a new Point whose x value is the receiver and
whose...
S.Ducasse 24
Class-specific Messages
Array with: 1 with: 'lulu'
OrderedCollection with: 1 with: 2 with: 3
Rectangle fromUs...
S.Ducasse 25
new and new:
• new:/basicNew: is used to specify the size of the
created instance
Array new: 4 -> #(nil nil n...
S.Ducasse 26
Summary
How to define a class?
What are instance variables?
How to define a method?
Instances creation methods
Upcoming SlideShare
Loading in …5
×

9 - OOP - Smalltalk Classes (a)

865 views

Published on

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

  • Be the first to like this

No Downloads
Views
Total views
865
On SlideShare
0
From Embeds
0
Number of Embeds
25
Actions
Shares
0
Downloads
8
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

9 - OOP - Smalltalk Classes (a)

  1. 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/ Some Points on Classes
  2. 2. S.Ducasse 2 License: CC-Attribution-ShareAlike 2.0 http://creativecommons.org/licenses/by-sa/2.0/
  3. 3. S.Ducasse 3 Outline • Class definition • Method definition • Basic class instantiation
  4. 4. S.Ducasse 4 A template is proposed by the browser: Smalltalk defineClass: #NameOfClass superclass: #{NameOfSuperclass} indexedType: #none private: false instanceVariableNames: 'instVarName1 instVarName2' classInstanceVariableNames: '' imports: '' category: '' Class Definition (VW)
  5. 5. S.Ducasse 5 Fill the Template (VW) Smalltalk defineClass: #Packet superclass: #{Object} indexedType: #none private: false instanceVariableNames: 'contents addressee originator' classInstanceVariableNames: '' imports: '' category: 'LAN' Automatically a class named “Packet class” is created. Packet is the unique instance of “Packet class”.To see it, click on the class button in the browser
  6. 6. S.Ducasse 6 Class Definition: (Sq) A template is proposed by the browser: NameOfSuperclass subclass: #NameOfClass instanceVariableNames: 'instVarName1 instVarName2' classVariableNames: 'ClassVarName1 ClassVarName2' poolDictionaries: '' category: 'CategoryName’
  7. 7. S.Ducasse 7 Filling the Template (Sq) Just fill this Template in: Object subclass: #Packet instanceVariableNames: 'contents addressee originator ' classVariableNames: '' poolDictionaries: '' category: 'LAN-Simulation’ Automatically a class named “Packet class” is created. Packet is the unique instance of Packet class.To see it, click on the class button in the browser
  8. 8. S.Ducasse 8 Named InstanceVariables instanceVariableNames: 'instVarName1 instVarName2' ... instanceVariableNames: 'contents addressee originator ' ... •Begins with a lowercase letter •Explicitly declared: a list of instance variables •Name should be unique in the inheritance chain •Default value of instance variable is nil •Private to the instance: instance based (vs. C++ class-based) •Can be accessed by all the methods of the class and its subclasses •Instance variables cannot be accessed by class methods. •A client cannot directly access instance variables. •The clients must use accessors to access an instance variable.
  9. 9. S.Ducasse 9 Roadmap • Class definition • Method definition • Basic class instantiation
  10. 10. S.Ducasse 10 Method Definition • Fill in the template. For example: Packet>>defaultContents “returns the default contents of a Packet” ^ ‘contents no specified’ Workstation>>originate: aPacket aPacket originator: self. self send: aPacket • How to invoke a method on the same object? Send the message to self Packet>>isAddressedTo: aNode “returns true if I’m addressed to the node aNode” ^ self addressee = aNode name
  11. 11. S.Ducasse 11 Accessing InstanceVariables Using direct access for the methods of the class Packet>>isSentBy: aNode ^ originator = aNode is equivalent to use accessors Packet>>originator ^ originator Packet>>isSentBy: aNode ^ self originator = aNode Design Hint: Do not directly access instance variables of a superclass from subclass methods.This way classes are not strongly linked.
  12. 12. S.Ducasse 12 Methods always return aValue • Message = effect + return value • By default, a method returns self • In a method body, the ^ expression returns the value of the expression as the result of the method execution. Node>>accept: thePacket self send: thePacket This is equivalent to: Node>>accept: thePacket self send: thePacket. ^self 12
  13. 13. S.Ducasse 13 Methods always return a value • If we want to return the value returned by #send: Node>>accept: thePacket ^self send: thePacket. • Use ^ self to notify the reader that something abnormal is arriving MyClass>>foo … ^ self
  14. 14. S.Ducasse 14 Some Naming Conventions • Shared variables begin with an upper case letter • Private variables begin with a lower case letter • For accessors, use the same name as the instance variable accessed: Packet>>addressee ^ addressee Packet>>addressee: aSymbol addressee := aSymbol
  15. 15. S.Ducasse 15 Some Naming Conventions • Use imperative verbs for methods performing an action like #openOn:, #close, #sleep • For predicate methods (returning a boolean) prefix the method with is or has • Ex: isNil, isAddressedTo:, isSentBy: • For converting methods prefix the method with as • Ex: asString
  16. 16. S.Ducasse 16 Roadmap • Class definition • Method definition • Basic class instantiation
  17. 17. S.Ducasse 17 Object Instantiation Objects can be created by: - Direct Instance creation: new/new: - Messages to instances that create other objects - Class specific instantiation messages
  18. 18. S.Ducasse 18 Object Creation -When a class creates an object = allocating memory + marking it to be instance of that class
  19. 19. S.Ducasse 19 Instance Creation with new aClass new returns a newly and UNINITIALIZED instance OrderedCollection new -> OrderedCollection () Packet new -> aPacket Default instance variable values are nil nil is an instance of UndefinedObject and only understands a limited set of messages
  20. 20. S.Ducasse 20 Messages to Instances Messages to Instances that create Objects 1 to: 6 (an interval) 1@2 (a point) (0@0) extent: (100@100) (a rectangle) #lulu asString (a string) 1 printString (a string) 3 asFloat (a float) #(23 2 3 4) asSortedCollection (a sortedCollection)
  21. 21. S.Ducasse 21 Opening the Box 1 to: 6 creates an interval Number>>to: stop "Answer an Interval from the receiver up to the argument, stop, with each next element computed by incrementing the previous one by 1." ^Interval from: self to: stop by: 1
  22. 22. S.Ducasse 22 Strings... 1 printString Object>>printString "Answer a String whose characters are a description of the receiver." | aStream | aStream := WriteStream on: (String new: 16). self printOn: aStream. ^ aStream contents
  23. 23. S.Ducasse 23 Instance Creation 1@2 creates a point Number>>@ y "Answer a new Point whose x value is the receiver and whose y value is the argument." <primitive: 18> ^ Point x: self y: y
  24. 24. S.Ducasse 24 Class-specific Messages Array with: 1 with: 'lulu' OrderedCollection with: 1 with: 2 with: 3 Rectangle fromUser -> 179@95 corner: 409@219 Browser browseAllImplementorsOf: #at:put: Packet send:‘Hello mac’ to: #mac Workstation withName: #mac
  25. 25. S.Ducasse 25 new and new: • new:/basicNew: is used to specify the size of the created instance Array new: 4 -> #(nil nil nil nil) • new/new: can be specialized to define customized creation • basicNew/basicNew: should never be overridden • #new/basicNew and new:/basicNew: are class methods
  26. 26. S.Ducasse 26 Summary How to define a class? What are instance variables? How to define a method? Instances creation methods

×