Programmazione ad Oggetti

Documenti analoghi
Ingegneria del Software

Ingegneria del Software

Richiami su oggetti e OOP

Analisi Orientata agli Oggetti

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

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

La programmazione ad oggetti (OOP)

Object-Oriented Programming

Laboratorio di programmazione

Programmazione con Java

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

Programmazione con Java

Informatica 3. LEZIONE 8: Fondamenti di programmazione orientata agli oggetti (2)

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

Informatica 3. Informatica 3. LEZIONE 8: Fondamenti di programmazione orientata agli oggetti (2) Lezione 8 - Modulo 1

Programmazione ad oggetti

Programmazione Orientata agli Oggetti

Oggetti e classi. Cos è un oggetto

Analisi e progettazione ad oggetti

Object-Oriented Technology. Giuliano Armano 1

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

La Gestione della Memoria. Carla Binucci e Walter Didimo

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

RICHIAMI DI PROGRAMMAZIONE A OGGETTI. Corso di Informatica Medica

Il modello Entità/Relazioni (ER)

Basi di dati a oggetti

Laboratorio di Progettazione di Sistemi Software UML per Design Patterns e Refactoring

Ereditarietà e Polimorfismo. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni

18 - Classi parzialmente definite: Classi Astratte e Interfacce

Gerarchia di classi Java 1

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

Catia Trubiani. Laboratorio di Ingegneria del Software a.a

Strategie top-down. Primitive di trasformazione top-down. Primitive di trasformazione top-down

INTRODUZIONE ALLA PROGETTAZIONE. Patrizio Dazzi a.a

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

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo

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

Subtype Polymorphism. Conversioni di tipo. Conversioni di tipo. Subtyping. Conversioni di tipo. Interfacce e subtype polimorfismo

Programmazione Java Avanzata Programmazione Object- Oriented in Java

Corso di Laurea in Informatica Basi di Dati a.a

Java: loading dinamico e reflection

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

Le Basi di dati: progettazione concettuale

Corso di Informatica

Programmazione a Oggetti Lezione 7. Il linguaggio Java: aspetti generali

Progettare una basi di dati vuole dire progettare la struttura dei dati e le applicazioni

Introduzione alle classi e agli oggetti. Walter Didimo

Esempio 2: Subtyping

Gerarchia di Generalizzazione. Esempio. Rappresentazione grafica. Cap. 4 - Modello E/R avanzato: Gerarchie di Generalizzazione/ specializzazione

Esercitazione di Basi di Dati

Ereditarietà e Polimorfismo

Laboratorio di Sistemi Software UML per Design Patterns e Refactoring

Funzioni, Stack e Visibilità delle Variabili in C

Alcuni diagrammi. OCL (Object Constraint Language)

Corso di Programmazione a oggetti

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

Obiettivi. Comprendere i vantaggi offerti dal meccanismo dell ereditarietà Attivare processi di astrazione e specializzazione.

SQL e linguaggi di programmazione. Cursori. Cursori. L interazione con l ambiente SQL può avvenire in 3 modi:

Le basi del linguaggio Java

Introduzione alle basi di dati e ai DBMS

Informatica. Dipartimento di Economia. Ing. Cristiano Gregnanin. 20 ottobre Corso di laurea in Economia

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

POO in JAVA e Robot EV3

L ereditarieta` Riuso del software: Ereditarieta`, Composizione, Polimorfismo e Binding Dinamico Ereditarietà Ereditarietà

Programmazione orientata agli oggetti

Corso di Laurea Specialistica in Ingegneria Informatica. Corso di Ingegneria del Software A. A Introduzione ad UML E.

Programmazione II. Lezione 7. Daniele Sgandurra 9/11/2010.

Programmazione orientata agli oggetti Ereditarietà

Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object

Esonero del corso di Programmazione a Oggetti

Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e polimorfismo

Principi della programmazione orientata agli oggetti. I principi della programmazione ad oggetti

Progettazione orientata agli oggetti

1 Il Paradigma ad Oggetti

Fondamenti di Informatica T-1. Ereditarietà & Polimorfismo

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Fondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati

Astrazioni sui dati : Specifica di Tipi di Dato Astratti in Java

La classe java.lang.object

Java: Definire Classi e Creare Oggetti

Linguaggi. - lezione 02 - Introduzione alla programmazione Object-Oriented. Corso di Laurea in Ingegneria delle Telecomunicazioni A.A.

Tipi di Dati Astratti

Introduzione alla programmazione Object Oriented. Luca Lista

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

IL MODELLO ENTITÀ- RELAZIONE. Gli altri costruttori

OOP in Python L O R E N Z O D I S I L V E S T R O

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A

Diagrammi di classe e sistemi orientati agli oggetti

Astrazione Dati. Nicola Fanizzi. Linguaggi di Programmazione [010194] 10 mag, Dipartimento di Informatica Università degli Studi di Bari

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Linguaggi ad oggetti (object oriented) LINGUAGGI DI PROGRAMMAZIONE: PARADIGMI DI PROGRAMMAZIONE. Programmazione ad oggetti

Progettazione concettuale usando il modello Entità-Relazione (ER)

Lezione 1 - Relazioni tra classi

I database. Introduzione alla teoria delle basi di dati

Progettazione di basi di dati

Linguaggi, Traduttori e le Basi della Programmazione

Ereditarietà e polimorfismo

CONCETTI E ARCHITETTURA DI UN SISTEMA DI BASI DI DATI

Indice. Prefazione. 3 Oggetti e Java 53

