Lezione 4 Programmazione Object-Oriented in Javavitsca/Old/PD2002-2003/PDF/progdist... · 2003. 10....

38
"Programmazione Distribuita" - Prof. Scarano Laurea in Informatica A.A. 2002-2003 Università di Salerno 1 Vittorio Scarano Corso di Programmazione Distribuita Laurea di I livello in Informatica Università degli Studi di Salerno Lezione 4 Programmazione Object-Oriented in Java Programmazione Distribuita. Vi.ttorio Scarano 2 Organizzazione della lezione La programmazione orientata agli oggetti – motivazioni, obiettivi e principi guida della progettazione Unified Modeling Language (UML) Alcune semplici classi – Uso della classe Date e GregorianCalendar – Creazione di una nuova classe (Employee) Campi e metodi statici Parametri dei metodi Costruzione di oggetti ed inizializzazione

Transcript of Lezione 4 Programmazione Object-Oriented in Javavitsca/Old/PD2002-2003/PDF/progdist... · 2003. 10....

Page 1: Lezione 4 Programmazione Object-Oriented in Javavitsca/Old/PD2002-2003/PDF/progdist... · 2003. 10. 1. · Lezione 4 Programmazione Object-Oriented in Java Programmazione Distribuita.

"Programmazione Distribuita" - Prof. Scarano

Laurea in Informatica

A.A. 2002-2003 Università di Salerno 1

Vittorio Scarano

Corso di Programmazione DistribuitaLaurea di I livello in Informatica

Università degli Studi di Salerno

Lezione 4Programmazione

Object-Oriented in Java

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

2

Organizzazione della lezione

• La programmazione orientata agli oggetti– motivazioni, obiettivi e principi guida della progettazione

• Unified Modeling Language (UML)• Alcune semplici classi

– Uso della classe Date e GregorianCalendar

– Creazione di una nuova classe (Employee)

• Campi e metodi statici• Parametri dei metodi• Costruzione di oggetti ed inizializzazione

Page 2: Lezione 4 Programmazione Object-Oriented in Javavitsca/Old/PD2002-2003/PDF/progdist... · 2003. 10. 1. · Lezione 4 Programmazione Object-Oriented in Java Programmazione Distribuita.

"Programmazione Distribuita" - Prof. Scarano

Laurea in Informatica

A.A. 2002-2003 Università di Salerno 2

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

3

Organizzazione della lezione

• La programmazione orientata agli oggetti– motivazioni, obiettivi e principi guida della progettazione

• Unified Modeling Language (UML)• Alcune semplici classi

– Uso della classe Date e GregorianCalendar

– Creazione di una nuova classe (Employee)

• Campi e metodi statici• Parametri dei metodi• Costruzione di oggetti ed inizializzazione

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

4

Hardware/Software: una evoluzione sbilanciata

• Hardware: – progresso tecnologico velocissimo

– i PC di oggi erano chiamati supercomputer 20 anni fa

– uso di processori e memorie in moltissimi manufatti

• Software:– di complessità sempre crescente

– che coinvolge team di programmatori

• Obiettivi contrastanti:– un sistema per risolvere problemi in maniera efficiente che

sia però così semplice da essere “gestibile”

Page 3: Lezione 4 Programmazione Object-Oriented in Javavitsca/Old/PD2002-2003/PDF/progdist... · 2003. 10. 1. · Lezione 4 Programmazione Object-Oriented in Java Programmazione Distribuita.

"Programmazione Distribuita" - Prof. Scarano

Laurea in Informatica

A.A. 2002-2003 Università di Salerno 3

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

5

Alcune leggi e strategie…

Hofstadter's Law:It always takes longer than you expect, even when you take Hofstadter's Law into account.

Ninety-Ninety Rule of Project Schedules:The first ninety percent of the task takes ninety percent of the time, and the last ten percent takes the other ninety percent.

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

6

La programmazione orientata agli oggetti

• Una metodologia per costruire sistemi software:– robusti– adattabili e portabili– riusabili

• Principio “economico” prima che informatico:– Dell, Compaq, etc. contro IBM, HP, etc.

– McLaren, Williams contro Ferrari (anni 80)

• L’idea:– “Non importa il colore del gatto, basta che acchiappi il topo”

Mao Tze Tung

– Implementazione nascosta dalla interfaccia

Page 4: Lezione 4 Programmazione Object-Oriented in Javavitsca/Old/PD2002-2003/PDF/progdist... · 2003. 10. 1. · Lezione 4 Programmazione Object-Oriented in Java Programmazione Distribuita.

"Programmazione Distribuita" - Prof. Scarano

Laurea in Informatica

A.A. 2002-2003 Università di Salerno 4

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

7

Obiettivo 1: la robustezza del software

• Software robusto:– capace di trattare in maniera coerente con input “strani”

• Importanza nei sistemi life-critical:– un fallimento: il software per il Therac-25

• cancellazione di caratteri a video ma non dall’input

• Capace di seguire richieste dell’utente:– Esempio: input e memorizzazione di più dati di quelli

previsti

• Correttezza:– per tutti i valori dell’input, compreso i valori detti di

boundary (limite)

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

8

Obiettivo 2: la adattibilità del software

• I programmi hanno una vita molto lunga

• Necessario trattare con la evoluzione dell’ambiente – aumento velocità della CPU, rete

• videogiochi “antichi” non utilizzabili

– sicurezza (alla aumentata “connettività”)

– mutazioni esterne:• anno 2000, Euro, etc.

• Software – capace di evolverecon poco sforzo

– portabile su piattaforme diverse

Page 5: Lezione 4 Programmazione Object-Oriented in Javavitsca/Old/PD2002-2003/PDF/progdist... · 2003. 10. 1. · Lezione 4 Programmazione Object-Oriented in Java Programmazione Distribuita.

"Programmazione Distribuita" - Prof. Scarano

Laurea in Informatica

A.A. 2002-2003 Università di Salerno 5

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

9

Obiettivo 3: la riusabilità del software

• Sviluppo del software di qualità:– costoso

– veloce

• Necessario poter riutilizzare il software già scritto– importanza del lavoro cooperativo

• Riusabilità fatta con sicurezza– la specifica precisa delle componenti da riutilizzare

– permette di evitare possibili errori

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

10

La programmazione a oggetti

• Il programma è costituito da oggetti– scelti tra quelli disponibili o creati ex-novo

– che espongono delle funzionalità

– la cui implementazione si ignora

• Confronta con programmazione strutturata:– algoritmi per risolvere problemi (funzioni)

– (poi) memorizzazione dati in strutture dati

• La OOP inverte l’ordine:– la organizzazione dei dati precede la scelta delle funzionalità

Page 6: Lezione 4 Programmazione Object-Oriented in Javavitsca/Old/PD2002-2003/PDF/progdist... · 2003. 10. 1. · Lezione 4 Programmazione Object-Oriented in Java Programmazione Distribuita.

"Programmazione Distribuita" - Prof. Scarano

Laurea in Informatica

A.A. 2002-2003 Università di Salerno 6

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

11

Caratteristiche chiave della OOP

• Ogni oggetto è responsabile delle azioni correlate ai dati che contiene– un oggetto può manipolare i propri dati ma non deve

(dovrebbe) mai manipolare i dati degli altri.

• Un oggetto espone dei metodi:– funzioni

– che permettono di accedere ai dati nella maniera corretta.

• Chi (o cosa) usa un oggetto ignora i dettagli della implementazione

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

12

Il vocabolario della OOP: le classi

• Classe:

– modello (schema) secondo il quale un oggetto verrà creato (istanziato)

• Tutto quanto è disponibile in Java è in una classe:– la libreria standard fornisce “di tutto, di più”

– anche i nostri programmi sono in una o più classi

– necessaria una accurata progettazione OOP

• Principi guida della progettazione OOP:

– Astrazione

– Incapsulamento

– Modularità

Page 7: Lezione 4 Programmazione Object-Oriented in Javavitsca/Old/PD2002-2003/PDF/progdist... · 2003. 10. 1. · Lezione 4 Programmazione Object-Oriented in Java Programmazione Distribuita.

"Programmazione Distribuita" - Prof. Scarano

Laurea in Informatica

A.A. 2002-2003 Università di Salerno 7

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

13

Principio 1: Astrazione

• Descrizione formale delle caratteristiche fondamentali di un sistema – nomi e funzionalità

• Sufficientemente dettagliata per il comportamento…– sufficientemente astratta (ad alto livello) per non includere dettagli non

necessari

• Astrazione alla progettazione di strutture dati:– Abstract Data Types (ADT)

• modello matematico di organizzazione dei dati

• specifica tipo di dati, operazioni, e parametri delle operazioni

• “cosa fa” non “come lo fa” (interfaccia (interface Java))

• realizzata da una classe Java

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

14

Principio 2: Incapsulamento (Information hiding)

• Le componenti del sistema non devono rivelare dettagli sulle implementazioni interne

• Concede la libertà al programmatore:– le scelte implementative possono essere cambiate

– solo necessario mantenere la interfaccia verso l’esterno

• L’incapsulamento permette la adattabilità– necessario solamente cambiare implementazione interna alla

classe

• L’incapsulamento permette la riusabilità– riuso di componenti con implementazione non nota

Page 8: Lezione 4 Programmazione Object-Oriented in Javavitsca/Old/PD2002-2003/PDF/progdist... · 2003. 10. 1. · Lezione 4 Programmazione Object-Oriented in Java Programmazione Distribuita.

"Programmazione Distribuita" - Prof. Scarano

Laurea in Informatica

A.A. 2002-2003 Università di Salerno 8

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

15

Principio 3: Modularità

• Struttura organizzata in cui componenti diverse di un sistema sono diverse in unità funzionali separate.– Esempio: una casa suddivisa in:

• unità elettrica• unità di riscaldamento e raffreddamento• unità idraulica• unità strutturale (mura)

• Di norma, strutturata in maniera gerarchica:– definizioni simili vengono raggruppate a livelli dallo

specifico verso il generale– gerarchia “is a” (“ è un”)

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

16

Un esempio di gerarchia “is a”

Edifici

Appartamenti Case Commerciali

In parchi In edifici A 2 piani Basse Grattacieli

Page 9: Lezione 4 Programmazione Object-Oriented in Javavitsca/Old/PD2002-2003/PDF/progdist... · 2003. 10. 1. · Lezione 4 Programmazione Object-Oriented in Java Programmazione Distribuita.

"Programmazione Distribuita" - Prof. Scarano

Laurea in Informatica

A.A. 2002-2003 Università di Salerno 9

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

17

Il vocabolario della OOP: gli oggetti

• Tre caratteristiche fondamentali:– il comportamento dell’oggetto:

• quali metodi possono essere applicati?

– lo stato dell’oggetto:• come reagisce l’oggetto?

– l’identità dell’oggetto:• come si distingue l’oggetto tra altri oggetti simili?

• Tutti gli oggetti istanza della stessa classe:• hanno lo stesso comportamento

• differiscono di solito nello stato

• differiscono semprenella identità

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

18

Progettare con oggetti

• Identificare le classi ed i metodi da applicare– nella programmazione procedurale si definivano prima gli

algoritmi e poi la struttura dati

• Nella fase di progettazione, si arriva ad una descrizione del problema in linguaggio naturale

• Una regola empirica da applicare : – nella descrizione in linguaggio naturale del problema

• i sostantivi sono le classi

• i verbi sono i metodi

Page 10: Lezione 4 Programmazione Object-Oriented in Javavitsca/Old/PD2002-2003/PDF/progdist... · 2003. 10. 1. · Lezione 4 Programmazione Object-Oriented in Java Programmazione Distribuita.

"Programmazione Distribuita" - Prof. Scarano

Laurea in Informatica

A.A. 2002-2003 Università di Salerno 10

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

19

Progettare con oggetti: un esempio

• Per elaborare ordini in un magazzino merci:– Le classi possono essere:

• Articolo (Item)• Ordine (Order)• Indirizzo per la spedizione (Shipping Address)• Pagamento (Payment)• Conto (Account)

– I metodi possono essere:• Aggiungere un articolo (add) ad un ordine• Spedire (ship) o annullare (cancel) un ordine• Un pagamento viene applicato (apply) ad un ordine

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

20

Relazioni tra classi

• Tra le tante relazioni possibili, le più importanti:– Dipendenza

– Aggregazione

– Ereditarietà

• Le relazioni tra classi – formano un diagramma delle classi

– usato per modellare il sistema software da progettare

Page 11: Lezione 4 Programmazione Object-Oriented in Javavitsca/Old/PD2002-2003/PDF/progdist... · 2003. 10. 1. · Lezione 4 Programmazione Object-Oriented in Java Programmazione Distribuita.

"Programmazione Distribuita" - Prof. Scarano

Laurea in Informatica

A.A. 2002-2003 Università di Salerno 11

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

21

Relazioni: Dipendenza

• La relazione più comune e generale:– una classe A dipende da un’altra classe B se gli oggetti di A

devono accedere a metodi degli oggetti di B

• Esempio:– gli oggetti della classe Orderdevono necessariamente usare

oggetti della classe Account • controllano lo stato del conto del cliente prima di effettuare la

spedizione

– gli oggetti della classe Item, invece, non devono accedere a oggetti della classe Account.

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

22

Relazioni: Aggregazione ed ereditarietà

• Aggregazione:– un oggetto della classe A contiene oggetti della classe B

– esempio:• un oggetto della classe Order contiene oggetti della classe Item

• Ereditarietà– relazione tra una classe più specializzata ed una più generale

– esempio:• una classe RushOrder(ordine urgente) specializza (eredita) da una

classe Order– eredita metodi ma ha suoi propri metodi specifici

Page 12: Lezione 4 Programmazione Object-Oriented in Javavitsca/Old/PD2002-2003/PDF/progdist... · 2003. 10. 1. · Lezione 4 Programmazione Object-Oriented in Java Programmazione Distribuita.

"Programmazione Distribuita" - Prof. Scarano

Laurea in Informatica

A.A. 2002-2003 Università di Salerno 12

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

23

Un esempio sulla ereditarietà

• Una classe Personache ha:– stato: nome, cognome, annoDiNascita

– metodi: getCognome(), getNome(), dimmiEta()

• Una classe Studente specializza Personaaggiungendo– allo stato: matricola, scuola, classe, sezione, voti, etc.

– metodi: annoDiDiploma(), votoMaturità(), etc.

• In questa maniera Studenteeredita i metodi di Persona

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

24

Organizzazione della lezione

• La programmazione orientata agli oggetti– motivazioni, obiettivi e principi guida della progettazione

• Unified Modeling Language (UML)• Alcune semplici classi

– Uso della classe Date e GregorianCalendar

– Creazione di una nuova classe (Employee)

• Campi e metodi statici• Parametri dei metodi• Costruzione di oggetti ed inizializzazione

Page 13: Lezione 4 Programmazione Object-Oriented in Javavitsca/Old/PD2002-2003/PDF/progdist... · 2003. 10. 1. · Lezione 4 Programmazione Object-Oriented in Java Programmazione Distribuita.

"Programmazione Distribuita" - Prof. Scarano

Laurea in Informatica

A.A. 2002-2003 Università di Salerno 13

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

25

Unified Modeling Language

• Un linguaggio per specificare, visualizzare costruire e documentare le componenti di un sistema software

• UML definisce una ampia varietà di diagrammi:– diagrammi di classe

– diagrammi di collaborazione

– diagrammi di stato

– ….

• Notazione simbolica per rappresentare le relazioni tra classi in maniera semplice, chiara e completa

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

26

Le relazioni tra classi in UML (1)

• Dipendenza– una classe A dipende da un’altra classe B se gli oggetti di A

devono accedere a metodi degli oggetti di B

• Esempio:– gli oggetti della classe Orderdevono necessariamente usare

oggetti della classe Account

Order Account

Page 14: Lezione 4 Programmazione Object-Oriented in Javavitsca/Old/PD2002-2003/PDF/progdist... · 2003. 10. 1. · Lezione 4 Programmazione Object-Oriented in Java Programmazione Distribuita.

"Programmazione Distribuita" - Prof. Scarano

Laurea in Informatica

A.A. 2002-2003 Università di Salerno 14

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

27

Le relazioni tra classi in UML (2)

• Aggregazione:– un oggetto della classe A contiene oggetti della classe B

• Esempio:• un oggetto della classe Ordercontiene oggetti della classe Item

Order Item

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

28

Le relazioni tra classi in UML (3)

• Ereditarietà– relazione tra una classe più specializzata ed una più generale

• Esempio:• una classe RushOrder(ordine urgente) specializza (eredita) da una

classe Order

Order

RushOrder

Page 15: Lezione 4 Programmazione Object-Oriented in Javavitsca/Old/PD2002-2003/PDF/progdist... · 2003. 10. 1. · Lezione 4 Programmazione Object-Oriented in Java Programmazione Distribuita.

"Programmazione Distribuita" - Prof. Scarano

Laurea in Informatica

A.A. 2002-2003 Università di Salerno 15

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

29

Un esempio in UML:

Classe Studente

Persona

TasseScolastiche

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

30

Programmazione OO e procedurale (1)

• Programmazione procedurale– Due tecniche:

• top-down: raffinamento graduale di operazioni in operazioni più piccole e semplici fino alla codifica in un linguaggio

• bottom-up: scrittura procedure per compiti semplici e loro composizione per ottenere la funzionalità desiderata

• Di solito, utile una miscela delle due tecniche:– provvedere ad una prima analisi top-downcon scrittura del

codice e composizione bottom-up

Page 16: Lezione 4 Programmazione Object-Oriented in Javavitsca/Old/PD2002-2003/PDF/progdist... · 2003. 10. 1. · Lezione 4 Programmazione Object-Oriented in Java Programmazione Distribuita.

