Programmazione orientata agli oggetti OOP Object Oriented Programming Quando si programma ad oggetti...

28
Programmazione orientata agli oggetti OOP Object Oriented Programming Quando si programma ad oggetti si scompone il problema nelle sue parti costituenti, ognuna di queste diventa un oggetto a sé stante che contiene le proprie istruzioni e i dati relativi a tale oggetto. Tutti i linguaggi di programmazione hanno tre caratteristiche comuni: Incapsulamento Polimorfismo Ereditarietà

Transcript of Programmazione orientata agli oggetti OOP Object Oriented Programming Quando si programma ad oggetti...

Page 1: Programmazione orientata agli oggetti OOP Object Oriented Programming Quando si programma ad oggetti si scompone il problema nelle sue parti costituenti,

Programmazione orientata agli oggetti

OOPObject Oriented Programming

Quando si programma ad oggetti si scompone il problema nelle sue parti costituenti, ognuna di queste diventa un oggetto a sé stante che contiene le proprie istruzioni e i dati relativi a tale oggetto. Tutti i linguaggi di programmazione hanno tre caratteristiche comuni:

Incapsulamento

Polimorfismo

Ereditarietà

Page 2: Programmazione orientata agli oggetti OOP Object Oriented Programming Quando si programma ad oggetti si scompone il problema nelle sue parti costituenti,

Incapsulamento

Tutti i programmi sono composti da codice e dati. Il codice è la parte di programma che esegue le operazioni i dati sono le entità sulle quali vengono eseguite queste operazioni.L’incapsulamento è il meccanismo di programmazione che riunisce il codice e i dati da esso manipolati proteggendoli da interferenze esterne e da un utilizzo scorretto.Il codice e i dati collegati in questo modo costituiscono un oggetto.All’interno di un oggetto il codice e i dati possono essere privati per quell’oggetto, sono utilizzabili solo dall’oggetto stesso, o pubblici, possono essere utilizzati da qualunque parte del programma.Le parti pubblice di un oggetto costituiscono l’Interfaccia di accesso all’oggetto stesso.

Page 3: Programmazione orientata agli oggetti OOP Object Oriented Programming Quando si programma ad oggetti si scompone il problema nelle sue parti costituenti,

PolimorfismoPolimorfismo è un termine derivato dal greco che significa “pluralità di forme”. È il meccanismo che permette di utilizzare un’unica interfaccia per un’intera tipologia di azioni.Esempio:Il volante di un’auto è l’interfaccia. Non è necessario, per guidare, sapere se il volante utilizza lo sterzo manuale, il servosterzo o altro.Esempio:Una coda funzione con criterio FIFO (primo ad entrare, primo ad uscire) se accade di dover inserire un intero piuttosto che un float o una struttura più complessa, dovremmo definire una funzione con nome diverso per ogni tipo da inserire. Il polimorfismo è la caratteristica di poter utilizzare la stessa interfaccia in ogni caso. Quando si sa inserire un tipo di dato, quindi, si sa come inserire anche gli altri.

Page 4: Programmazione orientata agli oggetti OOP Object Oriented Programming Quando si programma ad oggetti si scompone il problema nelle sue parti costituenti,

EreditarietàL’Ereditarietà è il processo mediante il quale un oggetto acquisisce le proprietà di un altro oggetto in base al concetto di classificazione gerarchica.Esempio:Se ho una mela questa fa parte della classe mela, che a sua volta fa parte della classe frutto, che è compresa nella classe cibo.Ciò vuol dire che la classe cibo ha proprietà come: commestibilità, digeribilità ecc. La classe frutto, oltre ad essere commestibile e digeribile, è anche dolce e succosa infine la classe mela ha tutte le caratteristiche delle classi da cui deriva ed in più ha la proprietà di crescere sugli alberi, di non essere un frutto tropicale ecc. La mela che io posseggo è unica ed ha tutte le proprietà descritte.

Page 5: Programmazione orientata agli oggetti OOP Object Oriented Programming Quando si programma ad oggetti si scompone il problema nelle sue parti costituenti,

1. Ogni cosa è un oggetto2. Un programma è un insieme di oggetti che si comunicano

l’un l’altro cosa devono fare scambiandosi messaggi3. Ogni oggetto ha la sua memoria che è composta di altri

oggetti4. Ogni oggetto ha un tipo (classe)5. Tutti gli oggetti di una particolare classe possono ricevere

gli stessi messaggi

Thinking in C++, 2nd ed. Volume 1©2000 by Bruce Eckel

Available from www.BruceEckel.com

Programmazione orientata agli oggetti

Page 6: Programmazione orientata agli oggetti OOP Object Oriented Programming Quando si programma ad oggetti si scompone il problema nelle sue parti costituenti,

Ogni oggetto appartiene ad una classe

Ogni oggetto è unico, ma fa anche parte di una classe di oggetti. Gli oggetti che sono identici, tranne che per il loro stato durante l’esecuzione di un programma, sono raggruppati insieme in classi di oggetti. Le classi sono tipi astratti di dati. Esse funzionano quasi come i tipi elementari (int, char ecc..). Si può dichiarare, quindi, una variabile appartenente a quella classe. La variabile si chiama istanza della classe o più semplicemente oggetto.

Page 7: Programmazione orientata agli oggetti OOP Object Oriented Programming Quando si programma ad oggetti si scompone il problema nelle sue parti costituenti,

InterfacciaPer utilizzare un oggetto dobbiamo sapere quali messaggi mandargli. L’insieme dei possibili messaggi ad un oggetto viene chiamato interfaccia. L’interfaccia è definita dalla classe.

Lampadina

+accenditi()+spegniti()

Nome della classe

Interfaccia

Lampadina lampada1;lampada1.accenditi();

La classe è : LampadinaL’oggetto è : lampada1L’interfaccia è : accenditi(),spegniti();

Page 8: Programmazione orientata agli oggetti OOP Object Oriented Programming Quando si programma ad oggetti si scompone il problema nelle sue parti costituenti,

UML

Unified Modeling Language

Un linguaggio di modellazione è la notazione usata per descrivere le caratteristiche di un progetto. UML è un linguaggio di modellazione per i progetti Object Oriented (OO), ed è un linguaggio standardizzato. È nato dalla fusione delle tecniche più usate di modellazione OO.

Cos’è UML

Martin Fowler, Rendal ScottUML Distilled

Guida rapida allo Standard Object Modeling Language

Diagrammi di casi d’usoDiagrammi di sequenzaDiagrammi delle classi

Page 9: Programmazione orientata agli oggetti OOP Object Oriented Programming Quando si programma ad oggetti si scompone il problema nelle sue parti costituenti,

UML Diagrammi di casi d’uso

Diagrammi di casi d’uso

Lo scenario è la sequenza di passi che descrivono l’interazione fra un utente e un sistema.Esempio:Il cliente naviga nel catalogo e raccoglie gli articoli desiderati in un carrello della spesa. Quando il cliente desidera pagare, descrive la modalità di spedizione e fornisce la necessaria informazione riguardante la propria carta di credito prima di confermare l’acquisto. Il sistema controlla se la carta di credito è valida e conferma l’acquisto sia immediatamente che con un successivo messaggio di posta.Tuttavia la carta di credito potrebbe non essere valida, questo implica l’esistenza di un altro scenario

Ivar Jacobson “Objectority” 1992

Page 10: Programmazione orientata agli oggetti OOP Object Oriented Programming Quando si programma ad oggetti si scompone il problema nelle sue parti costituenti,

UML Diagrammi di casi d’uso

I casi d’usoUn caso d’uso è un insieme di scenari legati da un obbiettivo comune per l’utente.Nell’esempio precedente il caso d’uso era: Acquisto di un prodotto.Un caso d’uso può essere espresso per via testuale ma spesso è molto più semplice rappresentarlo con diagrammi

Un attore è un ruolo interpretato dall’utente nei confronti del sistema.Gli attori non sono necessariamente persone. Una buona fonte per l’identificazione dei casi d’uso sono gli eventi esterni al sistema ai quali esso deve reagire.

Gli attori

Page 11: Programmazione orientata agli oggetti OOP Object Oriented Programming Quando si programma ad oggetti si scompone il problema nelle sue parti costituenti,

UML Diagrammi di casi d’uso

I diagrammi di casi d’uso

Attore

Caso d’Uso

Generalizzazione

Inclusione

Page 12: Programmazione orientata agli oggetti OOP Object Oriented Programming Quando si programma ad oggetti si scompone il problema nelle sue parti costituenti,

UML Diagrammi di casi d’uso

I diagrammi di casi d’uso

Vi sono tre tipi di relazione nei casi d’uso:La relazione di Inclusione serve a descrivere casi d’uso già descritti altrove.La relazione di Generalizzazione serve ad esaminare un caso particolare del caso d’uso da cui deriva. Dovrebbe avere tutte le caratteristiche del caso da cui deriva (eventualmente ridefinite) più altre relative al caso specifico.La relazione di Estensione è un caso particolare di generalizzazione. Si dichiarano i punti in cui si vuole estendere il caso d’uso e ci si limita a quelli.

