Laboratorio di programmazione

Documenti analoghi
Ingegneria del Software

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

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

Corso di Laboratorio 2 Programmazione C++ Silvia Arcelli. 24 Ottobre 2014

Corso di Programmazione a oggetti

Lezione 4. Costruttori

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

Puntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori

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

JavaScript Core Language. Prof. Francesco Accarino IIS Atiero Spinelli Sesto San Giovanni via leopardi 132

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

Lettura e scrittura di file di dati input/output

Variabili e Metodi di classe Interfacce e Package Gestione di File in Java

Puntatori in C Lucidi della Pof.ssa Pazienza

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

Programmazione ad oggetti

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

Strutturare il codice: sottoprogrammi

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

Le classi. Costruttori

Puntatori. Fondamenti di Programmazione

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

Programmazione (imperativa)

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

I vettori in C. Vettori. Definizione di vettori in C. int dato[10] ; int. Numero di elementi. Tipo di dato base. Nome del vettore.

Corso di Fondamenti di Informatica I

L Allocazione Dinamica della Memoria

Informatica 3. Informatica 3. LEZIONE 2: Sintassi e semantica. Lezione 2- Modulo 1. Le componenti di un linguaggio di programmazione

Abstact Data Type. Abstact Data Type. Pubblico e privato. Struttura di un ADT

Programmazione orientata agli oggetti: le classi

I puntatori (richiamo)

Introduzione ai puntatori in C Definizione

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

Riprendiamo l esercizio calcolatrice

18 - Classi parzialmente definite: Classi Astratte e Interfacce

Oggetti e classi. Cos è un oggetto

Puntatori (in C) Emilio Di Giacomo

Corso di Programmazione a oggetti

Corso di Programmazione ad Oggetti

Informatica I. Ingegneria Medica. Prof. Diego Salamon

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

Descrizione delle operazioni di calcolo. Espressioni costanti semplici

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

Esempio: Costruttori ed ereditarietà

Gerarchia di classi Java 1

Corso di Linguaggi di Programmazione

Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

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

Introduzione alla Programmazione in Java attraverso un esempio commentato

Corso di Reti di Calcolatori L-A

Indice. Prefazione. 3 Oggetti e Java 53

Esercizi Programmazione I

uguale livello gerarchico non vi sono funzioni più importanti di altre main main

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

Strategie di programmazione

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

Funzioni e moduli. Andrea Passerini Informatica. funzioni e moduli

Derivazione di Classi

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

Linguaggio C: le funzioni. Introduzione e sintassi

Programmazione Java: Polimorfismo

Cognome Nome Matricola Postazione PC. Corso di Laurea in Ingegneria Gestionale Esame di Informatica - a.a Gennaio 2015

Serializzazione Java. Serializzazione. Calendario esercitazioni e laboratori. Applicazioni della Serializzazione

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve

1 Il Paradigma ad Oggetti

Una classe Borsellino. Tipi numerici di base - Costanti. Esempio d uso. Classe Borsellino cont d. Primi passi per l implementazione di Purse

Tipi di dato. Il concetto di tipo di dato viene introdotto per raggiungere due obiettivi:

Esempio: L EURO-CONVERTITORE (1) Scopo

Tempo di vita e scope delle variabili

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo

Esercitazione 5. Procedure e Funzioni Il comando condizionale: switch

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

Concetti base programmazione. Antonio Gallo

Ottenere una modifica del parametro attuale

Ereditarietà e Polimorfismo

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

Uso di metodi statici. Walter Didimo

Unità Didattica 2 Linguaggio C. Espressioni, Operatori e Strutture linguistiche per il controllo del flusso

Linguaggio C: le funzioni. Introduzione e sintassi

Il C nel C++: Funzioni

Transcript:

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