1 fondamenti di programmazione prof.ssa elisa tiezzi programmazione orientata a oggetti

40
1 Fondamenti di Programmazione Prof.ssa Elisa Tiezzi Programmazione orientata a oggetti

Upload: virgilio-fortunato

Post on 02-May-2015

233 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: 1 Fondamenti di Programmazione Prof.ssa Elisa Tiezzi Programmazione orientata a oggetti

1

Fondamenti di Programmazione

Prof.ssa Elisa Tiezzi

Programmazione orientata a oggetti

Page 2: 1 Fondamenti di Programmazione Prof.ssa Elisa Tiezzi Programmazione orientata a oggetti

2

Programmazione OO

• Concetti base:– dati– istruzioni

• Dati:– variabili– tipi

• Istruzioni: – istruzioni base– strutture di controllo– sotto-programmi

Dati Istruzioni = Metodi

Programmazione Procedurale

Dati Metodi = Classi

Programmazione a Oggetti

Page 3: 1 Fondamenti di Programmazione Prof.ssa Elisa Tiezzi Programmazione orientata a oggetti

3

Cosa è un oggetto

Metodi(comportamenti)

Variabili(stato)

Un oggetto è una “scatola” software contenente variabili (che descrivono lo stato di un oggetto) e metodi (detti suoi membri, definiscono i comportamenti)

Page 4: 1 Fondamenti di Programmazione Prof.ssa Elisa Tiezzi Programmazione orientata a oggetti

4

Esempio: i numeri razionali

Variabili di istanza (campi):contengono i valori (lo stato) delnumero razionale

Istanza:un preciso oggetto

Metodi di istanza:agiscono sul numero razionale

3

4

isBigg

er

isEqual

add

sub div

mu

l

razionale 3/4

num

div

Page 5: 1 Fondamenti di Programmazione Prof.ssa Elisa Tiezzi Programmazione orientata a oggetti

5

Cosa è un messaggio

altro oggetto utilizzatodal programma

razionale 3/4

numden

isBigger(razionale di confronto)

Gli oggetti interagiscono e comunicano tra loro usando i messaggiper ottenere maggiori funzionalità e comportamenti più complessi

Page 6: 1 Fondamenti di Programmazione Prof.ssa Elisa Tiezzi Programmazione orientata a oggetti

6

Usare gli oggetti• Inviare un messaggio ad un oggetto significa

invocare un metodo dell’oggetto• Accedere alle variabili di istanza di un

oggetto significa poter manipolare o ispezionare il loro valore

• Sintassi per invocare un metodo/accedere alle variabili di istanza di un oggetto:– all’interno della definizione di un oggetto:

metodo(lista_di_parametri)variabile

– all’esterno della definizione di un oggetto (operatore ‘.’):riferimentoOggetto.metodo(lista_di_parametri)riferimentoOggetto.variabile

Page 7: 1 Fondamenti di Programmazione Prof.ssa Elisa Tiezzi Programmazione orientata a oggetti

7

Cosa è una classe

Una classe è un “prototipo” che definisce le variabili e i metodi comuni a tutti gli oggetti di un certo tipo.Una classe è solo il modello di un oggetto e pertanto non riserva spazio di memoria per i suoi dati.Ogni oggetto ha il suo spazio dati, un oggetto è un’istanza di una classe.

Page 8: 1 Fondamenti di Programmazione Prof.ssa Elisa Tiezzi Programmazione orientata a oggetti

8

Esempio

isBigg

er

isEqual

add

sub div

mu

l

classe Rational

int numint den

Tutti gli oggetti di tipo Rational possiedono i due campi interi num e den ed almeno i 6 metodi riportati

Page 9: 1 Fondamenti di Programmazione Prof.ssa Elisa Tiezzi Programmazione orientata a oggetti

9

isBigg

er

isEqual

add

sub div

mu

l

int num=8int den=15

oggetto 8/15istanza di Rational

isBigg

er

isEqual

add

sub div

mu

l

int num=4int den=5

oggetto 4/5istanza di Rational

Page 10: 1 Fondamenti di Programmazione Prof.ssa Elisa Tiezzi Programmazione orientata a oggetti

10

Dichiarare una classe

• class nome_classe{

// definizione variabili// definizione metodi

}• Esempio:class Rational{

int num;int den;// definizione metodi

}