Page 13: Programmazione orientata agli oggetti OOP Object Oriented Programming Quando si programma ad oggetti si scompone il problema nelle sue parti costituenti,

UML diagramma delle classi

Diagramma delle classi

Descrive il tipo degli oggetti che compongono il sistema e le relazioni statiche esistenti fra loro

Esistono tre tipi di diagrammi delle classi che descrivono tre diversi punti di vista:

Diagramma delle classi ConcettualeDiagramma delle classi di Specifica

Diagramma delle classi di Implementazione

Page 14: Programmazione orientata agli oggetti OOP Object Oriented Programming Quando si programma ad oggetti si scompone il problema nelle sue parti costituenti,

Diagramma delle classi concettualeRappresenta i concetti propri del dominio che si sta studiando. Questi concetti saranno legati in modo naturale con le classi destinate ad implementarli ma non è necessaria una corrispondenza diretta. Questo diagramma dovrebbe essere disegnato con poco o nessun riguardo per il software che lo dovrà implementare.

Diagramma delle classi di specificaLa prospettiva riguarda il software, ma al livello di interfaccia e non di implementazione.

Diagramma delle classi di implementazioneCi si riferisce, in pratica, proprio alla descrizione del codice.

UML diagramma delle classi

Page 15: Programmazione orientata agli oggetti OOP Object Oriented Programming Quando si programma ad oggetti si scompone il problema nelle sue parti costituenti,

UML diagramma delle classi

NomeDellaClasse

-attributo1-attributo2-attributo3

+operazione1()+operazione2()

Il nome della classe inizia con la lettera maiuscola ed è privo di underscore.Gli attributi sono un insieme di caratteristiche i cui valori identificano un oggetto, o istanza della classe, e ne costituiscono lo stato; ogni attributo ha un nome, che inizia con la lettera minuscola, ed opzionalmente un tipo (classe).Le operazioni costituiscono un insieme di funzioni che possono essere espletate sull’oggetto.

Rappresentazione della classe

Page 16: Programmazione orientata agli oggetti OOP Object Oriented Programming Quando si programma ad oggetti si scompone il problema nelle sue parti costituenti,

UML diagramma delle classi

Esempio: un punto su di un piano cartesiano. Ha due attributi x e y. Un oggetto appartenente a questa classe può essere manipolato con le operazioni:xval() che restituisce il valore di xyval() che restituisce il valore di yrval() che restituisce il modulotval() che restituisce l’angolo

Queste operazioni costituiscono l’interfaccia. La seconda rappresentazione è analoga alla prima ma specifica anche i tipi in gioco.

Punto

-x-y

+xval()+yval()+rval()+tval()

Punto

-x: int-y: int

+xval(): int+yval(): int+rval(): int+tval(): int

Rappresentazione della classe

Page 17: Programmazione orientata agli oggetti OOP Object Oriented Programming Quando si programma ad oggetti si scompone il problema nelle sue parti costituenti,

Può capitare di dover implementare due classi con caratteristiche comuni. L’ereditarietà permette di creare una classe che possegga tutte le caratteristiche di un’altra classe e ve ne aggiunga delle altre. Un cerchio, ad esempio, è una forma geometrica particolare, quindi può essere derivata dalla classe forma. Così come Triangolo e Quadrato

Forma

Cerchio QuadratoTriangolo

superclasse

sottoclassi

UML diagramma delle classi

Ereditarietà

Page 18: Programmazione orientata agli oggetti OOP Object Oriented Programming Quando si programma ad oggetti si scompone il problema nelle sue parti costituenti,

La classe Punto si dice superclasse mentre la classe Pixel si dice sottoclasse. La classe Pixel eredita tutte le caratteristiche della classe punto e ve ne aggiunge delle nuove. Questa relazione è di tipo “è un”. Un oggetto della classe Pixel è un punto colorato. Si dice anche che la classe Pixel è una specializzazione della classe Punto, o ancora che la classe Punto è un generalizzazione della classe Pixel.

UML diagramma delle classi

EreditarietàPunto

-x: int-y: int

+xval(): int+yval(): int+rval(): int

Pixel

-col: Colore-luminosità(): int

superclasse

sottoclasse

Page 19: Programmazione orientata agli oggetti OOP Object Oriented Programming Quando si programma ad oggetti si scompone il problema nelle sue parti costituenti,

Una associazione o relazione è un legame logico tra classi che esprime una correlazione.Ad esempio la classe Corso è in associazione con la classe Studente. Dal punto di vista di Corso si può dire che la relazione è “è frequentato da” mentre dal punto di vista di Studente la relazione è “frequenta”.

UML diagramma delle classi

Associazione

Nome dell’associazione (normalmente un verbo)

Page 20: Programmazione orientata agli oggetti OOP Object Oriented Programming Quando si programma ad oggetti si scompone il problema nelle sue parti costituenti,

Si può specificare il ruolo a ciascuna delle classi in relazione. Ad esempio: un oggetto della classe Persona può avere il ruolo di insegnante poiché esiste la relazione insegna fra le due classi.

UML diagramma delle classi

Associazione

Ruolo

Page 21: Programmazione orientata agli oggetti OOP Object Oriented Programming Quando si programma ad oggetti si scompone il problema nelle sue parti costituenti,

La molteplicità di una relazione indica il numero di oggetti che partecipano ad ogni associazione.Uno studente può frequentare da 1 a 4 corsi. Ed ogni corso è frequentato da molti studenti.Esempi di molteplicità:Molti *Uno 1Zero o più 0..*Uno o più 1..*Un range 3..7

UML diagramma delle classi

Associazione

Molteplicità

Page 22: Programmazione orientata agli oggetti OOP Object Oriented Programming Quando si programma ad oggetti si scompone il problema nelle sue parti costituenti,

Permette di aggiungere degli attributi e delle funzioni alla relazione, senza necessariamente aggiungere dei campi alle classi che partecipano all’associazione.

UML diagramma delle classi

Classe di Associazione

Classe di associazione

Page 23: Programmazione orientata agli oggetti OOP Object Oriented Programming Quando si programma ad oggetti si scompone il problema nelle sue parti costituenti,

UML diagramma delle classi

AggregazioneÈ una relazione che risponde alla specifica di “è parte di”.Un punto è parte di un poligono . Nell’esempio un poligono è formato da almeno 3 punti (molteplicità) e un punto può appartenere ad un solo poligono.

NavigabilitàLa navigabilità di una relazione è rappresentata da una freccia ad un suo capo. Nell’esempio un oggetto della classe Corso deve dichiarare quale persona è il docente. Mentre un appartenente alla classe Persona non deve necessariamente dichiarare se è docente di un corso.

Page 24: Programmazione orientata agli oggetti OOP Object Oriented Programming Quando si programma ad oggetti si scompone il problema nelle sue parti costituenti,

Diremo che due classi sono dipendenti se si prevede che le relative istanza possano scambiarsi messaggi. La dipendenza implica che se cambia l’implementazione di una classe potrebbe essere necessario cambiare anche quella delle classi dipendenti.

UML diagramma delle classi

Dipendenza

Page 25: Programmazione orientata agli oggetti OOP Object Oriented Programming Quando si programma ad oggetti si scompone il problema nelle sue parti costituenti,

Ogni classe ha degli elementi pubblici, degli elementi privati e degli elementi protetti. Quelli pubblici possono essere usati dalle altre classi. Quelli privati sono riservati all’uso interno della classe che li definisce. Quelli protetti possono essere usati dalla classe che li definisce e dalle sue sottoclassi.

+ Pubblici- Privati# Protetti

UML diagramma delle classi

Visibilità

Page 26: Programmazione orientata agli oggetti OOP Object Oriented Programming Quando si programma ad oggetti si scompone il problema nelle sue parti costituenti,

Un package è un raggruppamento di classi a livello più alto.

UML Package

Package

Page 27: Programmazione orientata agli oggetti OOP Object Oriented Programming Quando si programma ad oggetti si scompone il problema nelle sue parti costituenti,

UML Diagramma di Sequenza

I diagrammi di Sequenza

All’interno di un diagramma di sequenza, ogni oggetto viene rappresentato come un rettangolo posto in cima ad una linea tratteggiata verticale chiamata linea di vita dell’oggetto.I messaggi che gli oggetti si scambiano sono rappresentati dalle frecce.Se l’oggetto richiama una sua funzione, chiamata interna (self call), è come se mandasse un messaggio a se stesso.

Page 28: Programmazione orientata agli oggetti OOP Object Oriented Programming Quando si programma ad oggetti si scompone il problema nelle sue parti costituenti,

UML Diagramma di SequenzaOggetto o Classe

messaggio

ritornocondizioneLinea di vita

Self call