Laboratorio di programmazione

Похожие документы
Ingegneria del Software

Proprietà delle Classi e degli Oggetti in Java

14 - Metodi e Costruttori

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

Il paradigma OO e le Classi

Programmazione Java Struttura di una classe, Costruttore, Riferimento this

Definizione di metodi in Java

Corso di Programmazione ad Oggetti

Linguaggio C - sezione dichiarativa: costanti e variabili

ERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} }

6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

Compitino di Laboratorio di Informatica CdL in Matematica 13/11/2007 Teoria Compito A

Struttura dei programmi C

Programmazione ad oggetti

Variabili. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Funzioni, Stack e Visibilità delle Variabili in C

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

Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length);

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

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

Fondamenti di Informatica T. Linguaggio C: i puntatori

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Gestione dinamica della memoria

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Programmazione in Java (I modulo)

La classe java.lang.object

Lezione 21 e 22. Valentina Ciriani ( ) Laboratorio di programmazione. Laboratorio di programmazione. Lezione 21 e 22

Unità Didattica 1 Linguaggio C. Fondamenti. Struttura di un programma.

L Allocazione Dinamica della Memoria

Programmazione orientata agli oggetti: le classi

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

18 - Classi parzialmente definite: Classi Astratte e Interfacce

Puntatori (in C) Emilio Di Giacomo

Descrizione delle operazioni di calcolo. Espressioni costanti semplici

Linguaggio C. strutture di controllo: strutture iterative. Università degli Studi di Brescia. Docente: Massimiliano Giacomin

Gerarchia di classi Java 1

Corso di Linguaggi di Programmazione

Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1

Indice. Prefazione. 3 Oggetti e Java 53

Esercizi Programmazione I

Lezione 6. Visibilità degli identificatori e tempo di vita degli oggetti

I/O FILE. Sommario I/O FILE. I/O FILE LETTURA DA FILE DI TESTO oggetto di tipo ifstream. I/O FILE: lettura e scrittura su file di testo

Esercizio 3. Oppure fare queste operazioni nel metodo main all interno della classe Persona.

Funzioni e moduli. Andrea Passerini Informatica. funzioni e moduli

Corso di Fondamenti di Informatica Il sistema dei tipi in C++

Linguaggio C: le funzioni. Introduzione e sintassi

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve

Esempio: L EURO-CONVERTITORE (1) Scopo

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo

Esercitazione 5. Procedure e Funzioni Il comando condizionale: switch

Ereditarietà e Polimorfismo

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

Uso di metodi statici. Walter Didimo

Linguaggio C: le funzioni. Introduzione e sintassi

Транскрипт:

Laboratorio di programmazione Lezione VIII Tatiana Zolo tatiana.zolo@libero.it 1

PROGRAMMAZIONE A OGGETTI Quando si programma a oggetti si scompone il problema in sottogruppi di parti collegate che tengono conto sia del codice sia dei dati relativi a ciascun gruppo; i sottogruppi vengono organizzati in una struttura gerarchica; i sottogruppi vengono tradotti in unità indipendenti chiamate oggetti. Tre caratteristiche comuni a tutti i linguaggi di programmazione a oggetti: 1. Incapsulamento o information hiding 2. Polimorfismo 3. Ereditarietà PROGRAMMAZIONE A OGGETTI 2

PROGRAMMAZIONE A OGGETTI 1. Incapsulamento: programmi codice (istruzioni del programma) parte di programma che svolge le operazioni dati l oggetto di queste operazioni legati in modo creare una scatola nera indipendente: oggetto Codice e/o dati all interno di un oggetto possono essere privati per quell oggetto o pubblici. PROGRAMMAZIONE A OGGETTI 3

PROGRAMMAZIONE A OGGETTI 2. Polimorfismo: un interfaccia, molti metodi. È possibile creare un interfaccia generica per un gruppo di attività collegate, per un insieme di azioni = riduzione della complessità. PROGRAMMAZIONE A OGGETTI 4

