Smalltalk
Paolo Bison
Fondamenti di Informatica 1 A.A. 2004/05 Universit`a di Padova
Smalltalk , Paolo Bison, A.A. 2004-05, 2004-11-13 – p.1/39
Smalltalk
“When I use a word, ...
it means just what I choose it to mean, - neither more nor less”
Smalltalk , Paolo Bison, A.A. 2004-05, 2004-11-13 – p.2/39
Caratteristiche
linguaggio OO puro
dinamico
gestione della memoria
interpretato
ereditarietà singola
Perchè Smalltalk
uniforme
semplice
potente
ambiente di programmazione interattivo grafico
Ambiente di programmazione
macchina virtuale
classi predefinite
interfaccia utente
strumenti per lo sviluppo:
class browser
workspace
inspector
debugger
...
Smalltalk , Paolo Bison, A.A. 2004-05, 2004-11-13 – p.5/39
Risorse: WWW
software
www.squeak.org
www.gnu.org/software/smalltalk/smalltalk.html
www-3.ibm.com/software/awdtools/smalltalk
www.cincom.com/smalltalk
info
www.smalltalk.org
www.whysmalltalk.com/
www.stic.org/
Smalltalk , Paolo Bison, A.A. 2004-05, 2004-11-13 – p.6/39
Risorse: libri
Smalltalk-80 The Language and its Implementation
A.Goldberg e D.Robson, Addison-Wesley, 1983
Smalltalk and Object orientation: An Introduction
J. Hunt, JayDee Technology Ltd..
Smalltalk by Example: The Developer’s Guide
A.Sharp,McGraw Hill, 1997.
Primo programma
nel Workspace 6+5
“print it”
Sintassi
descrizione di oggetti e messaggi (espressioni)
descrizione di classi e metodi
Smalltalk , Paolo Bison, A.A. 2004-05, 2004-11-13 – p.9/39
Espressioni
sequenza di caratteri che descrive un oggetto detto valore dell’espressione
quattro tipi di espressione:
costanti (literals)
variabili
messaggi
blocchi
Smalltalk , Paolo Bison, A.A. 2004-05, 2004-11-13 – p.10/39
Costanti
oggetti che non cambiano mai valore
cinque tipi di costanti:
1. numeri
2. singoli caratteri 3. stringhe di caratteri 4. simboli
5. array di costanti
Numeri
rappresentano valori numerici
sequenza di cifre che può essere preceduta dal segno meno seguita o meno da un punto ed un altra
sequenza di cifre 3 34.87 -3 -43.00
prefisso di radice: valore della radice seguito dalla lettera “r”
8r377 16rA0FF
Caratteri
rappresentano singoli elementi di un alfabeto
un qualunque carattere preceduto dal simbolo $
$A $- $$ $1
Smalltalk , Paolo Bison, A.A. 2004-05, 2004-11-13 – p.13/39
Stringhe
rappresentano sequenze costanti di caratteri
sequenza di caratteri delimitata da apice ’
’hello’ ’Smalltalk-80 system’ ’234’
apice duplicato (”) per inserire un apice
’l”aradio’
Smalltalk , Paolo Bison, A.A. 2004-05, 2004-11-13 – p.14/39
Simboli
rappresentano stringhe usate come nomi nel sistema
sequenza di caratteri preceduta da #
#M63 #+ #hello
ogni simbolo è unico
se primo carattere è una cifra viene interpretato come numero
Arrays
semplice struttura dati i cui elementi sono accessibili via un indice intero
sequenza di costanti delimitata da parentesi tonde e preceduta dal simbolo #
#(1 2 3) #((’uno’ 1) (due 2) ($3 3))
simboli ed altri array possono non essere preceduti da
#
Variabili
riferimento ad un oggetto
identificatore semplice: sequenza di caratteri alfanumerici; il primo deve essere una lettera aNumber x1
può rifersi ad oggetti differenti in tempi differenti
Smalltalk , Paolo Bison, A.A. 2004-05, 2004-11-13 – p.17/39
Tipi di variabile
campo di validitá
privata (inizia con minuscola)
di istanza
temporanea
•
parametro di blocco o metodo
•
locale a blocco o metodo
condivisa (inizia con Maiuscola)
classe
pool
globale
Smalltalk , Paolo Bison, A.A. 2004-05, 2004-11-13 – p.18/39
Assegnazione
assegna ad una variabile il riferimento ad un oggetto
varId ← espressione a ← 6.0
Dati ← #((’uno’ 1) (due 2) ($3 3)) a ← ’hello’
:= invece di ←
Pseudo-variabili
variabili il cui valore non può essere cambiato:
nil oggetto indefinito true verità logica false falsità logica
self destinatario di un messaggio
super come self, ma ricerca del metodo parte dalla
superclasse della classe un cui metodo contiene
Messaggi
un messaggio è composto da:
un destinatario, sempre valutato
un selettore, mai valutato
una lista di possibili argomenti, tutti valutati turtle go: 30+50
Smalltalk , Paolo Bison, A.A. 2004-05, 2004-11-13 – p.21/39
Tipi di messaggio
esistono tre tipi di messaggi:
unario
binario
a keyword
Smalltalk , Paolo Bison, A.A. 2004-05, 2004-11-13 – p.22/39
Messaggio unario
aReceiver aSelector
non ha parametri
il selettore può essere un qualunque identificatore 5 isNumber
false not 1.5 class
Messaggio binario
aReceiver aSelector anArgument
un unico parametro
usato per operazioni aritmetiche logiche e di confronto
selettore composto di uno o due caratteri non-alfanumerici
1+2 false & true
2 >=3
100@100
Messaggio “a keyword”
aReceiver keyword1: argument1 kewyord2: argument2 ...
keyword
identificatore seguito da :
uno o più parametri
selettore composto dalla concatenazione delle keyword keyword1:kewyord2:
1 between: 0 and: 5
#(1 2 3) at: 2
’t*h’ startingAt: 1 text: ’ts56h’ startingAt: 1
Smalltalk , Paolo Bison, A.A. 2004-05, 2004-11-13 – p.25/39
Regole di composizione
(msg)> unario > binario > a keyword
associazione da sinistra verso destra 2+3*3
2 + 3 squared 2 raisedTo: 3 + 2
Smalltalk , Paolo Bison, A.A. 2004-05, 2004-11-13 – p.26/39
Blocchi
rappresentano espressioni la cui valutazione viene differita nel tempo
sequenza di espressioni separate da . racchiuse da parentesi quadre
[ 2 + 3 +4. 23>=8 ]
può avere parametri e/o variabili temporanee [:y ||x | x ← 6. x+y]
Valutazione di un blocco
il valore di ritorno è il valore dell’ultima espressione
valutazione effettuata inviando un messaggio al blocco:
value (senza parametri)
value: expArg1 (un parametro)
value: exp1 value: exp2 (due parametri)
valueWithArguments: anArray
Valutazione di un blocco [ 2 + 3 +4. 23>=8 ] value [:y ||x | x ← 6. x+y] value: 3
[:x :y :t|x+y+t] valueWithArguments: #(1 2 3) fct value: 3
Smalltalk , Paolo Bison, A.A. 2004-05, 2004-11-13 – p.29/39
Creazione di nuove classi
definite attraverso il System Browser che presenta dei template
intestazione: nome, superclasse, variabili
#NameSuper subclass: #NameOfSubclass instanceVariableNames: ’’
classVariableNames: ’’
poolDictionaries: ’’
category: ’’
Smalltalk , Paolo Bison, A.A. 2004-05, 2004-11-13 – p.30/39
Esempio intestazione
Morph subclass: #Turtle
instanceVariableNames: ’turtlePosition turtleHeading path pathTail pathColor pathThick pathMarks tailUp tailColor tailThick turtleSize turtleShow ’ classVariableNames: ’TurtleColors ’ poolDictionaries: ’’
category: ’myStuff’
Classe Object
radice dell’albero di ereditarietà
metodi comuni a tutti gli oggetti
test di classe
confronto tra oggetti
copia di oggetti
accesso variabili indicizzate
stampa e memorizzazione
gestione errori
Metodi
msg pattern
"comment stating purpose of message"
| temporary variable names | statements
nel template si definiscono
pattern del messaggio (selettore e parametri)
descrizione del metodo
lista variabili locali al metodo
sequenza di espressioni separate da .
Smalltalk , Paolo Bison, A.A. 2004-05, 2004-11-13 – p.33/39
Metodi
valore di ritorno
implicito: self
esplicito: ↑ expr
Smalltalk , Paolo Bison, A.A. 2004-05, 2004-11-13 – p.34/39
Esempio metodo backward: amount
"move the turtle backward"
| point |
point ← Point r: amount
degrees: (180 - turtleHeading).
turtlePosition ← point translateBy:
turtlePosition.
self addToPath.
Creazione di istanze
messaggi standard new o new: alla classe
messaggi a istanze che creano altri oggetti
messaggi specifi di creazione definiti nella classe Turtle new
Array new: 10
1@2 #lulu asString
Strutture di controllo
nel linguaggio solo struttura sequenziale
altre realizzate come messaggi aBoolean ifFalse: aBlock
aBoolean ifTrue: aBlock
aBoolean ifTrue: aBlock1 ifFalse: aBlock2 aInteger timesRepeat: aBlock
aBlock whileTrue: aBlock aCollection do: aBlock
Smalltalk , Paolo Bison, A.A. 2004-05, 2004-11-13 – p.37/39
Nuove strutture di controllo
è possibile creare strutture di controllo
loop-exit
testBlock
postBlock preBlock
F
T
Smalltalk , Paolo Bison, A.A. 2004-05, 2004-11-13 – p.38/39
Metodo looP:exit: