OOP in C++ ha membro (dati membro) e funzioni membro In Java i dati membro sono chiamati attributi e le funzioni membro metodi

Documenti analoghi
Laboratorio di programmazione

La programmazione ad oggetti (OOP)

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

Dichiarazione di una classe. Dichiarazione ereditarietà

Fondamenti di Informatica

Fondamenti di Programmazione Prof.ssa Elisa Tiezzi. Programmazione orientata a oggetti

14 - Metodi e Costruttori

Strutture come parametri di funzioni

Ancora sulle Classi in C++ e Java. this

Un tipo di dato astratto (ADT) definisce una categoria concettuale con le sue proprietà: una definizione di tipo

Definizione di classi

Programmazione ad oggetti

UNIVERSITA DEGLI STUDI ROMA TRE DIPARTIMENTO DI MATEMATICA E FISICA

Gli oggetti. Ogni oggetto ha un interfaccia e ogni oggetto ha un tipo. Incapsulamento. Oggetti. Contatore. Invio di Messaggi

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

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

Il paradigma OO e le Classi

C++ funzioni Alberto Ferrari. Alberto Ferrari Programmazione di applicazioni SW

Java: Definire Classi e Creare Oggetti

Programmazione Java Avanzata Programmazione Object- Oriented in Java

Strutture dati. Il che cosa e il come. F. Damiani - Alg. & Lab. 04/05

Fondamenti di Informatica II 3. Funzioni in C++ (parte 1)

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

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

Corso di Linguaggi di Programmazione

Client - Interfaccia - Implementazione

Oggetti. Definizioni di Classi II

Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC)

Java Gli array. Array

Lezione 4. Costruttori

Classe Squadra. #include <iostream> using namespace std;

AGGIORNAMENTI RECENTI IN C++ Programmazione ad Oggetti Corso di Laurea in Informatica Università della Calabria

Programmazione orientata agli oggetti. Ivan Lanese

Funzioni, Stack e Visibilità delle Variabili in C

Esercitazione n 2. Obiettivi

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

Corso di Linguaggi di Programmazione

Lezione 5 Namespace e JavaDoc

Il sistema C è formato dal linguaggio C, dal preprocessore, dal compilatore, dalle librerie e da altri strumenti di supporto.

Corso di Informatica A.A

Progettazione Object-Oriented

Programmazione I - Laboratorio

Programmazione M.A. Alberti. Comunicazione digitale AA 2009/ Classi in Java 1. Le classi in Java. Oggetti. Classi. Classi. Visibilità dei dati

Programmazione a oggetti

Esercitazione n 2. Obiettivi

Rappresentazione in C++ di tipi di dato: le classi. + insieme di operatori. 13 Maggio 1975, 23/12/01, ,

Programmazione con Java

OCA JAVA 7 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO

File: /home/peppino/area_lavori/ese enti/oggetti/timbro_classe.cpp Pagina 1 di 5

Programmazione ad oggetti

Il C nel C++: Funzioni

Funzioni (1) Il C nel C++: Funzioni. Funzione (2) Vantaggi delle Funzioni. Localizzazione della funzionalità correggibilità manutenibilità

Variabili e Funzioni. Informatica 1 / 19

Uso di classi e oggetti. Prof. Francesco Acarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni

Passaggio dei parametri

Informatica e Laboratorio di Programmazione C++ Object Oriented Programming Alberto Ferrari

Perché il linguaggio C?

Object-Oriented Technology. Giuliano Armano 1

Definizione di classi. Walter Didimo

Gestione dinamica della memoria

deve conoscerne solo l interfaccia:

PROGRAMMA = ALGORITMO

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - Programma

Introduzione all OOP!

Laboratorio di Algoritmi e Strutture Dati

Perché il linguaggio C?

Preprocessore, linker e libreria standard

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

Programmazione Java Struttura di una classe, Costruttore, Riferimento this

Dal C al C++ Corso di Linguaggi di Programmazione ad Oggetti 1. a cura di Giancarlo Cherchi

Informatica I. Ingegneria Medica. Prof. Diego Salamon

Esiste però anche un ambiente globale: quello dove tutte le funzioni sono definite. Qui si possono anche definire variabili, dette variabili globali

Esiste però anche un ambiente globale: quello dove tutte le funzioni sono definite. Qui si possono anche definire variabili, dette variabili globali

Esercitazione n 2. Obiettivi

Le eccezioni in Java

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

OCA JAVA 8 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO

Metodi. Un metodo è una porzione di codice a cui si associa un nome. Un istruzione eseguita da un metodo può essere:

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

Corso di Programmazione a oggetti

Programmazione orientata agli oggetti Classi, package e file system. Package

Programmazione orientata agli oggetti Ereditarietà

Le funzioni: dichiarazione, definizione e chiamata Il passaggio degli argomenti per valore e riferimento La funzione main() Le regole di visibilità

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

I membri e le restrizioni di accesso

Corso di Programmazione ad Oggetti

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

Programmazione orientata agli oggetti Classi, package e file system. Package

Java. Java : compilatore e interprete. Programma Java. Java Virtual Machine. Il linguaggio Java è un linguaggio di programmazione ad alto livello

Java. Java : compilatore e interprete. Programma Java. Java Virtual Machine. Token. Alfabeto

Introduzione al C. Unità 10 Preprocessore

Progetti su più File Sorgenti

Laboratorio di Algoritmi e Strutture Dati. Esercizi

Variabili e assegnazione

Transcript:

OOP in C++ Classi e Oggetti Una classe èuntipochehavariabili ha membro (dati membro) e funzioni membro In Java i dati membro sono chiamati attributi e le funzioni membro metodi Una variabile ab di un tipo casse classe è detta oggetto Un programma è un insieme di oggetti che interagiscono 1

Incapsulamento Un tipo di dato consiste di Un insieme di valori Un insieme di operazioni È un tipo di dato astratto (ADT) se l implementazione dei valori e delle operazioni è nascosta al programmatore I tipi di dati predefiniti sono ADT Le classi devono essere ADT Membri Privati e Pubblici I membri privati possono essere referenziati solo all interno delle funzioni membro I membri pubblici possono essere referenziati ovunque È buona norma rendere private tutte le variabili membro e pubbliche le sole funzioni membro necessarie (quelle che espongono le funzionalità della classe) 2

Sezioni Pubblica e Privata Generalmente si definisce una sola sezione pubblica e una sola sezione privata Generalmente la sezione pubblica compare prima (per maggior chiarezza verso chi legge il codice) In assenza di specificazione C++ considera i membri privati Un esempio: classe Tempo class Tempo public: void setore (int o)ore=o;} int getore() return ore;} void setminuti (int m)minuti=m;} int getminuti() return minuti;} void visualizza() cout<<ore<<":"<<minuti<<endl;} private: int ore; int minuti; }; estempo01.cpp 3

Classi: Utilizzo Pratico Una volta definita, la classe può essere utilizzata come oggetto, array, puntatore e riferimento Tempo t1,t2; t1.setore(9); t2=t1; t2.visualizza(); Tempo* t3; t3 = new Tempo(); t3->setore(8); (*t3).setminuti(20); //forma deprecata Tempo vt[3]; vt[0].setore(10); Tempo &t4=t1; Funzioni accessor e mutator Le funzioni accessor consentono di leggere i dati dell oggetto Le funzioni mutator consentono di modificare i dati dell oggetto Queste funzioni forniscono un accesso controllato ai dati Generalmente si definiscono setter/getter functions E buona norma mantenere private le variabili membro e dotarle di funzioni accessor e mutator solo se necessario 4

Funzioni accessor e mutator (2) Una funzione che setta il valore di un dato dovrebbe anche controllare la validità di tale valore (validation) e lasciare comunque il dato in uno stato consistente (oppure lanciare un eccezione...) void setminuti (int m) if (m>0 && m<60) minuti=m; else minuti=0; } Costruttore È una funzione membro che viene chiamata automaticamente quando viene dichiarato un oggetto della classe Usata per operazioni di inizializzazione Deve e avere e lo stesso nome della classe Non può ritornare un valore estempo02.cpp 5

Costruttore (2) Deve stare nella sezione pubblica della classe Non può essere invocato come le altre funzioni membro Definizione ealternativa a apee preferibile: e sezione e di inizializzazione (vedi) Spesso si ha overloading dei costruttori Costruttore senza Argomenti Quando si dichiara una variabile di tipo classe e si vuole invocato il costruttore senza argomenti, non si usano le parentesi Esempio: Tempo t1; 6

