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à
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.
Polimorfismo Polimorfismo è 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. 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.
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.
Programmazione orientata agli oggetti Ogni cosa è un oggetto Un programma è un insieme di oggetti che si comunicano l’un l’altro cosa devono fare scambiandosi messaggi Ogni oggetto ha la sua memoria che è composta di altri oggetti Ogni oggetto ha un tipo (classe) 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
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.
Interfaccia Per utilizzare un oggetto dobbiamo sapere quali messaggi mandargli. L’insieme dei possibili messaggi ad un oggetto viene chiamato interfaccia. L’interfaccia è definita dalla classe. Nome della classe Interfaccia Lampadina lampada1; lampada1.accenditi(); La classe è : Lampadina L’oggetto è : lampada1 L’interfaccia è : accenditi(),spegniti();
Unified Modeling Language UML Cos’è 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. Martin Fowler, Rendal Scott UML Distilled Guida rapida allo Standard Object Modeling Language Diagrammi di casi d’uso Diagrammi di sequenza Diagrammi delle classi
UML Diagrammi di casi d’uso Ivar Jacobson “Objectority” 1992 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
UML Diagrammi di casi d’uso Un 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 Gli attori 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.
UML Diagrammi di casi d’uso I diagrammi di casi d’uso Caso d’Uso Attore Inclusione Generalizzazione
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.
UML 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 Concettuale Diagramma delle classi di Specifica Diagramma delle classi di Implementazione
UML diagramma delle classi Diagramma delle classi concettuale Rappresenta 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 specifica La prospettiva riguarda il software, ma al livello di interfaccia e non di implementazione. Diagramma delle classi di implementazione Ci si riferisce, in pratica, proprio alla descrizione del codice.
UML diagramma delle classi Rappresentazione della classe 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.
UML diagramma delle classi Rappresentazione della classe 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 x yval() che restituisce il valore di y rval() che restituisce il modulo tval() che restituisce l’angolo Queste operazioni costituiscono l’interfaccia. La seconda rappresentazione è analoga alla prima ma specifica anche i tipi in gioco.
UML diagramma delle classi Ereditarietà 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 superclasse sottoclassi
UML diagramma delle classi Ereditarietà 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. superclasse sottoclasse
UML diagramma delle classi Associazione 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”. Nome dell’associazione (normalmente un verbo)
UML diagramma delle classi Associazione 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. Ruolo
UML diagramma delle classi Associazione 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 1 Zero o più 0..* Uno o più 1..* Un range 3..7 Molteplicità
UML diagramma delle classi Classe di Associazione Permette di aggiungere degli attributi e delle funzioni alla relazione, senza necessariamente aggiungere dei campi alle classi che partecipano all’associazione. Classe di associazione
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.
UML diagramma delle classi Dipendenza 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 Visibilità 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 Package Package Un package è un raggruppamento di classi a livello più alto.
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.
UML Diagramma di Sequenza Oggetto o Classe Self call messaggio ritorno condizione Linea di vita