Your SlideShare is downloading. ×
0
S.Ducasse 1
QuickTime™ and aTIFF (Uncompressed) decompressorare needed to see this picture.
Stéphane Ducasse
Stephane.Duca...
S.Ducasse 2
Goals
• Syntax in a Nutshell
• OO Model in a Nutshell
S.Ducasse 3
Smalltalk OO Model
***Everything*** is an object
Only message passing
Only late binding
Instance variables are...
S.Ducasse 4
Complete Syntax on a PostCard
exampleWithNumber: x
“Illustrates every part of Smalltalk method syntax. It has ...
S.Ducasse 5
Language Constructs
^ return
“ comments
# symbol or array
‘ string
[ ] block or byte array
. separator and not...
S.Ducasse 6
Syntax in a Nutshell (I)
comment: “a comment”
character: $c $h $a $r $a $c $t $e $r $s $# $@
string: ‘a nice s...
S.Ducasse 7
Syntax in a Nutshell (II)
assigment: var := aValue
block: [:var ||tmp| expr...]
temporary variable: |tmp|
bloc...
S.Ducasse 8
Messages instead of a predefined syntax
• In Java, C, C++,Ada constructs like >>, if, for, etc. are
hardcoded ...
S.Ducasse 9
How to Define a Class (Sq)?
• Class Definition:A message sent to another class
Object subclass: #Tomagoshi
ins...
S.Ducasse 10
Smalltalk defineClass: #Packet
superclass: #{Object}
indexedType: #none
private: false
instanceVariableNames:...
S.Ducasse 11
How to Define a Method?
• Normally defined in a browser or (by
directly invoking the compiler)
• Methods are ...
S.Ducasse 12
How to Define a Method?
Normally defined in a browser or (by directly
invoking the compiler)
Methods are publ...
S.Ducasse 13
Instance Creation
1,‘abc’
Basic class creation messages are
new, new:,
basicNew, basicNew:
Monster new
Class ...
S.Ducasse 14
Messages and their Composition
• Three kinds of messages
– Unary: Node new
– Binary: 1 + 2, 3@4
– Keywords: a...
S.Ducasse 15
• Anonymous method
• Passed as method argument or stored
• Functions
fct(x)= x*x+3, fct(2).
fct :=[:x| x * x ...
S.Ducasse 16
Summary
Objects and Messages
Three kinds of messages
unary
binary
keywords
Block: a.k.a innerclass or closure...
S.Ducasse 17
Roadmap
• Syntax in a Nutshell
• OO Model in a Nutshell
S.Ducasse 18
Instance and Class
Only one model
Uniformly applied
Classes are objects too
S.Ducasse 19
Lookup…Class + Inheritance
1
2
S.Ducasse 20
Classes are objects too
• Instance creation is just a message send to a ...
Class
• Same method lookup than w...
S.Ducasse 21
Parallel Inheritance between classes
S.Ducasse 22
Lookup and Class Methods
1
2
1
2
Workstation withName: ‘BigMac’
aWorkstation
name
S.Ducasse 23
About the Buttons
S.Ducasse 24
Summary
- Everything is an object
- One single model
- Single inheritance
- Public methods
- Object based pri...
Upcoming SlideShare
Loading in...5
×

5 - OOP - Smalltalk in a Nutshell (a)

784

Published on

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

  • Be the first to like this

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

No notes for slide

Transcript of "5 - OOP - Smalltalk in a Nutshell (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.iam.unibe.ch/~ducasse/ Smalltalk in a Nutshell
  2. 2. S.Ducasse 2 Goals • Syntax in a Nutshell • OO Model in a Nutshell
  3. 3. S.Ducasse 3 Smalltalk OO Model ***Everything*** is an object Only message passing Only late binding Instance variables are private to the object and protected to the subclasses Methods are public Everything is a pointer Garbage collector Single inheritance between classes Only message passing between objects
  4. 4. S.Ducasse 4 Complete Syntax on a PostCard exampleWithNumber: x “Illustrates every part of Smalltalk method syntax. It has unary, binary, and key word messages, declares arguments and temporaries, accesses a global variable (but not and instance variable), uses literals (array, character, symbol, string, integer, float), uses the pseudo variable true false, nil, self, and super, and has sequence, assignment, return and cascade. It has both zero argument and one argument blocks.” |y| true & false not & (nil isNil) ifFalse: [self halt]. y := self size + super size. #($a #a ‘a’ 1 1.0) do: [:each | Transcript show: (each class name); show: (each printString); show:‘ ‘]. ^ x < y
  5. 5. S.Ducasse 5 Language Constructs ^ return “ comments # symbol or array ‘ string [ ] block or byte array . separator and not terminator (or namespace access inVW) ; cascade (sending several messages to the same instance) | local or block variable := assignment $ character : end of selector name e, r number exponent or radix ! file element separator <primitive: ...> forVM primitive calls
  6. 6. S.Ducasse 6 Syntax in a Nutshell (I) comment: “a comment” character: $c $h $a $r $a $c $t $e $r $s $# $@ string: ‘a nice string’ ‘lulu’ ‘l’’idiot’ symbol: #mac #+ array: #(1 2 3 (1 3) $a 4) byte array: #[1 2 3] integer: 1, 2r101 real: 1.5, 6.03e-34,4, 2.4e7 float: 1/33 boolean: true, false point: 10@120 Note that @ is not an element of the syntax, but just a message sent to a number.This is the same for /, bitShift, ifTrue:, do: ...
  7. 7. S.Ducasse 7 Syntax in a Nutshell (II) assigment: var := aValue block: [:var ||tmp| expr...] temporary variable: |tmp| block variable: :var unary message: receiver selector binary message: receiver selector argument keyword based: receiver keyword1: arg1 keyword2: arg2... cascade: message ; selector ... separator: message . message result: ^ parenthesis: (...)
  8. 8. S.Ducasse 8 Messages instead of a predefined syntax • In Java, C, C++,Ada constructs like >>, if, for, etc. are hardcoded into the grammar • In Smalltalk there are just messages defined on objects • (>>) bitShift: is just a message sent to numbers – 10 bitShift: 2 • (if) ifTrue: is just messages sent to a boolean – (1> x) ifTrue: • (for) do:, to:do: are just messages to collections or numbers – #(a b c d) do: [:each | Transcript show: each ; cr] – 1 to: 10 do: [:i |Transcript show: each printString; cr] • Minimal parsing • Language is extensible
  9. 9. S.Ducasse 9 How to Define a Class (Sq)? • Class Definition:A message sent to another class Object subclass: #Tomagoshi instanceVariableNames: ‘tummy hunger dayCount’ classVariableNames: '' poolDictionaries: '' category: ‘Monster Inc’ • Instance variables are instance-based protected (not visible by clients)
  10. 10. S.Ducasse 10 Smalltalk defineClass: #Packet superclass: #{Object} indexedType: #none private: false instanceVariableNames: 'addressee originator contents' classInstanceVariableNames: '' imports: '' category: 'LAN' How to Define a Class (VW)?
  11. 11. S.Ducasse 11 How to Define a Method? • Normally defined in a browser or (by directly invoking the compiler) • Methods are public • Always return self Tomagoshi>>digest "Digest slowly: every two cycles, remove one from the tummy” (dayCount isDivisibleBy: 2) ifTrue: [ tummy := tummy -1]
  12. 12. S.Ducasse 12 How to Define a Method? Normally defined in a browser or (by directly invoking the compiler) Methods are public Always return self Node>>accept: thePacket "If the packet is addressed to me, print it. Else just behave like a normal node" (thePacket isAddressedTo: self) ifTrue: [self print: thePacket] ifFalse: [super accept: thePacket]
  13. 13. S.Ducasse 13 Instance Creation 1,‘abc’ Basic class creation messages are new, new:, basicNew, basicNew: Monster new Class specific message creation (messages sent to classes) Tomagoshi withHunger: 10
  14. 14. S.Ducasse 14 Messages and their Composition • Three kinds of messages – Unary: Node new – Binary: 1 + 2, 3@4 – Keywords: aTomagoshi eat: #cooky furiously: true • Message Priority • (Msg) > unary > binary > keywords • Same Level from left to right • Example: • (10@0 extent: 10@100) bottomRight • s isNil ifTrue: [ self halt ]
  15. 15. S.Ducasse 15 • Anonymous method • Passed as method argument or stored • Functions fct(x)= x*x+3, fct(2). fct :=[:x| x * x + 3]. fct value: 2 Integer>>factorial tmp:= 1. 2 to: self do: [:i| tmp := tmp * i] #(1 2 3) do: [:each |Transcript show: each printString ; cr] Blocks
  16. 16. S.Ducasse 16 Summary Objects and Messages Three kinds of messages unary binary keywords Block: a.k.a innerclass or closures or lambda Unary>Binary>Keywords
  17. 17. S.Ducasse 17 Roadmap • Syntax in a Nutshell • OO Model in a Nutshell
  18. 18. S.Ducasse 18 Instance and Class Only one model Uniformly applied Classes are objects too
  19. 19. S.Ducasse 19 Lookup…Class + Inheritance 1 2
  20. 20. S.Ducasse 20 Classes are objects too • Instance creation is just a message send to a ... Class • Same method lookup than with any other objects • a Class is the single instance of amanonymous class • Point is the single instance of Point class
  21. 21. S.Ducasse 21 Parallel Inheritance between classes
  22. 22. S.Ducasse 22 Lookup and Class Methods 1 2 1 2 Workstation withName: ‘BigMac’ aWorkstation name
  23. 23. S.Ducasse 23 About the Buttons
  24. 24. S.Ducasse 24 Summary - Everything is an object - One single model - Single inheritance - Public methods - Object based private attribute - Protected to subclasses - Classes are simply objects too - Class is instance of another class - One unique method lookup look in the class of the receiver
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×