Page 11: 1 Fondamenti di Programmazione Prof.ssa Elisa Tiezzi Programmazione orientata a oggetti

11

Dichiarare un oggetto

• Sintatticamente la dichiarazione di un oggetto è del tutto analoga alla dichiarazione di una variabile di tipo primitivo

• Esempio:– Rational primoNumero;essendo Rational una classe

• La variabile dichiarata di tipo classe è un indirizzo ad un’area di memoria contenente l’oggetto vero e proprio

Page 12: 1 Fondamenti di Programmazione Prof.ssa Elisa Tiezzi Programmazione orientata a oggetti

12

Istanza di un oggetto

• L’operatore new crea un oggetto del tipo “indicato” dal metodo che immediatamente segue

• Sintassi:– riferimentoOggetto = new NomeClasse(lista_di_parametri);

essendo riferimentoOggetto una variabile di tipo NomeClasse

• L’esecuzione di una tale istruzione comporta:– l’allocazione della memoria necessaria a contenere l’oggetto

– l’assegnazione a riferimentoOggetto dell’indirizzo di inizio dell’area di memoria allocata

– l’inizializzazione delle variabili di istanza dell’oggetto dettate dalla lista di parametri del metodo NomeClasse(lista_di_parametri)

Page 13: 1 Fondamenti di Programmazione Prof.ssa Elisa Tiezzi Programmazione orientata a oggetti

13

Fondere le due fasiRational primoNumero;primoNumero = new Rational(3,4);

è equivalente a

Rational primoNumero = new Rational(3,4);

Page 14: 1 Fondamenti di Programmazione Prof.ssa Elisa Tiezzi Programmazione orientata a oggetti

14

Oggetti e metodi

• Un metodo può ritornare il riferimento ad un oggetto del tipo dichiarato dal valore di ritorno del metodo– NomeClasse nomeMetodo(lista_input)

• Un metodo può avere un parametro formale di tipo classe. Al momento dell’invocazione di un tale metodo, il parametro è inizializzato con la copia– Rational mul(Rational number)

Page 15: 1 Fondamenti di Programmazione Prof.ssa Elisa Tiezzi Programmazione orientata a oggetti

15

Tipi primitivi e tipo classe

• Un metodo non può cambiare il valore di una variabile di un tipo primitivo passatagli come argomento

• Un metodo può cambiare i valori delle variabili di istanza dell’oggetto indirizzato dalla variabile tipo classe che gli è passata come parametro

Page 16: 1 Fondamenti di Programmazione Prof.ssa Elisa Tiezzi Programmazione orientata a oggetti

16

Il metodo main

• main è un metodo speciale dal quale le applicazioni Java iniziano automaticamente l’esecuzione

• Sintassi:public static void main(String args)

• È buona norma non includere il metodo main nella definizione di una classe il cui scopo è esclusivamente quello di definire un tipo– eccezione: per debugging

Page 17: 1 Fondamenti di Programmazione Prof.ssa Elisa Tiezzi Programmazione orientata a oggetti

17

• Esempio:class RationalTest

public static void main(String args)

/* corpo del metodo main */

Page 18: 1 Fondamenti di Programmazione Prof.ssa Elisa Tiezzi Programmazione orientata a oggetti

18

I costruttori

• Un costruttore è un metodo speciale designato a inizializzare le variabili di istanza– nome uguale a quello della classe

• Viene richiamato automaticamente quando l’oggetto è creato– new NomeClasse(lista_di_parametri)

• Un costruttore con una lista di argomenti vuota è detto costruttore di default

• Se nella classe non è presente un costruttore, Java crea automaticamente un costruttore di default

Page 19: 1 Fondamenti di Programmazione Prof.ssa Elisa Tiezzi Programmazione orientata a oggetti

19

Definizione dei Costruttori

• La dichiarazione di un costruttore non include un tipo di ritorno che è comunque un indirizzo– è un errore anteporre la parola chiave void

• Esempio:class Rational

int num, den;Rational(int n, int d)

num = n;den = d;

...

Page 20: 1 Fondamenti di Programmazione Prof.ssa Elisa Tiezzi Programmazione orientata a oggetti

20

Un esempio riassuntivoclass Rational

int num, den; // variabili di istanzaRational(int n, int d) // costruttore

num = n;den = d;

Rational mul(Rational r) // operazione di moltiplicazione

