Ingegneria del Software



Похожие документы
Programmazione ad Oggetti

Object-Oriented Programming

INFORMATICA OOP Relazioni tra classi Roberta Gerboni

Laboratorio di programmazione

A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas

Programmazione ad oggetti

La Gestione della Memoria. Carla Binucci e Walter Didimo

Corso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I)

La programmazione ad oggetti: chiamate di metodi. Overloading. This

Paradigmi della PO. Incapsulamento. Ereditarietà. Polimorfismo. Software per TLC - AA 2008/2009 1

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

Riassunto: cos è la OOP? classi astratte, interfacce, classi interne. Scaletta. Figura con area()? Figura senza area()? Stefano Mizzaro 1.

Programmazione Orientata agli Oggetti

ISTITUTO STATALE D ISTRUZIONE SUPERIORE FERRARIS - BRUNELLESCHI EMPOLI Anno scolastico 2015/2016

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

Gerarchia delle classi Classi astratte Interfacce (Eccezioni) Laboratorio di Programmazione - Esercitazio 1

Gerarchia di classi Java 1

Programmazione con Java

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo

Programmazione con Java

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013

La programmazione ad oggetti (OOP)

Le classi in java. Un semplice programma java, formato da una sola classe, assume la seguente struttura:

Sommario. Introduzione... xv. Giorno 1 Elementi base del linguaggio C

Programmazione in Java (I modulo) Lezione 21: Classi derivate e l'operatore instanceof Riscrivere il metodo tostring() Riscrivere il metodo equals()

Programmazione Orientata agli Oggetti in Linguaggio Java

Indice. Prefazione. 3 Oggetti e Java 53

Unità A2. Progettazione concettuale. Obiettivi. Astrazione. Astrazione per aggregazione

Classi. Oggetti e classi. Creazione e inizializzazione di oggetti in C++ Distruzione di oggetti in C++

Relazioni tra oggetti e classi : Composizione. Relazioni tra oggetti e classi : esempio di Aggregazione. classe contenitore

Транскрипт:

Ingegneria del Software Analisi Object Oriented ed Elementi di Programmazione OO Origini Le metodologie ad oggi nascono negli anni 70 ma si affermano solo nelgi anni 80 grazie alla nascita dei linguaggi di programmazione ad oggetti Rappresentano una evoluzione delle metodologie ER Aggiungono una parte comportamentale alla parte strutturale di ER

Classi e Oggetti Una classe rappresenta una entità logica Una classe è un tipo di dato complesso Una classe è un contenitore di oggetti Una classe descrive le proprietà strutturali e comportamentali degli oggetti che contiene Una classe è un meta-dato Classi e Oggetti (2) Un oggetto è un entità concreta Un oggetto è un dato complesso Un oggetto appartiene sempre ad una classe Le proprietà strutturali e comportamentali di un oggetto sono quelle descritte dalla classe a cui appartiene

Classi e Oggetti (3) Elementi delle classi Elementi strutturali (statici) Attributi: dati elementari rappresentanti la parte strutturale di un oggetto Elementi comportamentali (dinamici) Metodi: operazioni che possono essere eseguite o fatte eseguire dall oggetto e rappresentanti le proprietà comportamentali class name attributes: operations: operations attributes: Rappresentazione UML Classi e Oggetti (4)

Classi e Oggetti: Esempi Un esempio completo Problema Un semplice programma per la memorizzazione delle operazioni di manutenzione (cambio olio, freni e pneumatici) di due autovetture: una ford fiesta ed un alfa 156. Analisi Modello delle classi e degli oggetti

class Autovettura private: char *Modello; char *Marca; int Chilometri_percorsi; int Ultimo_cambio_olio; int Ultimo_cambio_freni; int Ultimo_cambio_pneumatici; public: void init (char *marca, char *modello, int chilometri, int cambio_olio, int cambio_freni, int cambio_pneumatici) // Inizializza gli attributi della classe Modello modello; Marca = marca; Chilometri_percorsi chilometri; Ultimo_cambio_olio cambio_olio; Ultimo_cambio_freni = cambio_freni; Ultimo_cambio_pneumatici = cambio_pneumatici; } void aggiorna_chilometri (int chilometri) // Aggiorna i chilometri percorsi Chilometri_percorsi = chilometri; } void aggiorna_olio (int cambio_olio) // Aggiorna l'ultimo cambio olio Ultimo_cambio_olio = cambio_olio; } void aggiorno_pneumatici (int cambio_pneumatici) // Aggiorna l'ultimo cambio pneumatici Ultimo_cambio_pneumatici = cambio_pneumatici; } void aggiorna_freni (int cambio_freni) // Aggiorna l'ultimo cambio freni Ultimo_cambio_freni = cambio_freni; } void stampa_stato () // Stampa lo stato attuale cout<<"auto: "<<Marca<<" "<<Modello<<endl; cout<<"chilometri: "<<Chilometri_percorsi<<endl; cout<<"ultimo cambio olio: "<<Ultimo_cambio_olio<<endl; cout<<"ultimo cambio freni: "<<Ultimo_cambio_freni<<endl; cout<<"ultimo cambio pneumatici: "<<Ultimo_cambio_pneumatici<<endl<<endl; } Corso di Ingegneria }; del Software Implementazione void main() } Autovettura Ford; Autovettura Alfa; char char char char *ma1="ford"; *ma2="alfa Romeo"; *mo1="fiesta"; *mo2="156"; // Inizializza Autovetture Ford.init(ma1,mo1,123000,120000,100000,100000); Alfa.init(ma2,mo2,27000,20000,0,0); // Stampo lo stato Ford.stampa_stato(); Alfa.stampa_stato(); // Aggiorna lo stato dell'alfa Alfa.aggiorna_olio(25000); cout<<"stato dell'alfa dopo l'aggiornamento"<<endl<<endl; Alfa.stampa_stato(); Auto: Ford Fiesta Chilometri: 123000 Ultimo cambio olio: 120000 Ultimo cambio freni: 100000 Ultimo cambio pneumatici: 100000 Auto: Alfa Romeo 156 Chilometri: 27000 Ultimo cambio olio: 20000 Ultimo cambio freni: 0 Ultimo cambio pneumatici: 0 Stato dell Alfa dopo l aggiornamento Auto: Alfa Romeo 156 Chilometri: 27000 Ultimo cambio olio: 25000 Ultimo cambio freni: 0 Ultimo cambio pneumatici: 0

