• Non ci sono risultati.

it means just what I choose it to mean, - neither more nor less”

N/A
N/A
Protected

Academic year: 2021

Condividi "it means just what I choose it to mean, - neither more nor less”"

Copied!
10
0
0

Testo completo

(1)

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

(2)

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”

(3)

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

(4)

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

#

(5)

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

(6)

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

(7)

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

(8)

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

(9)

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

(10)

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:



metodo nella classe BlockContext loop: preBlock exit: postBlock

"loop exit control structure"

(self value) ifFalse: [↑preBlock value].

preBlock value.

↑ [self value] whileTrue: [ postBlock value. preBlock

value]

Riferimenti

Documenti correlati

Un numero ha tante cifre significative quante sono le cifre (a partire dalla prima a sinistra non nulla) del numero che si ottiene eliminando l’eventuale virgola

È stato organizzato un corso per docenti sul montaggio e la realizzazione di video amatoriali, che saranno girati personalmente dagli studenti e dalle studentesse

Your doctor will be able to help you with ongoing effects, and also tell you if you are at risk of developing any late occurring side-effects, depending on the type of cancer

Infine recentemente, analizzando 132 carcinomi del colon-retto, caratterizzati da instabilità cromosomica (CIN), sono state identificate 11 mutazioni somatiche in quattro

 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

DALLA CHIESA - OMEGNA QUALIFICA OPERATORE ELETTRICO CORSO DI ESERCITAZIONI PRATICHE CLASSE SECONDA..

Un motore asincrono trifase viene avviato manualmente e ruota in un senso definito convenzionalmente "AVANTI". Dopo 5 secondi dall'avviamento inverte automaticamente il

Dopo altri 4 secondi il secondo motore si arresta automaticamente e il primo riparte, ruotando nel senso definito "INDIETRO".. Sei secondi più tardi il primo motore