return new Rational(num*r.num,den*r.den);// altre operazioni aritmeticheboolean isBigger(Rational r) // confronto se maggiore

return (num * r.den > den * r.num);// altre operazioni di confronto

}

Page 21: 1 Fondamenti di Programmazione Prof.ssa Elisa Tiezzi Programmazione orientata a oggetti

21

class RationalTest

public static void main(String args)

Rational firstNum = new Rational(3,5);Rational secondNum = new Rational(2,3);boolean isBiggerResult;isBiggerResult = firstNum.isBigger(secondNum);

System.out.println (“Primo>secondo:“+isBiggerResult);

Page 22: 1 Fondamenti di Programmazione Prof.ssa Elisa Tiezzi Programmazione orientata a oggetti

22

Firma (signature) di un metodo• La firma di un metodo è data dal nome del metodo e

dal numero, tipo e ordine dei suoi parametri– Esempio di firme diverse:

• int myMethod(int i) è diverso da int yourMethod(int i)• int myMethod(int i) è diverso da int myMethod(int i, double j)• int myMethod(int i, double j) è diverso da int myMethod(double j, int i)

• Il valore di ritorno di un metodo non fa parte della firma del metodo stesso– Esempio di firme uguali:

• int myMethod(int i) ha la stessa firma di double myMethod(int j)

Page 23: 1 Fondamenti di Programmazione Prof.ssa Elisa Tiezzi Programmazione orientata a oggetti

23

Sovraccaricamento

• Lo stesso nome di un metodo ha più di una definizione all’interno della stessa classe

• I metodi sovraccarichi hanno lo stesso nome ma firme diverse tra loro– I costruttori sono spesso sovraccaricati

Page 24: 1 Fondamenti di Programmazione Prof.ssa Elisa Tiezzi Programmazione orientata a oggetti

24

Esempioclass MethodOverload int square(int x) return x*x; double square(double y) return y*y; int square(double x) return x*x;

…………

sovraccaricamento

errore segnalatodal compilatore

Page 25: 1 Fondamenti di Programmazione Prof.ssa Elisa Tiezzi Programmazione orientata a oggetti

25

Sovraccaricamento e conversione

• Se non si ha la corrispondenza con una qualche firma, Java effettua conversioni di tipo automatiche per trovare un’eventuale corrispondenza– una versione indesiderata del metodo può essere eseguita

Page 26: 1 Fondamenti di Programmazione Prof.ssa Elisa Tiezzi Programmazione orientata a oggetti

26

INCAPSULAMENTO

• Le variabili contenute in un oggetto dovrebbero essere modificate solo dal suo interno, solo i metodi dovrebbero essere gli unici responsabili del cambiamento delle variabili.

• Un oggetto dovrebbe essere incapsulato rispetto a tutto il resto del sistema e dovrebbe interagire con le altre parti del programma solo attraverso un insieme specifico di metodi che definiscono i servizi che fornisce.

Page 27: 1 Fondamenti di Programmazione Prof.ssa Elisa Tiezzi Programmazione orientata a oggetti

27

MODIFICATORI

• Un modificatore è una parola chiave di Java usata per specificare delle caratteristiche particolari di un costrutto del linguaggio.

• Alcuni modificatori sono chiamate modificatori di visibilità perché controllano fino a quale punto del programma è possibile usare un membro della classe.

Page 28: 1 Fondamenti di Programmazione Prof.ssa Elisa Tiezzi Programmazione orientata a oggetti

28

Il modificatore public• Il modificatore public indica la totale assenza di restrizioni di visibilità

• Le classi dichiarate public possono essere referenziate ovunque

public class TwoDimensionalShape

…………class shapeTest

TwoDimensionalShape myShape;…………

}

Page 29: 1 Fondamenti di Programmazione Prof.ssa Elisa Tiezzi Programmazione orientata a oggetti

29

• I campi ed i metodi dichiarati public sono accessibili ovunque

public class A

public int x;public int getX() return x;

class B

public static void main(String[] args){

A a = new A();a.x = 3;System.out.println(a.getX());

}

Page 30: 1 Fondamenti di Programmazione Prof.ssa Elisa Tiezzi Programmazione orientata a oggetti

30

• Le variabili e i metodi dichiarati private sono accessibili soltanto dai metodi della classe in cui sono definiti

Il modificatore private

Page 31: 1 Fondamenti di Programmazione Prof.ssa Elisa Tiezzi Programmazione orientata a oggetti