Information Hidding Proprietà Ereditarietà Polimorfismo Relazioni associative, aggregative e compositive Information Hidding I dati e i dettagli implementativi sono invisibili all utilizzatore I dati e i dettagli implementativi sono incapsulati L accesso ai dati avviene attraverso le funzioni definite E un meccanismo di controllo L accesso ai dati avviene attraverso un interfaccia method # 6 method # 1 method # 5 data method # 2 method # 4 method # 3

Membri pubblici Information Hidding (2) Attributi e metodi direttamente accessibili dagli altri oggetti Membri privati Attributi e metodi non direttamente accessibili dagli altri oggetti Tutti gli attributi dovrebbero essere privati Membri privati Membri pubblici Ereditarietà E il meccanismo attraverso il quale una classe detta figlia eredita le caratteristiche di una classe detta padre Implementa una relazione di generalizzazionespecializzazione Superclasse Specializzazione Generalizzazione Sottoclasse

Ereditarietà semplice Ereditarietà (2) La classe figlia eredita da una sola classe padre Ereditarietà multipla Ereditarietà (3) La classe figlia eredita da più classi padre

Classi Astratte e Funzioni Virtuali Una classe astratta è una classe non instanziabile E una classe vuota e tipicamente è una superclasse in una gerarchia Una funzione virtuale è una funzione non implementata E una funzione della quale viene fornita solo l interfaccia e l implementazione viene lasciata alle classi figlie Polimorfismo E la possibilità di una funzione di assumere più forme Una funzione all interno di una classe può avere più di una implementazione (overloading) Una funzione ereditata da una classe padre può essere re-implementata nelle classi figlie Una funzione virtuale nella classe padre deve essere implementata in tutte le classi figlie

Overloading Polimorfismo (2) E la possibilità per una funzione di avere diverse definizioni e diversi comportamenti La distinzione tra le funzioni overloaded avviene in base al numero e/o al tipo dei parametri Funzioni virtuali Polimorfismo (3) Funzioni definite nella classe padre ed implementate nelle classi figlie Si obbliga lo sviluppatore delle classi figlie all implementazione delle funzioni virtuali

Supporto a run-time Polimorfismo (4) Oggetto2.funzione1 Oggetto2.funzione3 Oggetto2.funzione2 Oggetto3.funzione1 Oggetto3.funzione2 Oggetto3.funzione3 Relazioni Generalizzazione/Specializzazione E la relazione esistente tra una classe padre ed una classe figlia Aggregazione E la relazione esistente tra una classe aggregante e le classi aggregate L oggetto aggregante e gli oggetti aggregati hanno cicli di vita indipendenti Composizione E la relazione tra una classe composta e le classi componenti L oggetto composto e gli oggetti componenti hanno cicli di vita correlati Associazione E la relazione tra due classi che non comporta nessuna forma di inclusione né di generalizzazione

Associazione E un legame tra oggetti appartenenti a classi diverse Molteplicità della relazione associativa E il numero di legami distinti che un oggetto può avere con oggetti della classe associata Aggregazione lasca Aggregazione Gli oggetti nascono e muoiono in momenti diversi

Aggregazione stretta Composizione Gli oggetti nascono e muoiono assieme Creazione statica Creazione degli oggetti Gli oggetti vengono istanziati (creati) staticamente al tempo di compilazione ed allocati al tempo di caricamento Creazione dinamica Gli oggetti vengono istanziati dinamicamente a runtime L istanziazione dinamica di oggetti richiede l esistenza di un metodo speciale della classe chiamato costruttore

Creazione degli oggetti (2) Il costruttore è il metodo di una classe che permette la creazione dinamica di oggetti Una invocazione di un costruttore provoca l allocazione a runtime della memoria necessaria a contenere un oggetto Il costruttore è una funzione con lo stesso nome della classe e che non restituisce nessun dato Il distruttore è il metodo di una classe che permette la cancellazione dinamica di un oggetto Una invocazione di un distruttore provoca la deallocazione dell area di memoria riservata all oggetto Il distruttore ha lo stesso nome della classe preceduto dal simbolo