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
 
 
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