Vai alla Home Page About me Courseware Federica Living Library Federica Federica Podstudio Virtual Campus 3D Le Miniguide all'orientamento Gli eBook di Federica La Corte in Rete
 
I corsi di Ingegneria
 
Il Corso Le lezioni del Corso La Cattedra
 
Materiali di approfondimento Risorse Web Il Podcast di questa lezione

Valeria Vittorini » 16.Classi: generalità e notazioni di base in C++


Rappresentazione grafica

La notazione grafica è una metafora nella quale sono rappresentati in tre sezioni contigue:

  • il nome della Classe;
  • la struttura dati (sequenza di variabili membro);
  • i metodi della Classe (funzioni membro della classe).

Ruoli di una classe

Una Classe può giocare un duplice ruolo:

  • Ruolo “Cliente”: cioè può utilizzare le risorse messe a disposizione da altre Classi.
  • Ruolo “Servente”: cioè essere usata da altre Classi o da un Programma Utente.

Una classe ha un’interfaccia


La specifica di una classe

Rappresenta un’interfaccia per la classe stessa in cui sono descritte:

  • le risorse messe a disposizione ai suoi potenziali utenti;
  • le regole sintattiche per il loro utilizzo.

E’ separata dalla implementazione, permette utilizzo senza che utente conosca i dettagli di implementazione.

È a cura dello sviluppatore della classe.

E’ scritta in un apposito “file di intestazione”.

Specifica: notazione base

Mostra codice

L’implementazione di una classe

E’ la codifica in C++ delle singole operazioni presentate nell’interfaccia della Classe.

E’ una particolare soluzione (può cambiare l’implementazione senza che cambi l’interfaccia).

È a cura dello sviluppatore della classe.

E’ scritta in un apposito “file di implementazione ” (con estensione .cpp).

Implementazione


La Classe: Uso da parte di un modulo (programma) utente

Affinché un programma possa utilizzare un classe deve:

  • includere la specifica della classe (contenuta nel file nomeClasse.h);
  • dichiarare istanze della classe.

Uso di una classe


Generazione del file eseguibile


Caratteristiche di una classe

La classe consente di definire un nuovo tipo di dato, crearne uno o più esemplari (oggetti), inizializzarli ed applicare loro i metodi di elaborazione disponibili.

La struttura dati e gli algoritmi sono tenuti nascosti all’interno del modulo che implementa la classe.

Lo stato dell’oggetto, cioè i valori correnti delle variabili che lo costituiscono, è incapsulato in una specifica struttura dati ed evolve unicamente in relazione ai metodi ad esso applicati.

L’istanziazione degli oggetti

Un oggetto è una istanza (“esemplare”) di una classe.

Due esemplari della stessa classe sono distinguibili soltanto per il loro stato (i valori dei dati membro), mentre il comportamento (le funzioni membro) è sempre identico.


Struttura degli oggetti

Ciascun oggetto della classe è costituito:

  • da una parte base, allocata per effetto della definizione dell’oggetto nel programma utente in area dati statici, stack o heap, in base alla classe di memorizzazione;
  • da una eventuale estensione, allocata in area heap.

Ciclo di vita di un oggetto

  • Definizione dell’oggetto;
  • allocazione;
  • inizializzazione;
  • deallocazione.

Ciclo di vita di un oggetto (segue)

  • Definizione oggetto: a cura del programma utente;
  • allocazione parte base: a cura del compilatore;
  • allocazione eventuale estensione: mediante una speciale funzione membro detta COSTRUTTORE (a cura quindi del produttore della classe);
  • inizializzazione oggetto: a cura del costruttore;
  • deallocazione parte base: a cura del compilatore;
  • deallocazione eventuale estensione: a cura di una speciale funzione membro detta DISTRUTTORE.

Il costruttore

Un costruttore è una funzione membro:

  • che ha lo stesso nome della classe;
  • non restituisce alcun risultato (neanche void).

L’invocazione dei costruttori

Mostra codice

Distruttori

Un distruttore è una funzione membro che:

  • è necessaria solo se l’oggetto presenta un’estensione dinamica;
  • ha lo stesso nome della classe, preceduto da ~ (tilde) e
  • non restituisce risultato (neanche void) né ha alcun parametro;
  • ha lo scopo di deallocare l’estensione dinamica di un oggetto;
  • NON può essere invocata esplicitamente dal programma utente, ma viene invocata implicitamente dal compilatore quando termina il ciclo di vita dell’oggetto.

Distruttori: esempio


L’invocazione dei distruttori

Mostra codice
  • Contenuti protetti da Creative Commons
  • Feed RSS
  • Condividi su FriendFeed
  • Condividi su Facebook
  • Segnala su Twitter
  • Condividi su LinkedIn
Progetto "Campus Virtuale" dell'Università degli Studi di Napoli Federico II, realizzato con il cofinanziamento dell'Unione europea. Asse V - Società dell'informazione - Obiettivo Operativo 5.1 e-Government ed e-Inclusion