"Programmazione Distribuita" - Prof. Scarano

Laurea in Informatica

A.A. 2002-2003 Università di Salerno 16

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

31

Programmazione OO e procedurale (2)

• Caratteristica:– identificazione ed isolamento delle classi

– (e solo dopo)identificazione dei metodi delle classi

• Vantaggi:– modularizzazione in maniera indipendente

• lavoro per team di programmatori

– identificazione e raggruppamento chiaro dei metodi• invece di 2000 funzioni, si hanno 100 classi con 20 metodi

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

32

Alcune domande….

• Una buona programmazione procedurale è in effetti programmazione orientata agli oggetti?

• in effetti, scomporre ed isolare le funzioni ed evitare variabili e dati globali è una buona tecnica, indipendentemente dalla metodologiausata

• Si può programmare ad oggetti con un linguaggio che non sia object-oriented?

• posso evitare di imparare Java o C++ e continuare a usare il C?

Page 17: Lezione 4 Programmazione Object-Oriented in Javavitsca/Old/PD2002-2003/PDF/progdist... · 2003. 10. 1. · Lezione 4 Programmazione Object-Oriented in Java Programmazione Distribuita.

"Programmazione Distribuita" - Prof. Scarano

Laurea in Informatica

A.A. 2002-2003 Università di Salerno 17

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

33

Ed alcune risposte (parziali)…

• “Una buona programmazione procedurale è in effetti programmazione orientata agli oggetti?”– Il vantaggio di avere la classee di usarla per avere più

oggettidello stesso tipo non può essere ottenuto in un linguaggio procedurale

• “Si può programmare ad oggetti con un linguaggio che non sia object-oriented?”– Si, così come è possibile inchiodare un chiodo usando un

cacciavite invece di un martello.• (sarebbe “No”)

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

34

Organizzazione della lezione

• La programmazione orientata agli oggetti– motivazioni, obiettivi e principi guida della progettazione

• Unified Modeling Language (UML)• Alcune semplici classi

– Uso della classe Date e GregorianCalendar

– Creazione di una nuova classe (Employee)

• Campi e metodi statici• Parametri dei metodi• Costruzione di oggetti ed inizializzazione

Page 18: Lezione 4 Programmazione Object-Oriented in Javavitsca/Old/PD2002-2003/PDF/progdist... · 2003. 10. 1. · Lezione 4 Programmazione Object-Oriented in Java Programmazione Distribuita.

"Programmazione Distribuita" - Prof. Scarano

Laurea in Informatica

A.A. 2002-2003 Università di Salerno 18

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

35

Oggetti e variabili oggetto

• Per lavorare con gli oggetti – si deve costruirli specificando lo stato iniziale

• In Java esistono i costruttori– un metodo speciale offerto dalla classe che permette di

costruire, inizializzandone il valore, nuovi oggetti

• Un esempio:– la classe Date

• Un commento:• perché si ritiene di usare una classe e non un tipo predefinito (come

in alcuni linguaggi)?

• perché una classe è modificabile, un tipo primitivo no.

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

36

La classe Date

• I costruttori hanno sempre lo stesso nome della classe

• Per costruire un nuovo oggetto si combina il costruttore con l’operatore new

• Cosa si fa dell’oggetto creato?– lo si può passare a un metodo:

– si può invocarne un metodo:

– si assegna ad una variabile:

new Date()

System.out.println(new Date());

String s = new Date().toString();

Date compleanno = new Date();

Page 19: Lezione 4 Programmazione Object-Oriented in Javavitsca/Old/PD2002-2003/PDF/progdist... · 2003. 10. 1. · Lezione 4 Programmazione Object-Oriented in Java Programmazione Distribuita.

"Programmazione Distribuita" - Prof. Scarano

Laurea in Informatica

A.A. 2002-2003 Università di Salerno 19

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

37

Variabili di riferimento ( reference)

• Le variabili oggetto contengono riferimenti a oggetti,non oggetti– l’operatore new restituisce un riferimento all’oggetto

creato

– possibili assegnarle a null per indicare che non fa riferimento ad alcun oggetto

– la copia di variabili oggetto effettua la copia dei riferimenti non degli oggetti

compleanno

scadenza

Date compleanno = new Date();Date scadenza = compleanno;

Date

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

38

Classe Date

• Memorizza un punto temporale:– implementazione: numero (positivo o negativo) di

millisecondi trascorsi dalla epoch• 1 gennaio 1970 Greenwich Mean Time

• La progettazione object-oriented: un esempio– una descrizione di data (31 dicembre 1976, 23:59:59) è una

convenzione arbitraria disciplinata da un calendario– il calendario è quello gregoriano

• (esistono anche quello ebraico, cinese etc.)

– separazionetra il tempo (Date) e la rappresentazione mediante convenzioni (GregorianCalendar)

– possibile usare altri calendari

Page 20: Lezione 4 Programmazione Object-Oriented in Javavitsca/Old/PD2002-2003/PDF/progdist... · 2003. 10. 1. · Lezione 4 Programmazione Object-Oriented in Java Programmazione Distribuita.

"Programmazione Distribuita" - Prof. Scarano

Laurea in Informatica

A.A. 2002-2003 Università di Salerno 20

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

39

Uso di Date e GregorianCalendar

• Classe Date : pochi metodi

– metodo before e after:

• Classe GregorianCalendar : molti metodi e costruttori

if (today.before(compleanno))System.out.println (“Comprare il regalo!”);

elseSystem.out.println (“Troppo tardi: un’altra figuraccia!”);

GregorianCalendar s1 = new GregorianCalendar(); //data e ora della costruzioneGregorianCalendar s2 = new GregorianCalendar(1999,11,31);GregorianCalendar s3 = new GregorianCalendar(1999,Calendar.DECEMBER,31);GregorianCalendar s4 =

new GregorianCalendar(1999,Calendar.DECEMBER,31, 23, 59, 59);

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

40

Uso di GregorianCalendar