31

Esempiopublic class TwoDimensionalShape

private int width, height;private int generate( int n )

return 1+(int)( Math.random*n );public void setRandomWidth( int n )

width = generate( n );public int getWidth( ){

return width;}

}

Page 32: 1 Fondamenti di Programmazione Prof.ssa Elisa Tiezzi Programmazione orientata a oggetti

32

class shapeTest

public static void main( String[] args ){

TwoDimensionalShape s = new TwoDimensionalShape();

s.width = s.generate( 100 ); ERRORE DOPPIOs.setRandomWidth( 100 );System.out.println( s.getWidth( ) );

}

Page 33: 1 Fondamenti di Programmazione Prof.ssa Elisa Tiezzi Programmazione orientata a oggetti

33

Caratteristiche dell’OOPOccultamento delle

informazioni

• protegge i dati all’interno di un oggetto– usa variabili di istanza private

• non permette un loro accesso diretto– usa metodi public per accedere alle variabili

Incapsulamento

• gli oggetti incapsulano attributi e metodi

• nasconde i dettagli di una definizione di classe separando– interfaccia (API)– implementazione

Page 34: 1 Fondamenti di Programmazione Prof.ssa Elisa Tiezzi Programmazione orientata a oggetti

34

La parola chiave static• Una variabile definita static è detta variabile di classe

• Essa rappresenta informazioni valide per l’intera classe ed è condivisa da tutte le istanze della classe

• Esempio:public class A static int x;

………

Page 35: 1 Fondamenti di Programmazione Prof.ssa Elisa Tiezzi Programmazione orientata a oggetti

35

• Un metodo definito static è detto metodo di classe

• Esso definisce un comportamento identico per tutte le istanze della classe ossia indipendente dagli oggetti

• Esempio: Math.random()

• E’ un errore di sintassi per un metodo static chiamare un metodo di istanza o accedere ad una variabile di istanza

Page 36: 1 Fondamenti di Programmazione Prof.ssa Elisa Tiezzi Programmazione orientata a oggetti

36

Accedere a membri static• I membri static di una classe

esistono indipendentemente dall’esistenza di una istanza di tale classe

• Due tipi di accesso NomeClasse.nomeMetodo(lista_parametri) NomeClasse.nomeVariabile rifOggetto.nomeMetodo(lista_parametri) rifOggetto.nomeVariabile essendo rifOggetto un riferimento a un

oggetto di tipo NomeClasse

Page 37: 1 Fondamenti di Programmazione Prof.ssa Elisa Tiezzi Programmazione orientata a oggetti

37

La parola chiave final

• La parola chiave final riferita a una variabile indica che essa non può essere modificata– Sintassi: final tipo NOME = costante;– Esempio final double PI = 3.14159;

Page 38: 1 Fondamenti di Programmazione Prof.ssa Elisa Tiezzi Programmazione orientata a oggetti

38

Una libreria di classi è un insieme di classi che aiuta il programmatore nello sviluppo del software.Un compilatore spesso viene distribuito con una libreria di classi fondamentali.Si possono ottenere separatamente delle librerie commerciali.Tecnicamente una libreria non fa parte della definizione del linguaggio.La libreria standard viene distribuita con qualsiasi ambiente di sviluppo.

Librerie di classi

Page 39: 1 Fondamenti di Programmazione Prof.ssa Elisa Tiezzi Programmazione orientata a oggetti

39

API e package

•Una libreria di classi è composta da gruppi di classi tra loro collegate, spesso indicate collettivamente come API (Application Programmer Interface). E’ possibile per esempio riferirsi al Java Database API quando si parla dell’insieme delle classi che permettono di interagire con una base di dati.• Le classi della libreria standard di Java sono raggruppate in package che, come le API, permettono di indicare con un unico nome delle classi tra loro collegate. Ad esempio la classe String fa parte del package java.lang.

Page 40: 1 Fondamenti di Programmazione Prof.ssa Elisa Tiezzi Programmazione orientata a oggetti

40

La clausola IMPORT• Le classi del package java.lang sono automaticamente rese disponobili durante la scrittura di un programma.

• Se si vogliono usare le classi appartenenti ad altri package, occorre specificare il nome della classe insieme al nome del package, oppure usare la clausola import.

• Es.: java.util.Random import java.util.Random import java.util.*