Chiamata Esplicita del Costruttore Il costruttore può essere chiamato esplicitamente per modificare le variabili membro di un oggetto Crea un oggetto anonimo e lo inizializza con i valori degli argomenti L oggetto anonimo può essere assegnato a una variabile del tipo classe Esempio: Tempo t2 = Tempo(9); Tempo t4(12); Tempo* t3; t3 = new Tempo(10,5); È più efficiente usare le mutator functions Se sono disponibili sia costruttore/i che mutator functions, queste è consigliabile siano chiamate anche dal costruttore (per non ripetere codice) Costruttore di Default Un costruttore senza argomenti è detto costruttore di default Se non definiamo nessun costruttore viene creato un costruttore di default Se definiamo almeno un costruttore il costruttore di default non viene creato È bene includere sempre il costruttore di default 7

Sezione di Inizializzazione Le variabili membro vengono create e inizializzate dal costruttore nell ordine in cui sono definite nella classe La sezione di inizializzazione è più efficiente per variabili membro di tipo classe Le variabili membro possono essere inizializzate all interno di una sezione di inizializzazione, mentre costanti, riferimenti e membri di tipo classe devono utilizzare questo costrutto Tempo (int o=0, int m=0) :ore(o),minuti(m) } estempo03.cpp Variabili Membro di Tipo Classe Una classe può avere una variabile membro di tipo classe I parametri del costruttore della classe più esterna possono essere usati nella chiamata del costruttore della variabile membro 8

Distruttori Funzione membro chiamata automaticamente quando un oggetto viene distrutto Non riceve parametri e non restituisce valori Una classe deve avere un unico distruttore Nome del distruttore: + nomeclasse Il distruttore non distrugge materialmente l oggetto, ma è delegato a compiere tutte quelle operazioni utili prima che l oggetto venga distrutto (es.: rilascio della memoria allocata dinamicamente) estempo04.cpp Interfaccia ed Implementazione L interfaccia di una classe consiste di Dichiarazioni delle funzioni membro pubbliche Commenti L implementazione di una classe consiste di Variabili membro e dichiarazioni delle funzioni membro private Definizioni delle funzioni membro Generalmente stanno in file diversi, ma è importante la separazione concettuale 9

Suddivisione del Codice in File Separazione tra la classe e i programmi che la usano Riuso: parti separate facilmente riusabili (libreria) Compilazione selettiva Separazione tra interfaccia e implementazione Incapsulamento: occultamento dei dettagli Diverse implementazioni di una stessa libreria Compilazione Separata Il file che contiene il programma che usa la classe si chiama file di applicazione Sia l implementazione che l applicazione devono includere l header file L implementazione e l applicazione vengono compilate separatamente Per ottenere l eseguibile occorre linkare i due oggetti 10

Programmazione Orientata agli Oggetti Un programmatore deve poter usare la classe conoscendo solo l interfaccia Vantaggio: è possibile cambiare l implementazione senza dover cambiare qualsiasi altro codice che usi la classe Filosofia: descrivere il problema in termini di oggetti che interagiscono, i piuttosto t che algoritmi i che operano su dati (anche algoritmi e dati possono cambiare...) estempo05 Le fasi di compilazione sorgenti Tempo.cpp Tempo.h esempiot.cpp g++ -c Tempo.cpp g++ -c esempiot.cpp oggetti Tempo.o esempiot.o eseguibile esempiot g++ Tempo.o esempiot.o o esempiot 11

Classe di Esempio: Interfaccia #ifndef TEMPO_H #define TEMPO_H class Tempo public: Tempo (int, int); // Costruttore ~Tempo(); // Distruttore // Funzioni accessor e mutator void setore (int); int getore(); void setminuti (int); int getminuti(); ti() // altre funzioni pubbliche void visualizza(); private: int ore; int minuti; }; #endif // direttiva al compilatore // per prevenire inclusioni multiple Classe di Esempio: Implementazione #include "Tempo.h" #include <iostream> using namespace std; // Costruttori Tempo::Tempo (int o, int m) cout<<"costruttore con due parametri"<<endl; setore(o); setminuti(m); } Tempo::~Tempo() cout<<"chiamato distruttore"<<endl; } void Tempo::setMinuti (int m) minuti=m; m; } int Tempo::getMinuti() return minuti; } void Tempo::visualizza() cout<<ore<<":"<<minuti<<endl; } estempo05 12

Membri static: Variabili Una variabile membro static è condivisa da tutti gli oggetti di una classe Usata dagli oggetti della classe per comunicare e coordinarsi Solo gli oggetti della classe possono accedervi Va inizializzata al di fuori della definizione della classe, una sola volta Membri static: Funzioni Una funzione membro static accede solo ai membri static Non può accedere ai dati dell oggetto chiamante Viene invocata usando il nome della classe e lo scope resolution operator (::) La parola chiave static va messa solo nella dichiarazione estempo06 13