• Metodo get– preleva informazioni da un oggetto

– uso di costanti

• Metodo set– modifica lo stato di un oggetto GregorianCalendar

• Metodo add

GregorianCalendar now = new GregorianCalendar();int mese = now.get(Calendar.MONTH);int giorno = now.get (Calendar.DAY_OF_WEEK);

scadenza.set(2001, Calendar.April, 15);

scadenza.add(Calendar.MONTH, 2); //sposta avanti di 2 mesi

Page 21: Lezione 4 Programmazione Object-Oriented in Javavitsca/Old/PD2002-2003/PDF/progdist... · 2003. 10. 1. · Lezione 4 Programmazione Object-Oriented in Java Programmazione Distribuita.

"Programmazione Distribuita" - Prof. Scarano

Laurea in Informatica

A.A. 2002-2003 Università di Salerno 21

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

41

Alcuni commenti

• Metodi di modifica– cambiano lo stato dell’oggetto (Es. set, add )

• Metodi di accesso– leggono lo stato dell’oggetto (Es. get)

• Convenzione in Java:– i metodi di modifica iniziano con set

– i metodi di accesso iniziano con get

– Esempio: metodo setTime e getTime

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

42

Conversione tra Date e GregorianCalendar

• Conversione da GregorianCalendar a Date

• Conversione da Date a GregorianCalendar

• Maggiori dettagli…– l’esempio CalendarTest.java (pag. 134-136)

– la nota API a pag. 136 del libro

GregorianCalendar now = new GregorianCalendar();Date ora = now.getTime();

GregorianCalendar now = new GregorianCalendar();now.setTime(ora);int anno = now.get(Calendar.YEAR);

Page 22: Lezione 4 Programmazione Object-Oriented in Javavitsca/Old/PD2002-2003/PDF/progdist... · 2003. 10. 1. · Lezione 4 Programmazione Object-Oriented in Java Programmazione Distribuita.

"Programmazione Distribuita" - Prof. Scarano

Laurea in Informatica

A.A. 2002-2003 Università di Salerno 22

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

43

Costruzioni di classi personalizzate

• Definizioni di classi più complesse– con più metodi e costruttori

– di norma senza il metodo main

• Una convenzione importante (in Java):– si definiscono prima i metodi di una classe

• la sua interfaccia verso l’esterno

– e poi si definiscono i campi (stato) della classe

• Esempio:– definizione di una classe Employee (impiegato)

– con metodi per il nome, il salario (aumenti etc.), data di assunzione etc.

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

44

Definizione di una classe

• In generale:

class NomeDellaClasse {costruttore1 (..)costruttore2 (..)…………metodo1 (..)metodo2 (..)…………campo1

campo2

…………

}

Page 23: Lezione 4 Programmazione Object-Oriented in Javavitsca/Old/PD2002-2003/PDF/progdist... · 2003. 10. 1. · Lezione 4 Programmazione Object-Oriented in Java Programmazione Distribuita.

"Programmazione Distribuita" - Prof. Scarano

Laurea in Informatica

A.A. 2002-2003 Università di Salerno 23

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

45

Definizione di una classe Employee

import java.util.*; // per Date e Calendarpublic class Employee {// costruttore

public Employee (String n, double s, int year, int month, int day)

{ name = n;salary = s;GregorianCalendar cal =

new GregorianCalendar(year,month-1, day);

hireDay = cal.getTime(); }public String getName () { return name;}private String name;private double salary;private Date hireDay;

}

• Il costruttore– stesso nome della classe– assegna i campi

dell’oggetto che costruisce

• Un metodo di accesso– restituisce il nome

• Campi della istanza– una stringa (Nome)– un double (salario)– data di assunzione– tutti campi privati

Employee.java

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

46

Definizione di una classe EmployeeTest

import java.util.*; public class EmployeeTest {public static void main (String [ ] args) {

Employee[ ] staff = new Employee [ 3 ] ;staff [0]=new Employee (“Gianni”, 30000,

1987, 12, 10); staff [1]=new Employee (“Giorgio”, 35000,

1985, 10, 31); staff [2]=new Employee (“Ugo”, 28000,

2000, 1, 1); for (int i=0; i< staff.length; i++)

System.out.println (“Nome:”+ staff[i].getName() +“ Salario:” + staff[i].getSalary() +“ Assunto:”+ staff[i].getHireDay() );

}

}

• Dichiarazione di array di Employee

• Assegnazione:– uso del costruttore

• Stampa dei dati inseriti– uso di metodi getSalary() e

getHireDay() definiti in maniera simile a getName() (vedi libro)

EmployeeTest.java

Page 24: Lezione 4 Programmazione Object-Oriented in Javavitsca/Old/PD2002-2003/PDF/progdist... · 2003. 10. 1. · Lezione 4 Programmazione Object-Oriented in Java Programmazione Distribuita.

"Programmazione Distribuita" - Prof. Scarano

Laurea in Informatica

A.A. 2002-2003 Università di Salerno 24

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

47

Compilazione ed esecuzione

C:\> javac Employee.javaC:\> javac EmployeeTest.javaC:\> java EmployeeTestNome:Gianni Salario:30000.0 Assunto:Thu Dec 10 ….Nome:Giorgio Salario:35000.0 Assunto:Thu Oct 31 ….Nome:Ugo Salario:28000.0 Assunto:Sat Jan 01 ….C:\>

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

48

Java è dinamico, vero?

• La classe Employee viene caricata dalla macchina virtuale durante la esecuzione

• Facciamo una prova:– modifichiamo il costruttore in modo da inserire un salario

negativo (il valore negativo del salario passato dal costruttore!)

– ricompiliamo la classe Employee

– eseguiamo senza ricompilare EmployeeTest

– e….

Page 25: Lezione 4 Programmazione Object-Oriented in Javavitsca/Old/PD2002-2003/PDF/progdist... · 2003. 10. 1. · Lezione 4 Programmazione Object-Oriented in Java Programmazione Distribuita.

"Programmazione Distribuita" - Prof. Scarano