PROGRAMMAZIONE A OGGETTI 2. Polimorfismo: un interfaccia, molti metodi. È possibile creare un interfaccia generica per un gruppo di attività collegate, per un insieme di azioni = riduzione della complessità. 3. Ereditarietà: processo mediante il quale un oggetto acquisisce le proprietà di un altro oggetto in base al concetto di classificazione gerarchica. Senza la classificazione gerarchica ogni oggetto dovrebbe definire esplicitamente tutte le sue caratteristiche. Con l ereditarietà l oggetto deve definire solo quelle caratteristiche che lo rendono unico: un oggetto può rappresentare un esempio specifico di una classe più generale. PROGRAMMAZIONE A OGGETTI 4-A

DEFINIZIONE DI CLASSE Una definizione di classe C++ è costituita da due parti: testa della classe e corpo della classe class NomeClasse { public: // insieme pubblico delle operazioni // (metodi accessibili dall esterno) private: // implementazione privata: metodi e dati // accessibili solo ad altre parti della classe } A, B; Il nome della classe rappresenta un nuovo tipo di dato: NomeClasse C; Il corpo della classe definisce la lista dei membri della classe. DEFINIZIONE DI CLASSE 5

DATI MEMBRO Sono dichiarati nello stesso modo in cui sono dichiarate le variabili. class NomeClasse { int n; char c; char str[32]; }; Un membro non può essere inizializzato esplicitamente nel corpo della classe: si usano i costruttori! class NomeClasse { int n = 0; // errore!! }; Per default i membri di una classe sono privati. DATI MEMBRO 6

METODI O FUNZIONI MEMBRO Possono essere specificati in due modi diversi: 1. definizione nel corpo della classe class NomeClasse { public: void nome_metodo(lista parametri) { // corpo del metodo } }; METODI O FUNZIONI MEMBRO 7

METODI O FUNZIONI MEMBRO 2. definizione all esterno del corpo della classe usando l operatore di scope resolution :: class NomeClasse { public: void nome_metodo(lista parametri); }; void NomeClasse::nome_metodo(lista parametri) { // corpo del metodo } METODI O FUNZIONI MEMBRO 8

METODI O FUNZIONI MEMBRO Le funzioni membro differiscono dalle funzioni ordinarie per le seguenti proprietà. 1. Sono dichiarate nel campo d azione della classe, quindi il nome di una funzione non è visibile all esterno dello scope della sua classe. Ci si riferisce ad una funzione membro usando l operatore punto: NomeClasse A; A.nome_metodo(); 2. I metodi hanno privilegi di accesso completo ai membri sia pubblici sia privati della classe mentre, in generale, le funzioni ordinarie hanno accesso soltanto ai membri pubblici. METODI O FUNZIONI MEMBRO 9

COSTRUTTORI E DISTRUTTORI Costruttore: permette agli oggetti di inizializzare se stessi al momento della creazione. Funzione membro speciale con stesso nome della classe; non ha tipo di ritorno. È applicato automaticamente dal compilatore ad ogni oggetto prima che questo venga usato. Costruttore di default: invocato senza che l utente specifichi un argomento. Costruttore con parametri. COSTRUTTORI E DISTRUTTORI 10

COSTRUTTORI E DISTRUTTORI Costruttore: permette agli oggetti di inizializzare se stessi al momento della creazione. Funzione membro speciale con stesso nome della classe; non ha tipo di ritorno. È applicato automaticamente dal compilatore ad ogni oggetto prima che questo venga usato. Costruttore di default: invocato senza che l utente specifichi un argomento. Costruttore con parametri. Distruttore: spesso è necessario che un oggetto esegua un azione o una serie di azioni quando viene distrutto (es. deallocazione della memoria precedentemente allocata). Funzione membro speciale con stesso nome della classe preceduto da una tilde ~; non ha tipo di ritorno. Viene invocato ogni qualvolta un oggetto esce dal campo d azione. COSTRUTTORI E DISTRUTTORI 10-A

COSTRUTTORI E DISTRUTTORI class Tempo { public: Tempo(); Tempo(int H, int M, int S); ~Tempo(); private: int secondi; }; Tempo::Tempo() { } secondi = 0; COSTRUTTORI E DISTRUTTORI 11

COSTRUTTORI E DISTRUTTORI Tempo::Tempo(int H, int M, int S) { if (H < 0 H > 24 M < 0 M > 60 S < 0 S > 60) secondi = 0; // e una scelta! else secondi = H*3600 + M*60 + S; } Tempo::~Tempo() { // eventuali operazioni in chiusura, in questo caso nessuna. } Nel main: Tempo T1; // invocazione del costruttore di default Tempo T2(21,0,0); T1 = Tempo(12,55,49); COSTRUTTORI E DISTRUTTORI 12

Tempo T1; Tempo T2(2,15,0); OVERLOADING DI OPERATORI Dati due oggetti Tempo voglio poter scrivere T1+T2 (e non somma(t1, T2) dove somma() è una funzione...). Tempo operator+(tempo T) { Tempo tmp; tmp.secondi = (T.secondi + secondi) % 86400; return tmp; } Ora posso scrivere T1 = T1 + T2; che equivale a scrivere T1 = T1.operator+(T2); OVERLOADING DI OPERATORI 13

OGGETTI CONST Oggetti costanti: ogni tentativo di modificare quel valore dal programma provoca un errore a tempo di compilazione: const int n = 100; const Tempo T(10,30,0); // non modifica T void funzione1(const Tempo& T); // eventuali modifiche di T locali al metodo void funzione2(tempo T); // eventuali modifiche di T si applicano anche // all oggetto originale void funzione3(tempo& T); OGGETTI CONST 14

METODI CONST Per rispettare la caratteristica const di un oggetto, il compilatore deve distinguere tra metodi insicuri (che tendono a modificare l oggetto) e metodi sicuri (che non tentano di modificarlo) che sono detti metodi costanti. // Puo modificare l oggetto di invocazione void metodo1(const Tempo& T); // Non puo modificare l oggetto di invocazione void metodo2(const Tempo& T) const; È bene dichiarare const i metodi che non modificano i dati della classe. METODI CONST 15

ESERCIZI 1. Costruire la classe Razionale con due dati privati che rappresentano numeratore e denominatore (ricordare costruttore/i e distruttore!). Scrivere un programma che chieda all utente di inserire 2 num. razionali (1 modo: inserendo numer. e denom. di ogni numero separatamente; 2 modo: nella forma n/d con l overloading dell operatore >>) e il simbolo di operazione che si vuole eseguire (somma, sottrazione, moltiplicazione o divisione). 1 modo: le operazioni saranno implementate con 4 metodi della classe (senza ricorrere all overloading); 2 modo: le operazioni verranno eseguite utilizzando l overloading di operatori (+,,, /). Restituire i risultati (1 modo: stampando numer. e denom. di ogni numero separatamente; 2 modo: nella forma n/d con l overloading dell operatore <<) semplificati, cioè con frazioni ridotte ai minimi termini. Ripetere l esercizio fintanto che il risultato dell operazione risulta positivo (overloading dell operatore > o dell operatore <). (cl_razionale_operazioni.cpp.) ESERCIZI 16

ESERCIZI 2. Definire la classe Tempo con un unico dato privato, sec, che è l equivalente in secondi di una tripla (ore, minuti e secondi). Definire i seguenti metodi (oltre costruttori e distruttore): ore() : restituisce l ora (a partire da sec); minuti() : restituisce i minuti (a partire da sec); secondi() : restituisce i secondi (a partire da sec); operator+() : somma di due ore del giorno, quindi di due oggetti Tempo (il risultato deve essere sempre un oggetto Tempo ); operator==() : confronta due oggetti Tempo. quello che volete... Esempio: il dato privato sec contiene 7812. Allora i primi 3 metodi restituiranno rispettivamente 2, 10, 12. (tempo.cpp.) ESERCIZI 17