2013 lecture-02-model
-
Upload
pharo -
Category
Technology
-
view
209 -
download
0
description
Transcript of 2013 lecture-02-model
![Page 1: 2013 lecture-02-model](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f97a9b4c905ad218b4721/html5/thumbnails/1.jpg)
A Little Journey in the Pharo Object ModelStéphane Ducassehttp://www.pharo.org
![Page 2: 2013 lecture-02-model](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f97a9b4c905ad218b4721/html5/thumbnails/2.jpg)
A pure and minimal object model
Less is more!
![Page 3: 2013 lecture-02-model](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f97a9b4c905ad218b4721/html5/thumbnails/3.jpg)
No constructors, no static methods, no operators
No type declaration, no primitive types,
No interfaces, no need for factory
No packages/private/protected modifiers
No parametrized types
No boxing/unboxing
Still powerful
![Page 4: 2013 lecture-02-model](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f97a9b4c905ad218b4721/html5/thumbnails/4.jpg)
Everything is an object
![Page 5: 2013 lecture-02-model](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f97a9b4c905ad218b4721/html5/thumbnails/5.jpg)
Objects are instances of Classes
![Page 6: 2013 lecture-02-model](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f97a9b4c905ad218b4721/html5/thumbnails/6.jpg)
(10@200)
Objects are instances of Classes
![Page 7: 2013 lecture-02-model](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f97a9b4c905ad218b4721/html5/thumbnails/7.jpg)
(10@200) class
Objects are instances of Classes
![Page 8: 2013 lecture-02-model](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f97a9b4c905ad218b4721/html5/thumbnails/8.jpg)
(10@200) class
Point
Objects are instances of Classes
![Page 9: 2013 lecture-02-model](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f97a9b4c905ad218b4721/html5/thumbnails/9.jpg)
Classes are objects too
![Page 10: 2013 lecture-02-model](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f97a9b4c905ad218b4721/html5/thumbnails/10.jpg)
Point selectors
Classes are objects too
![Page 11: 2013 lecture-02-model](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f97a9b4c905ad218b4721/html5/thumbnails/11.jpg)
Point selectors
> an IdentitySet(#eightNeighbors #+ #isZero #sortsBefore: #degrees #printOn: #sideOf: #fourNeighbors #hash #roundUpTo: #min: #min:max: #max #adaptToCollection:andSend: #quadrantOf: #crossProduct: #= #nearestPointOnLineFrom:to: #bitShiftPoint: #* #guarded #insideTriangle:with:with: #grid: #truncateTo: #y #setR:degrees: #normal
Classes are objects too
![Page 12: 2013 lecture-02-model](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f97a9b4c905ad218b4721/html5/thumbnails/12.jpg)
Point instVarNames
Classes are objects too
![Page 13: 2013 lecture-02-model](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f97a9b4c905ad218b4721/html5/thumbnails/13.jpg)
Point instVarNames
>#('x' 'y')
Classes are objects too
![Page 14: 2013 lecture-02-model](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f97a9b4c905ad218b4721/html5/thumbnails/14.jpg)
Methods are public
![Page 15: 2013 lecture-02-model](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f97a9b4c905ad218b4721/html5/thumbnails/15.jpg)
Methods are all late-bound
![Page 16: 2013 lecture-02-model](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f97a9b4c905ad218b4721/html5/thumbnails/16.jpg)
Instance variables are protected
![Page 17: 2013 lecture-02-model](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f97a9b4c905ad218b4721/html5/thumbnails/17.jpg)
Single Inheritance
![Page 18: 2013 lecture-02-model](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f97a9b4c905ad218b4721/html5/thumbnails/18.jpg)
Object subclass: #Point
instanceVariableNames: 'x y'
classVariableNames: ''
category: 'Graphics-Primitives'
Single Inheritance
![Page 19: 2013 lecture-02-model](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f97a9b4c905ad218b4721/html5/thumbnails/19.jpg)
Messages + Objects
![Page 20: 2013 lecture-02-model](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f97a9b4c905ad218b4721/html5/thumbnails/20.jpg)
Object
Node
accept:
name
sendt:
node1
msg
The key to everything
![Page 21: 2013 lecture-02-model](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f97a9b4c905ad218b4721/html5/thumbnails/21.jpg)
Classes are objects too
![Page 22: 2013 lecture-02-model](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f97a9b4c905ad218b4721/html5/thumbnails/22.jpg)
Point class
Classes are objects too
![Page 23: 2013 lecture-02-model](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f97a9b4c905ad218b4721/html5/thumbnails/23.jpg)
Point class
>Point class
Classes are objects too
![Page 24: 2013 lecture-02-model](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f97a9b4c905ad218b4721/html5/thumbnails/24.jpg)
Point class
>Point class
“Point class” is an anonymous class with only one instance: Point
Classes are objects too
![Page 25: 2013 lecture-02-model](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f97a9b4c905ad218b4721/html5/thumbnails/25.jpg)
Class Parallel Inheritance Node class
newwithName: aString
instance of
Node
nameaccept: aPacketsend: aPacket
Workstation
originate: aPacketaccept: aPacket
aWorkstation (BigMac)
Workstation
class
instance of
![Page 26: 2013 lecture-02-model](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f97a9b4c905ad218b4721/html5/thumbnails/26.jpg)
Lookup and Class Methods
![Page 27: 2013 lecture-02-model](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f97a9b4c905ad218b4721/html5/thumbnails/27.jpg)
About the Buttons
![Page 28: 2013 lecture-02-model](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f97a9b4c905ad218b4721/html5/thumbnails/28.jpg)
Class methods are plain late bound methods as any methods!
![Page 29: 2013 lecture-02-model](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f97a9b4c905ad218b4721/html5/thumbnails/29.jpg)
Package extensions
A method can be defined in a class that is packaged in another package!Powerful to build layers
![Page 30: 2013 lecture-02-model](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f97a9b4c905ad218b4721/html5/thumbnails/30.jpg)
Defined in the Dice packageInteger>>D20 ^ self D: 20
Integer>>D: anInteger | h | h := DiceHandle new self timesRepeat: [h addDice: (Dice faces: anInteger)]. ^ h
2 D20: two dice of 20 faces
![Page 31: 2013 lecture-02-model](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f97a9b4c905ad218b4721/html5/thumbnails/31.jpg)
SummaryEverything is an object
Single inheritance, public methods, protected attributes
One single model
Classes are simply objects too
A class is instance of another class
One unique method lookup, look in the class of the receiver