Laurea in Informatica

A.A. 2002-2003 Università di Salerno 25

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

49

Compilazione ed esecuzione

C:\> javac Employee.javaC:\> javac EmployeeTest.javaC:\> java EmployeeTestNome:Gianni Salario:30000.0 Assunto:Thu Dec 10 …Nome:Giorgio Salario:35000.0 Assunto:Thu Oct 31 …Nome:Ugo Salario:28000.0 Assunto:Sat Jan 01 …C:\> javac Employee.javaC:\> java EmployeeTestNome:Gianni Salario:-30000.0 Assunto:Thu Dec 10 …Nome:Giorgio Salario:-35000.0 Assunto:Thu Oct 31 …Nome:Ugo Salario:-28000.0 Assunto:Sat Jan 01 …C:\>

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

50

Compilazione ed esecuzione

C:\> javac Employee.javaC:\> javac EmployeeTest.javaC:\> java EmployeeTestNome:Gianni Salario:30000.0 Assunto:Thu Dec 10 …Nome:Giorgio Salario:35000.0 Assunto:Thu Oct 31 …Nome:Ugo Salario:28000.0 Assunto:Sat Jan 01 …C:\> javac Employee.javaC:\> java EmployeeTestNome:Gianni Salario:-30000.0 Assunto:Thu Dec 10 …Nome:Giorgio Salario:-35000.0 Assunto:Thu Oct 31 …Nome:Ugo Salario:-28000.0 Assunto:Sat Jan 01 …C:\>

Page 26: Lezione 4 Programmazione Object-Oriented in Javavitsca/Old/PD2002-2003/PDF/progdist... · 2003. 10. 1. · Lezione 4 Programmazione Object-Oriented in Java Programmazione Distribuita.

"Programmazione Distribuita" - Prof. Scarano

Laurea in Informatica

A.A. 2002-2003 Università di Salerno 26

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

51

Una descrizione in UML

«constructor»+Employee(n: String, s:double, year: int,

month: int, day: int)«misc»+ getName() : String+ getSalary() : double+ getHireDay() : Date+ raiseSalary(perCent double)

- name : String- salary : double- hireDay : Date

Employee

«misc»+ main (String [ ] args)

EmployeeTest

Nome della classe

Variabili delle istanze

Metodi delle istanze

Modificatori di accesso

- = privato+ = pubblico

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

52

Alcuni commenti sui costruttori

• Costruttore: metodo con lo stesso nome della classe

• Attenzione:– un costruttore può essere chiamato solamente con

l’operatore new

– una classe può avere più costruttori– un costruttore può accettare zero, uno o più

parametri– un costruttore non restituisce un valore

Page 27: Lezione 4 Programmazione Object-Oriented in Javavitsca/Old/PD2002-2003/PDF/progdist... · 2003. 10. 1. · Lezione 4 Programmazione Object-Oriented in Java Programmazione Distribuita.

"Programmazione Distribuita" - Prof. Scarano

Laurea in Informatica

A.A. 2002-2003 Università di Salerno 27

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

53

Un tipico errore nei costruttori

• Dove è l’errore?– stiamo oscurando con variabili locali al costruttore i campi

della istanza:

public class Employee {public Employee (String n, double s, int year, int month, int day){ String name = n;

double salary = s;Date hireDay = new GregorianCalendar(year, month-1,day);

}….

private String name;private double salary;private Date hireDay;

}

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

54

Il metodo raiseSalary()

• Per poter modificare il salario di un dipendente

• Implementato così:

• Chiamato così:

public class Employee {….public void raiseSalary (double perCent) {

double raise = salary * perCent/100; // calcolo aumentosalary += raise; // aggiorno stipendio

}….

private String name;private double salary;private Date hireDay;

}

Employee e = new Employee (“tizio”, 1000, 1998, 12, 1);e.raiseSalary(5.3);

Page 28: Lezione 4 Programmazione Object-Oriented in Javavitsca/Old/PD2002-2003/PDF/progdist... · 2003. 10. 1. · Lezione 4 Programmazione Object-Oriented in Java Programmazione Distribuita.

"Programmazione Distribuita" - Prof. Scarano

Laurea in Informatica

A.A. 2002-2003 Università di Salerno 28

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

55

I parametri di raiseSalary()

• Un parametro esplicito(perCent) ed uno implicito (l’oggetto che figura prima della chiamata del metodo)

• Ci si può riferire al parametro implicito con this

public void raiseSalary (double perCent)

e.raiseSalary(5.3);

public class Employee {….public void raiseSalary (double perCent) {

double raise = this.salary * perCent/100; // calcolo aumentothis.salary += raise; // aggiorno stipendio

}…}

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

56

L’importanza della privatezza dei dati

• Campi privati (name, salary, hireDay)– accesso esclusivamente attraverso i metodi (pubblici)

• Se si riscontrano errori: – si conosce esattamente quali sono i metodi che modificano i

campi

– che si trovano all’interno della classe

• Si può modifica la implementazione semplicemente modificando i metodi

• Eventuali errori di assegnazione possono essere riconosciuti dai metodi (salario < 0)

Page 29: Lezione 4 Programmazione Object-Oriented in Javavitsca/Old/PD2002-2003/PDF/progdist... · 2003. 10. 1. · Lezione 4 Programmazione Object-Oriented in Java Programmazione Distribuita.

"Programmazione Distribuita" - Prof. Scarano

Laurea in Informatica

A.A. 2002-2003 Università di Salerno 29

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

57

Un esempio con la classe Employee

• Ricordiamo che:

– il metodo raiseSalary è pubblico

– mentre il campo salary è privato

public class Employee {….public void raiseSalary (double perCent) {

double raise = salary * perCent/100; // calcolo aumentosalary += raise; // aggiorno stipendio

}….

private String name;private double salary;private Date hireDay;

}

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

58

Un errore evitato a tempo di compilazione!!

• Sarebbe possibile scrivere in EmployeeTest:

• Morale:– non dichiarare campi istanza pubblici campo

