• Non ci sono risultati.

linguaggio OO puro

N/A
N/A
Protected

Academic year: 2021

Condividi " linguaggio OO puro "

Copied!
20
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, ...

(2)

Caratteristiche

 linguaggio OO puro

 dinamico

 gestione della memoria

 interpretato

 ereditarietà singola

Smalltalk , Paolo Bison, A.A. 2004-05, 2004-11-13 – p.3/39

Perchè Smalltalk

 uniforme

 semplice

 potente

 ambiente di programmazione interattivo grafico

(3)

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/

(4)

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.

Smalltalk , Paolo Bison, A.A. 2004-05, 2004-11-13 – p.7/39

Primo programma

 nel Workspace 6+5

 “print it”

(5)

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

(6)

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

Smalltalk , Paolo Bison, A.A. 2004-05, 2004-11-13 – p.11/39

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

 notazione scientifica

1.56e2 -3.5e-4

(7)

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’

(8)

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

Smalltalk , Paolo Bison, A.A. 2004-05, 2004-11-13 – p.15/39

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

#

(9)

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

(10)

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 ←

Smalltalk , Paolo Bison, A.A. 2004-05, 2004-11-13 – p.19/39

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

self

(11)

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

(12)

Messaggio unario

aReceiver aSelector

 non ha parametri

 il selettore può essere un qualunque identificatore 5 isNumber

false not 1.5 class

Smalltalk , Paolo Bison, A.A. 2004-05, 2004-11-13 – p.23/39

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

(13)

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

(14)

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]

 oggetti a tutti gli effetti fct ← [:x | x*x+x]

Smalltalk , Paolo Bison, A.A. 2004-05, 2004-11-13 – p.27/39

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

(15)

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: ’’

(16)

Esempio intestazione

Morph subclass: #Turtle

instanceVariableNames: ’turtlePosition turtleHeading path pathTail pathColor pathThick pathMarks tailUp tailColor tailThick turtleSize turtleShow ’

classVariableNames: ’TurtleColors ’ poolDictionaries: ’’

category: ’myStuff’

Smalltalk , Paolo Bison, A.A. 2004-05, 2004-11-13 – p.31/39

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

(17)

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

(18)

Esempio metodo

backward: amount

"move the turtle backward"

| point |

point ← Point r: amount

degrees: (180 - turtleHeading).

turtlePosition ← point translateBy:

turtlePosition.

self addToPath.

self changed.

↑ self

Smalltalk , Paolo Bison, A.A. 2004-05, 2004-11-13 – p.35/39

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

(19)

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

(20)

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]

Smalltalk , Paolo Bison, A.A. 2004-05, 2004-11-13 – p.39/39

Riferimenti

Documenti correlati

Usare un feltrino a lento rilascio di clorexidina per i siti di emergenza dei cateteri a breve-termine – limitatamente ad adulti e bambini > 2 mesi - se il tasso di CLABSI non

Presso l’Archivio storico provinciale di Benevento sono anche conservati un gran numero di volumi, ancora con la legatura originale, che raccol- gono per lo più documentazione

[r]

Su questa scia si innesta il Seminario “Per un’Europa no exit”, che partendo da un’analisi delle politiche europee, soprattutto quelle relative all’inclusione sociale, alla

In case of the base, valves 1/2 are not optimal choices, as they lead to a delay of the control action related to the residence times on the column plates.. Control

•Accuratezza del punto di arrivo ma nessun controllo sulla traiettoria.. •Applicazioni: Operazioni di Foratura, Saldature

Il progetto europeo deve diventare ancor più inclusivo, in modo da poter ovviare sempre più alle necessità di coloro che escono sconfitti da un lungo processo di