Marina Mongiello Principi di Programmazione Object-Oriented.
oggetto object concreto concettuale - uniroma2.it · – object-oriented design (OOD) –...
Transcript of oggetto object concreto concettuale - uniroma2.it · – object-oriented design (OOD) –...
UniRoma2 - Ingegneria del Software 1 1
Richiami su oggetti e OOPRichiami su oggetti e OOP• Un oggetto (object) è una entità caratterizzata da
una struttura dati alla quale si associa l’insieme delle operazioni che è possibile compiere su di essa.
• Un oggetto può essere concreto (es: un file) o concettuale (es: una politica di scheduling)
• Una attività è dunque orientata agli oggetti se opera su di essi, come ad esempio:– object-oriented analysis (OOA)– object-oriented design (OOD)– object-oriented programming (OOP)
UniRoma2 - Ingegneria del Software 1 2
Oggetti: caratteristicheOggetti: caratteristiche
• Classificazione (Classification)
• Identità (Identity)
• Ereditarietà (Inheritance)
• Polimorfismo (Polymorphism)
UniRoma2 - Ingegneria del Software 1 3
ClassificazioneClassificazione
• Oggetti con identica struttura dati (attributes) ed operazioni (operations) sono raggruppati in classi(classes)
• Ogni oggetto è una istanza di una classe• Ogni oggetto contiene un riferimento implicito alla
classe di appartenenza• Ogni oggetto condivide struttura dati ed
operazioni con le altre istanze della sua classe di appartenenza
• L’istanziazione di un oggetto implica l’assegna-mento di valori agli attributi
UniRoma2 - Ingegneria del Software 1 4
IdentitIdentitàà• Ogni oggetto ha una sua propria identità
• Due oggetti sono entità distinte anche se
tutti i valori istanziati per gli attributi sono
identici
• Gli oggetti sono identificabili attraverso un
riferimento esplicito (handle)
UniRoma2 - Ingegneria del Software 1 5
Notazione graficaNotazione grafica
+operation1()+attribute1
Class1
attribute1 = valueObject1 : Class1
Notazione per classe
Notazione per oggetto(istanza)
Esempio diclasse
Esempio dioggetto
+Calcola età() : int
+Nome : String+Data di nascita : Date
Impiegato
Nome : String = Manuel FantoniData di nascita : Date = 1/11/1947
Imp1 : Impiegato
UniRoma2 - Ingegneria del Software 1 6
EreditarietEreditarietàà• L’ereditarietà è la condivisione di attributi ed
operazioni tra classi in una qualche relazione gerarchica
• Una classe può essere raffinata attraverso un insieme di sottoclassi (subclasses), costituendo una superclasse (superclass) delle suddette sottoclassi
• Ogni sottoclasse eredita tutte le proprietà della relativa superclasse
UniRoma2 - Ingegneria del Software 1 7
+ricerca_per_nome()+ricerca_per_codfiscale()
ArchivioUtenti
+open()+create()+close()+backup()+restore()
+File_name : StringArchivio
EreditarietEreditarietàà: esempio: esempio
EREDITA DA
Metodi ed attributi relativi alla sola classe ArchivioUtenti
Metodi ed attributi relativi ad entrambe le classi
UniRoma2 - Ingegneria del Software 1 8
PolimorfismoPolimorfismo
• Oggetti appartenenti a classi in una qualche relazione gerarchica possono condividere operazioni senza condividere forzatamente l’implementazione relativa ad ognuna di esse
• Una operazione rappresenta una particolare manipolazione dei dati istanziati per un oggetto
• Ci si riferisce all’implementazione di una operazione specifica per una particolare classe come ad un metodo(method) di tale classe
• Ad una operazione possono essere associati più metodi che la implementano
UniRoma2 - Ingegneria del Software 1 9
Polimorfismo: esempioPolimorfismo: esempio
Stesse operazionicon differenti
implementazioni
+move()+show()+hide()
+Xpos : int+Ypos : int
GUIEREDITA DA
+move()+show()+hide()
Window
UniRoma2 - Ingegneria del Software 1 10
Vantaggi nell'utilizzo degli oggettiVantaggi nell'utilizzo degli oggettiGli oggetti consentono di incrementare la qualità del software (in particolare riusabilità e manutenibilità), riducendo il TTM (Time To Market), grazie ai meccanismi di:– Incapsulamento delle strutture dati (attributi) e delle
operazioni (metodi) che le manipolano (encapsulation)– Separazione tra la struttura dati propria di un oggetto e la
struttura dati accessibile dall’esterno (information hiding)– Astrazione del comportamento delle operazioni a
prescindere dalla loro implementazione (abstraction)– Condivisione di strutture dati ed operazioni, attraverso
ereditarietà e polimorfismo (sharing)
UniRoma2 - Ingegneria del Software 1 11
ObjectObject OrientedOriented ProgrammingProgramming (OOP)(OOP)
Dichiarazione di una Classe
+calcola_età() : int
+nome : String+data_di_nascita : Date
Impiegato
Class Impiegato {string nomedate data_di_nascita
Impiegato() {....}int calcola_età() {....}~Impiegato() {....}
}
Costruttore
Distruttore
UniRoma2 - Ingegneria del Software 1 12
OOP: OOP: istanziazioneistanziazione di un oggetto di un oggetto • L’istanziazione di un oggetto è resa possibile
dall’apposito operatore new, attraverso il quale:– viene riservato spazio in memoria per l’oggetto– viene generato il riferimento per l’oggetto
ESEMPIO
Impiegato Nuovo_Impiegato;Nuovo_Impiegato = new Impiegato(“Manuel Fantoni”,”1/11/1947”)
L’operatore new richiama il costruttoredella classe attraverso il quale è possibile inizializzare i valori degli attributi ESEMPIO
Impiegato(string Mio_Nome, date Mia_Data){
this.nome = Mio_Nome;this.data_di_nascita = Mia_Data;
}
UniRoma2 - Ingegneria del Software 1 13
OOP: distruzione di un oggettoOOP: distruzione di un oggetto• La distruzione di un oggetto consiste nel:
– liberare la memoria allocata per l’oggetto– eliminare il riferimento dell’oggetto
• La distruzione di un oggetto è ottenibile attraverso:– operatore delete (es: C++)– garbage collector (es: Java)
• Prima che un oggetto venga realmente disallocato viene richiamato, qualora esista, il metodo distruttore, attraverso il quale è possibile specificare un insieme di operazioni da compiersi prima della distruzione
UniRoma2 - Ingegneria del Software 1 14
OOP: data OOP: data encapsulationencapsulation
Class Posizione {
Public Double Latitudine;
Public Double Longitudine;
...
Public Double calcola_distanza(Posizione p);
Public Double calcola_direzione(Posizione p);
...
}
UniRoma2 - Ingegneria del Software 1 15
OOP: information OOP: information hidinghiding
Class Posizione {Private Double Latitudine;Private Double Longitudine;
...Public Void set_latitudine(Double lat);Public Void set_longitudine(Double long);Public Double get_latitudine();Public Double get_longitudine();Public Double calcola_distanza(Posizione p);Public Double calcola_direzione(Posizione p);...
}
UniRoma2 - Ingegneria del Software 1 16
Associazioni tra classiAssociazioni tra classi
Esempio OOP
Class Nazione {String Nome;Città *Ha_Capitale;
}
Class Città {String Nome;Nazione *E’_Capitale_di
}
+nomeNazione
+nomeCittà
1 1
ha capitale
nome = Italia : Nazione
nome = Roma : Città
diagramma delle classi(class diagram)
diagramma degli oggetti(object diagram)
UniRoma2 - Ingegneria del Software 1 17
Ulteriori tipi di associazioneUlteriori tipi di associazione
Esempi
o OOP
Class Studente {String Nome;Corso *Segue[n];
}
Class Corso {String Nome;String Docente;Studente *Frequentano[m]
}
+nomeStudente
+nome+docente
Corso
* *
frequenta
Directory File
1 0..*
contiene
Workstation Terminale
1
-Console
0..1
ha
UniRoma2 - Ingegneria del Software 1 18
Associazione ternariaAssociazione ternaria
Esempi
o OOP
Class Progetto {Sviluppatore **Assegnato;Linguaggio **Sviluppato;
}Class Sviluppatore {
Linguaggio **Sviluppa;Progetto **Partecipa;
}Class Linguaggio {
Progetto **Sviluppa;Sviluppatore **Conosciuto;
}
Progetto Linguaggio
Sviluppatore
Progetto Linguaggio
Sviluppatore
*
*
* *
*
*
UniRoma2 - Ingegneria del Software 1 19
AssociationAssociation classesclasses
Contractor Project
start_daterole
Assignment
* *
Directory Filefile_name
1 0..1
contiene
Associazioni qualificateAssociazioni qualificate
UniRoma2 - Ingegneria del Software 1 20
EreditarietEreditarietàà
Esempi
o OOP
Class Archivio{
...}Class ArchivioUtenti : public Archivio{
...}
+open()+create()+close()
+filename : StringArchivio
+ricerca_per_nome()+ricerca_per_CF()
ArchivioUtenti
+ricerca_per_titolo()+ricerca_per_autore()
ArchivioLibri
UniRoma2 - Ingegneria del Software 1 21
AggregazioneAggregazione
Esempio OOP
Class Menu {...}Class PulsanteOpzione {...}Class ListBox {...}
Class Finestra {Menu Menu_in_Finestra;PulsanteOpzione PO_in_Finestra;ListBox LB_in_Finestra;Finestra **Contiene;Finestra *E’_Contenuta;...
}
Finestra
Menu PulsanteOpzione ListBox
contiene
0..*
è contenuta0..1