– ma fornire la implementazione di metodi getCampo(), setCampo() per l’accesso al campo

public class EmployeeTest {public static void main (String [ ] args) {

Employee[ ] staff = new Employee [ 3 ] ;….staff[0].raiseSalary(5.3); // ok, accesso con metodo pubblico…. // poi, per errore….staff[0].salary = 1000; // NO! errore IN COMPILAZIONE!

}}

Page 30: Lezione 4 Programmazione Object-Oriented in Javavitsca/Old/PD2002-2003/PDF/progdist... · 2003. 10. 1. · Lezione 4 Programmazione Object-Oriented in Java Programmazione Distribuita.

"Programmazione Distribuita" - Prof. Scarano

Laurea in Informatica

A.A. 2002-2003 Università di Salerno 30

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

59

Accesso dei metodi ai dati privati

• Una caratteristica sorprendente:– i metodi di un oggetto accedono ai dati privati di tutti gli

oggetti della stessa classe

• Esempio:

– il metodo equals() accede al campo name sia dell’oggetto a cui appartiene sia al campo privatodell’oggetto Employee other

public class Employee {…boolean equals (Employee other) {

return name.equals(other.name);}

…}

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

60

Metodi privati

• Pratica di buona programmazione:– I campi istanza sono privati ed i metodi pubblici

• Eccezione:• metodi privati che suddividono il codice in moduli indipendenti

(usati solo da altri metodi della classe)• possibile cambiarlo senza preoccuparsi di chi lo usa: solamente i

metodi della classe lo usano

• Campi di istanza final– tipo di campo in cui il valore assegnato dal costruttore non può essere

cambiato. Esempio: il nome di un impiegatopublic class Employee {

…String final name;

}

Page 31: Lezione 4 Programmazione Object-Oriented in Javavitsca/Old/PD2002-2003/PDF/progdist... · 2003. 10. 1. · Lezione 4 Programmazione Object-Oriented in Java Programmazione Distribuita.

"Programmazione Distribuita" - Prof. Scarano

Laurea in Informatica

A.A. 2002-2003 Università di Salerno 31

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

61

Organizzazione della lezione

• La programmazione orientata agli oggetti– motivazioni, obiettivi e principi guida della progettazione

• Unified Modeling Language (UML)• Alcune semplici classi

– Uso della classe Date e GregorianCalendar

– Creazione di una nuova classe (Employee)

• Campi e metodi statici• Parametri dei metodi• Costruzione di oggetti ed inizializzazione

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

62

Campi statici

• Una variabile statica (di classe) è una variabile di cui ne esiste solamente una copia per tutta la classe

• Esempio: supponiamo di voler assegnare un campo ID ad ogni impiegato della classe Employee

– aggiungiamo:• una variabile di istanza (per ogni singolo impiegato) id

• una variabile statica (per tutti gli oggetti della classe) nextId che viene inizializzata (1 volta) ad 1.

public class Employee {…private int id;private static int nextId = 1;

}

Page 32: Lezione 4 Programmazione Object-Oriented in Javavitsca/Old/PD2002-2003/PDF/progdist... · 2003. 10. 1. · Lezione 4 Programmazione Object-Oriented in Java Programmazione Distribuita.

"Programmazione Distribuita" - Prof. Scarano

Laurea in Informatica

A.A. 2002-2003 Università di Salerno 32

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

63

L’uso di campi statici

• Implementiamo un metodo per assegnare l’id:

• Così dopo ogni chiamata di setId() il prossimo dipendente prenderà una nuova id.

public class Employee {…public void setId() {

id = nextId++;}private int id;private static int nextId = 1;

}

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

64

La nuova versione di Employee

import java.util.*; public class Employee {

….public void setId() {

id = nextId++;}public int getId (){

return id;}….

// campi delle istanze della classeprivate String name;private double salary;private Date hireDay;private int id;private static int nextId = 1;

}

• Due nuovi metodi:– uno per settare l’Id– l’altro per leggerla

• Il campo id– risulta essere privato:

• accesso solo tramite setId() e getId()

• Il campo nextId– static (unico per tutta la

classe)– viene incrementato ogni

volta che l’id è usato da un impiegato

Employee.java

Page 33: Lezione 4 Programmazione Object-Oriented in Javavitsca/Old/PD2002-2003/PDF/progdist... · 2003. 10. 1. · Lezione 4 Programmazione Object-Oriented in Java Programmazione Distribuita.

"Programmazione Distribuita" - Prof. Scarano

Laurea in Informatica

A.A. 2002-2003 Università di Salerno 33

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

65

La nuova classe EmployeeTest

import java.util.*; public class EmployeeTest {public static void main (String [ ] args) {

Employee[ ] staff = new Employee [ 3 ] ;staff [0]=new Employee (“Gianni”, 30000,

1987, 12, 10); staff [1]=new Employee (“Giorgio”, 35000,

1985, 10, 31); staff [2]=new Employee (“Ugo”, 28000,

2000, 1, 1); for (int i=0; i< staff.length; i++) {

staff[i].setId();System.out.println (

“Nome:”+ staff[i].getName() +“ Salario:” + staff[i].getSalary() +“ Assunto:”+ staff[i].getHireDay() +“ Id:” + staff[i].getId() );

}}}

• Per ogni staff– setto la ID

– questo fa incrementare nextId (campo statico)

– alla stampa, l’id sarà 1,2,3 per i tre impiegati

EmployeeTest.java

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

66

Costanti statiche

• Le costanti statiche sono abbastanza comuni– classicamente in Math vengono definiti valori utili

• Tipicamente le costanti statiche sono allo stesso tempo public e final:– questo va bene: risultano accessibili solamente in lettura (di

fatto) non essendo modificabili

• Altri esempi di costanti:– la codifica intera dei mesi nella classe Calendar

public class Math {…public static final double PI = 3.14159;

}

Page 34: Lezione 4 Programmazione Object-Oriented in Javavitsca/Old/PD2002-2003/PDF/progdist... · 2003. 10. 1. · Lezione 4 Programmazione Object-Oriented in Java Programmazione Distribuita.

