1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a. 2001-2002 - 4° Ciclo Approfondimenti sulle Classi.

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

Oggetti Java.
Costruttori e Distruttori
PUNTATORI Introduzione
Classi ed Oggetti in Java (Cenni). Richiami Ruolo delle Classi in Java Oggetti.
Introduzione al linguaggio C
Fondamenti di Informatica
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 21 Marzo 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e Puntatori Marco D. Santambrogio – Ver. aggiornata al 18 Marzo 2013.
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
Laboratorio di Linguaggi P R I M O C O M P I T I N O Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
1 Corso di Informatica (Programmazione) Lezione 12 (19 novembre 2008) Programmazione in Java: i metodi statici.
1 Corso di Informatica (Programmazione) Lezione 13 (21 novembre 2008) Programmazione in Java: stringhe e array.
1 Lezione XIII Lu 17-Nov-2005 Programmare le classi.
Approfondimento delle classi
nome: sequenza di caratteri usata per denotare un oggetto
Le classi Definizione di classe Attributi e metodi di una classe Costruttori e distruttori Private e public Funzioni friend Il puntatore this.
Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio.
Le funzioni.
Java base IV: Java e la programmazione O.O.
FUNZIONI... Una funzione permette di dare un nome a una espressione rendendola parametrica float f(){ return * sin(0.75); } float f1(int x) { return.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
2000 Prentice Hall, Inc. All rights reserved. Capitolo 10 (Deitel) Strutture, unioni ed enumerazioni Sommario Introduzione Definire le strutture.
Il linguaggio C Le funzioni C Language Il passaggio dei parametri
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Unità Didattica 3 Linguaggio C
Enumerazioni e Classi 1. Enumerazioni Permettono di definire nuovi tipi che consistono in un insieme di valori costanti (ognuno con un nome) – Migliorano.
Sintassi base e struttura di un programma
1 Lucidi delle esercitazioni di Sistemi di Elaborazione in Rete Università degli Studi della Calabria Corso di Laurea in Ingegneria Gestionale A.A. 2003/2004.
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
1Piero Scotto - C14. Finalità del corso Programma Materiale Requisiti Spendibilità 2Piero Scotto - C14.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
Complessità di un algoritmo
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Polimorfismo.
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Ereditarietà.
Oggetti in C# Lezione 1 Classi ed istanze Oggetti in C# - Lezione 1.
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Programmazione a oggetti
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
CORSO DI PROGRAMMAZIONE II Lezione 22
GLI ARRAY MONODIMENSIONALI. Utilizzando le nostre attuali conoscenze, proviamo a risolvere il seguente problema: Calcolare la media dei voti conseguiti.
Programmazione ad oggetti
Oggetti in C# Lezione 2 Metodi e Static Oggetti in C# - Lezione 2.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Puntatori e Stringhe.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
1. 2 Variabili statiche e dinamiche Un programma è un processo in esecuzione a cui il sistema operativo assegna una certa zona di memoria. Tale zona può.
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Pile e Code.
1 novembre I nomi in Java F. Bombi 1 novembre 2002.
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Template.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 11 Ottobre 2014.
Fondamenti di Informatica II Ingegneria Informatica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
Informatica 4 Funzioni. FUNZIONE: definizione MATEMATICA Relazione (o applicazione) binaria tra due insiemi A e B che associa a ogni elemento di A un.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Progettare una classe 21 Febbraio La classe BankAccount Vogliamo realizzare una classe i cui oggetti sono dei semplici conti bancari. * Identifichiamo.
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Strutture e Classi.
Introduzione alle Classi e agli Oggetti in Java 1.
Linguaggio C: Funzioni e Puntatori Laboratorio di Programmazione Gruppo 1.
Transcript della presentazione:

1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Approfondimenti sulle Classi

2 APPROFONDIMENTI SULLE CLASSI Oggetti costanti: Un oggetto può essere dichiarato con l’attributo const che impedisce di modificarlo: const Nome_Classe Nome_Oggetto (Parametri_Costruttore); Funzioni membro costanti: Poiché gli oggetti costanti non sono alterabili, non è consentito invocare le relative funzioni membro, a meno che queste non siano state dichiarate a loro volta costanti e quindi tali da accedere ai dati membro solo in lettura: Tipo_Restituito Nome_Funzione (……) const; //Prototipo …… Nome_Funzione (……..); //Invocazione //Implementazione Tipo_Restituito Nome_Classe::Nome_Funzione (……) const {……………………..}

3 APPROFONDIMENTI SULLE CLASSI Esempio di oggetto e funzione membro costanti class Time { public: Time (int=0, int=0, int=0); void setTime (int, int, int); void displayTime ( ) const; private: int ora, minuti, secondi;}; …………… int main ( ) { const Time reference (12, 0, 0); reference. displayTime ( ); ………….. }

4 APPROFONDIMENTI SULLE CLASSI Ancora sulle funzioni membro costanti Una stessa funzione può esistere in una versione non costante che si pone in overloading con quella costante: sarà il compilatore a decidere quale funzione chiamare a seconda se l’oggetto per la quale viene invocata è stato dichiarato costante o non costante. Le funzioni costruttore e distruttore di una classe non possono essere dichiarate costanti perché modificano gli oggetti.

5 APPROFONDIMENTI SULLE CLASSI Dati membro costanti: Anche i dati membro di una classe possono essere dichiarati costanti. Il costruttore della classe non può inizializzarli con un’assegnazione, ma, in tal caso, deve essere utilizzato il costrutto di inizializzazione. L’implementazione del costruttore assume quindi l’aspetto: Nome_Classe::Nome_Classe (Parametri_Costruttore e Inizializzazioni_Dati_Membro_Costanti) :Nome_Dato1_Membro_Costante (Inizializzazione_Dato1), Nome_Dato2_Membro_Costante (Inizializzazione_Dato2), ………… {……………………………………..}

6 APPROFONDIMENTI SULLE CLASSI Esempio di inizializzazione dati membro costanti: class Time { public: Time (int=0, int=0, int=0, int=0, int=0); void setTime (int, int, int); void displayTime ( ) const; private: const int oraBase, minutiBase; int ora, minuti, secondi;}; //Costruttore Time :: Time (int o, int m, int s, int oB, int mB) : oraBase (oB), minutiBase (mB) { setTime (o, m, s);} …………...

7 APPROFONDIMENTI SULLE CLASSI Uso del costrutto di inizializzazione La sintassi del costrutto di inizializzazione può ripetersi, con virgola di separazione, per tutti i dati membro della classe, anche non costanti. E’ comunque obbligatoria per i dati membro costanti e per i riferimenti. Inizializzazione degli oggetti membro Il costrutto di inizializzazione viene utilizzato anche per l’inizializzazione degli oggetti membro. In tal caso il costruttore assume l’aspetto: Nome_Classe::Nome_Classe (Parametri_Costruttore e Inizializzazioni_Oggetti_Membro) :Nome_Oggetto1_Membro (Inizializzazione_Oggetto1), Nome_Oggetto2_Membro (Inizializzazione_Oggetto2), ………… {……………………………………..}

8 APPROFONDIMENTI SULLE CLASSI Esempio di inizializzazione di un oggetto membro: class Time { public: Time (int=0, int=0, int=0, int=0, int=0, int=0, int=0); void setTime (int, int, int); void displayTime ( ) const; private: Clock clockRef;//Oggetto membro const int oraBase, minutiBase; int ora, minuti, secondi;}; //Costruttore Time :: Time (int o, int m, int s, int oB, int mB, int oR, int mR) : oraBase (oB), minutiBase (mB), clockRef (oR, mR) { setTime (o, m, s);}

9 APPROFONDIMENTI SULLE CLASSI Funzioni friend: All’interno della definizione di una classe si può dichiarare che un’altra funzione, presente al di fuori dello scope della classe, può anch’essa accedere ai membri privati della classe. Questa dichiarazione è: friend Prototipo_Funzione_Friend; Classi friend: All’interno della definizione di una classe si può dichiarare che un’altra classe può anch’essa accedere ai membri privati della prima classe. Questa dichiarazione è: friend class Nome_Classe_Friend;

10 APPROFONDIMENTI SULLE CLASSI Esempio di funzione friend di una classe: class Count { friend void setX (Count &, int);//Dichiarazione funzione friend public: Count ( ) { x= 0;} void print ( ); private: int x;}; …………………... void setX (Count &c, int val) {c. x= val;}//Implem. funzione friend int main ( ) { Count counter; setX (counter, 5);}//Invocaz. funzione friend

11 APPROFONDIMENTI SULLE CLASSI Uso di this: this è un puntatore che, utilizzato nell’implementazione di una funzione membro (purché non statica), permette l’accesso ai membri (privati o pubblici) dell’oggetto per il quale la funzione membro è invocata. Questo accesso avviene con i tradizionali costrutti: Con l’operatore freccia:this-> Nome_Membro Con il puntatore:(*this).Nome_Membro

12 APPROFONDIMENTI SULLE CLASSI Esempio dell’uso di this: class Alfa{//Definizione classe Alfa public: Alfa (int= 0): int funct (int); private: int x: };//Costruttore di Alfa Alfa::Alfa (int a) {x= a} //Funzione membro funct int Alfa::funct (int b) {return ((this->x) + b); } //Main int main( ) { int k; Alfa oggetto1 (5); k= oggetto1.funct(6); }

13 APPROFONDIMENTI SULLE CLASSI Invocazione di funzioni a cascata: Per invocazione di funzioni a cascata s’intende una sequenza di invocazioni del tipo:..Nome_Oggetto. FunzioneA(…). FunzioneB(…). FunzioneC (…)..; Questo è possibile se a valle dell’esecuzione dell’invocazione: Nome_Oggetto. FunzioneA(…) viene restituito un riferimento a Nome_Oggetto per cui quello che segue può essere interpretato come:..Nome_Oggetto. FunzioneB(…). FunzioneC (…)….; e così via in modo iterativo.

14 APPROFONDIMENTI SULLE CLASSI Realizzazione dell’invocazione a cascata: Per realizzare l’invocazione a cascata ogni funzione della sequenza (tranne l’ultima) deve essere realizzata come segue: Prototipo: Nome_Classe &Funzione (……...); Nota: il tipo da restituire è un riferimento a un oggetto della classe. Implementazione: Nome_Classe &Nome_Classe::Funzione (……..) {…………………………… return *this;} Nota: essendo this un puntatore ad un oggetto, l’operatore * serve a deferenziare il puntatore ottenendo l’oggetto.

15 APPROFONDIMENTI SULLE CLASSI Esempio di realizzazione di invocazione a cascata: class Count { public:Count ( ) {x= 0;}; Count &funzioneA (int); Count &funzioneB (int); void funzioneC (int); private:int x;}; Count & Count :: funzioneA (int k) {x= k; return *this;} Count & Count :: funzioneB (int j) {x= x + j; return *this;} Count :: funzioneC (int s) {x= x + s;} int main ( ) { Count accum; accum.funzioneA(3).funzioneB(4).funzioneC(6);}

16 APPROFONDIMENTI SULLE CLASSI Operatori new e delete: Gli operatori new e delete permettono di allocare e distruggere dinamicamente i dati (o oggetti) di qualsiasi tipo. La sintassi per l’allocazione è: Tipo_del_Dato *Nome_Puntatore; Nome_Puntatore= new Tipo_del_Dato; L’operatore new restituisce quindi un puntatore che risulta essere il solo mezzo per l’accesso al dato allocato. In modo più stringato si può scrivere: Tipo_del_Dato *Nome_Puntatore= new Tipo_del_Dato(Inizializzaz.); Dove con Inizializzaz. s’intende un valore di inizializzazione del dato allocato.

17 APPROFONDIMENTI SULLE CLASSI Operatori new e delete: Nel caso di allocazione di array la dichiarazione da fare è invece: Tipo_del_Dato *Nome_Puntatore= new Tipo_del_Dato[Dimensione]; La deallocazione di un dato (oggetto), in precedenza allocato con new, si ottiene con l’operatore delete nel seguente modo: delete Nome_del_Puntatore; Esempi: int *datoPtr; datoPtr= new int; float *varPtr= new float (3.14); int *arrayPtr= new int [10]; delete datoPtr; delete varPtr;

18 APPROFONDIMENTI SULLE CLASSI I dati membro static di una classe Per dichiarare che un dato membro esiste in una sola copia condivisa da tutti gli oggetti di una classe si deve utilizzare il modificatore static al momento della sua dichiarazione. Inizializzazione di un dato membro static Deve essere fatta nello scope di file (ad es. nel file delle implementazioni delle funzioni membro) con una assegnazione del tipo: Tipo_del_Dato Nome_Classe :: Nome_del_Dato= Inizializzazione;

19 APPROFONDIMENTI SULLE CLASSI Accesso ad un dato membro static: Un dato membro static esiste anche se non è stato instanziato alcun oggetto della classe. L’accesso ad un dato membro static ha quindi delle differenze nei casi precedenti o successivi alla dichiarazione di oggetti. Accesso dopo l’instanziazione di oggetti: Caso di dati static e pubblici: Tutti gli oggetti possono accedervi direttamente con le solite regole, oppure si può accedere con il costrutto: Nome_Classe :: Nome_Dato. Caso di dati static e privati: Solo tramite le funzioni pubbliche o friend della classe.

20 APPROFONDIMENTI SULLE CLASSI Accesso prima dell’instanziazione di oggetti: Caso di dati static e pubblici: Con il costrutto: Nome_Classe :: Nome_Dato. Caso di dati static e privati: Solo con funzioni membro static e pubbliche richiamate con il costrutto:...Nome_Classe :: Nome_Funzione...