Informatica 3. LEZIONE 2: Sintassi e semantica

Transcript:

Programmazione ad Oggetti Analisi e Progettazione OO Origini Le metodologie ad oggetti nascono negli anni 70 ma si affermano solo negli 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 1

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: Classi e Oggetti: Esempi 2

Un esempio completo Problema Si progetti un sistema per la memorizzazione delle operazioni di manutenzione (cambio olio, freni e pneumatici) di due autovetture: una ford fiesta ed un alfa 156. Al momento della realizzazione del sistema, le due autovetture hanno il seguente stato: Alfa 156 27000 Km percorsi Ultimo cambio olio a 25000 Ancora nessun cambio freni e pneumatici Ford Fiesta 123000 Km percorsi Ultimo cambio olio a 120000 Ultimo cambio freni a 100000 Un esempio completo (2) Una classe per Autovettura Un esempio completo (3) Due oggetti Autovettura 3

class Autovettura 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 Programmazione }; ad Oggetti 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 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; } = cambio_pneumatici; 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 4

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 Information Hidding (2) Membri pubblici 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 5

Ereditarietà (2) Ereditarietà semplice La classe figlia eredita da una sola classe padre Ereditarietà (3) Ereditarietà multipla 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 6

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 (overriding) Una funzione virtuale nella classe padre deve essere implementata in tutte le classi figlie Polimorfismo (2) Overloading 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 Polimorfismo (3) Funzioni virtuali Funzioni definite nella classe padre ed implementate nelle classi figlie Si obbliga lo sviluppatore delle classi figlie all implementazione delle funzioni virtuali 7

Supporto a run-time Polimorfismo (4) Oggetto2.funzione1 Oggetto2.funzione3 Oggetto2.funzione2 Oggetto3.funzione1 Oggetto3.funzione2 Oggetto3.funzione3 Relazioni Tipi di 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 8

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 Aggregazione lasca Gli oggetti nascono e muoiono in momenti diversi Composizione Aggregazione stretta Gli oggetti nascono e muoiono assieme 9

Identificare le relazioni Una associazione dovrebbe esistere se un concetto possiede controlla è collegata a si riferisce a è parte di ha come parti è membro di oppure ha come membri qualche altro concetto del modello Specificare le molteplicità da entrambi i lati Assegnare un nome chiaro all associazione Azioni piuttosto che associazioni Un errore comune consiste nel considerare azioni come se fossero associazioni. SocioLibreria Errore! Prende In prestito * * * Restituisce Errore! * ArticoloLibreria * Un esempio complesso Si consideri la vendita in un magazzino all ingrosso. Il cassiere prepara note di vendita, ognuna delle quali fa riferimento ad un certo numero di prodotti caratterizzati da un prezzo ed una descrizione. Ogni prodotto compare con la quantità venduta in una diversa linea della nota vendita. Si progetti un sistema per la realizzazione delle note vendita. Vendita Numero 115 Codice Prodotto Descrizione Quantità Prezzo Totale Articolo 17 Scrivania legno 1 500,00 500,00 32 Sedia legno 6 80,00 480,00 12 Tavolo cucina 1 350,00 350,00 Totale 1.330,00 10

Una semplice tecnica per scoprire i concetti dai quali ottenere le classi Analizzare documentazione di partenza, come la descrizione dei requisiti Estrarre nomi e frasi nominali (nomi con aggettivi) Eliminare nomi che: Sono ridondanti (rappresentano la stessa classe) Rappresentano istanze e non concetti Sono vaghi o troppo generici Corrispondono a concetti che non sono necessari al livello considerato Individuazione dei concetti Si consideri la vendita in un magazzino all ingrosso. Il cassiere prepara note di vendita, ognuna delle quali fa riferimento ad un certo numero di prodotti caratterizzati da un prezzo ed una descrizione. Ogni prodotto compare con la quantità venduta in una diversa linea della nota vendita. Si progetti un sistema per la realizzazione delle note vendita. Indentificazione dei Concetti nel caso studio Si consideri la vendita in un magazzino all ingrosso. Il cassiere prepara note di vendita, ognuna delle quali fa riferimento ad un certo numero di prodotti caratterizzati da un prezzo ed una descrizione. Ogni prodotto compare con la quantità venduta in una diversa linea della nota vendita 11

Rappresentazione dei Concetti Utilizzo dei class diagrams UML Cassiere Magazzino Vendita Nota_Vendita Linea Prodotto Quantità Descrizione Prezzo Rappresentazione dei dati C a s s ie re Ma g azzin o Vendita Nota _ Vend ita L in e a P ro d o tto Q u a ntità D e s c rizio n e P re zzo Vendita Numero 115 Codice Prodotto Descrizione Quantità Prezzo Totale Articolo 17 Scrivania legno 1 500,00 500,00 32 Sedia legno 6 80,00 480,00 12 Tavolo cucina 1 350,00 350,00 Totale 1.330,00 Astrazione Permette di passare da un modello concettuale ad un modello di tipi di dato Concetto Prodotto Classe Prodotto ID Descrizione Prezzo 12

Classi dell esempio Quante e quali sono necessarie classi per rappresentare i dati e calcolare il totale della nota vendita? Nota_Vendita Numero totale() 0..n Linea Quantità s ub_totale() 1 Prodotto ID Descrizione Prezzo prezzo() Meccanismi di creazione e distruzione degli oggetti Chi crea le istanze (oggetti) delle classi Nota_Vendita, Linea e Prodotto? E necessario prevedere dei metodi appositi? Creazione degli oggetti Creazione statica 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 13

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 14