"Programmazione Distribuita" - Prof. Scarano

Laurea in Informatica

A.A. 2002-2003 Università di Salerno 34

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

67

Metodi statici

• Sono metodi che non operano su oggetti (non hanno parametri impliciti)

• Esempio: i metodi messi a disposizione da Math– Math.pow(x,y)

• Non è necessario chiamare il metodo statico da un oggetto– basta chiamare il metodo con il nome della classe

• I metodi statici possono accedere ai campi statici:public class Employee {

…public static int getNextId() { return nextId; }

}

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

68

Metodi statici particolari

• Metodi fabbricatori– metodi che pur non essendo costruttori restituiscono un

oggetto della classe

• Metodo main ()

– permette la esecuzione di un programma associato ad una classe

– spesso utile aggiungere un metodo main ad una classe anche se non si userà perché può servire per testare il comportamento della classe

• esempio: si può aggiungere un main di test a Employee

Page 35: Lezione 4 Programmazione Object-Oriented in Javavitsca/Old/PD2002-2003/PDF/progdist... · 2003. 10. 1. · Lezione 4 Programmazione Object-Oriented in Java Programmazione Distribuita.

"Programmazione Distribuita" - Prof. Scarano

Laurea in Informatica

A.A. 2002-2003 Università di Salerno 35

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

69

Organizzazione della lezione

• La programmazione orientata agli oggetti– motivazioni, obiettivi e principi guida della progettazione

• Unified Modeling Language (UML)• Alcune semplici classi

– Uso della classe Date e GregorianCalendar

– Creazione di una nuova classe (Employee)

• Campi e metodi statici• Parametri dei metodi• Costruzione di oggetti ed inizializzazione

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

70

Parametri dei metodi

• Passaggio di parametri:– per valore

• il valore del parametro attuale viene copiato nel parametro formale

• le modifiche effettuate dal metodo non hanno effetto sulla variabile passata al metodo (parametro attuale)

– per riferimento • il metodo riceve la locazione di memoria della variabile

• le modifiche effettuate dal metodo sono effettuate sulla variabile passata al metodo (parametro attuale)

Page 36: Lezione 4 Programmazione Object-Oriented in Javavitsca/Old/PD2002-2003/PDF/progdist... · 2003. 10. 1. · Lezione 4 Programmazione Object-Oriented in Java Programmazione Distribuita.

"Programmazione Distribuita" - Prof. Scarano

Laurea in Informatica

A.A. 2002-2003 Università di Salerno 36

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

71

Il passaggio di parametri in Java

• Poiché le uniche variabili non di riferimento sono quelle dei tipi primitivi:– tutte i passaggi di parametri di variabili di tipo primitivo

sono fatti per valore

– tutti i passaggi di parametri di oggetti sono fatti passando pervalore la variabile riferimento

• (per i puristi) questo non è un passaggio per riferimento….

• ad esempio non si può fare lo swap

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

72

Alcuni metodi statici in EmployeeTest

import java.util.*; public class EmployeeTest {public static void tripleSalary (Employee x) {

x.raiseSalary (200);}

public static void main (String [ ] args) {Employee[ ] staff = new Employee [ 3 ] ;….// creazione dei tre impiegatitripleSalary (staff[1]); // metodo staticofor (int i=0; i< staff.length; i++) {

staff[i].setId();System.out.println (

“Nome:”+ staff[i].getName() +“ Salario:” + staff[i].getSalary() +“ Assunto:”+ staff[i].getHireDay() +“ Id:” + staff[i].getId() );

}}}

• Definizione metodo statico– passaggio di parametri

di una variabile di riferimento

• le modifiche fatte a x sono fatte a staff[1]

• Stampa degli impiegati

EmployeeTest.java

Page 37: Lezione 4 Programmazione Object-Oriented in Javavitsca/Old/PD2002-2003/PDF/progdist... · 2003. 10. 1. · Lezione 4 Programmazione Object-Oriented in Java Programmazione Distribuita.

"Programmazione Distribuita" - Prof. Scarano

Laurea in Informatica

A.A. 2002-2003 Università di Salerno 37

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

73

L’overloading dei metodi

• È possibile avere più metodi con lo stesso nome– utile per gestire (ad esempio) costruttori diversi

• Come capisce il compilatore quale metodo usare?– ogni metodo ha una sua firma: la sequenza di nome ed il tipo

(e la successione) dei parametri passati

– ad esempio, la classe String ha 4 metodi indexOf

• indexOf (int)• indexOf (int, int)• indexOf (String)• indexOf (String, int)

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

74

Costruttori predefiniti

• Solo senon si costruisce una classe senza costruttori, allora viene fornito (dal compilatore) il costruttore predefinito (senza parametri)– altrimenti si inserisce esplicitamente, se lo si vuole

public class Employee {….public Employee () { // costruttore vuoto}

}

Page 38: Lezione 4 Programmazione Object-Oriented in Javavitsca/Old/PD2002-2003/PDF/progdist... · 2003. 10. 1. · Lezione 4 Programmazione Object-Oriented in Java Programmazione Distribuita.

"Programmazione Distribuita" - Prof. Scarano

Laurea in Informatica

A.A. 2002-2003 Università di Salerno 38

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

75

Inizializzazione di campo esplicita

• I campi possono essere esplicitamente inizializzati:

– anche eventualmente con chiamate a metodi della classe:

public class Employee {….private String qualifica = “Impiegato”;

}

public class Employee {….static int assignId() {

int r = nextId++;return r

}…private int id = assignId();

}

Pro

gra

mm

azio

ne D

istr

ibui

ta.

Vi.t

tori

o S

cara

no

76

Blocchi di inizializzazione

• Blocchi di codice inseriti nella classe– eseguiti ogni voltache viene creato un oggetto

public class Employee {….public Employee (String n, double s) {

name = n;salary = s:

}{ // blocco di inizializzazione

id = nextId;nextId++;

}private String name;private double salary;private int id;private static int nextId=1;

}