Lezione 5
Lezione 3
Classi, Ereditarietà

In questa quinta lezione affronteremo il problema dell'implementazione di alcune classi di esempio per impratichirci con i concetti di costruttore, incapsulamento ed ereditarietà.

ESERCIZIO 5.0 - Creazione della classe Posizione :
Implementare una classe Posizione che descriva un punto nello spazio tridimensionale:
  1. Come data membri privati usare la terna di coordinate cartesiane.
  2. Definire un costruttore di default che crei un punto di coordinate (0,0,0).
  3. Definire un costruttore che abbia come argomento una terna di double corrispondenti alle coordinate del punto.
  4. Definire metodi per restituire le coordinate del punto in sistemi di coordinate cartesiane, sferiche e cilindriche.
  5. Definire un metodo che calcoli la distanza da un altro punto.
Verificare il funzionamento della classe creando un programmino che legga da riga di comando le coordinate cartesiane di un punto e ne stampi le coordinate in un sistema di coordinate sferiche e cilindriche.

Brevi Richiami

Header file della classe

File di implementazione delle classe

Esempio di programma

Coordinate sferiche e cilindriche.

ESERCIZIO 5.1 - Prova di incapsulamento (da consegnare):
Modificare la classe Posizione in modo che i suoi data membri corrispondano ora alle coordinate sferiche. I prototipi di tutti i metodi (compresi i costruttori) devono rimanere invariati. In particolare il costruttore con una terna di coordinate cartesiane deve continuare a funzionare correttamente.
Va invece modificata l'implementazione dei metodi.
Verificare la nuova implementazione usando la stessa funzione main dell'Esercizio 3.0: il programma deve avere lo stesso comportamento con entrambe le implementazioni della classe Posizione.

ESERCIZIO 5.2 - Creazione della classe Particella e sue derivate:
Costruiamo una classe Particella caratterizzata dall'avere una massa ed una carica, quindi dotata dei seguenti metodi:
  1. Un construttore avente come argomenti massa e carica.
  2. Dei metodi di accesso ai valori di massa e carica.
  3. Un metodo per stampare tali valori.
Siccome vogliamo che questa classe sia la classe base di altre classi, dichiareremo i data membri come protected.
Costruiamo, attraverso il meccanismo di ereditarietà, una classe derivata, Elettrone, che, essendo una Particella di massa e carica note (wikipedia), ha il solo costruttore di default, che inizializza correttamente i data membri. Modifichiamo il metodo di stampa in modo che indichi che si tratta di un elettrone.
Costruiamo una classe CorpoCeleste, caratterizzato dall'essere una Particella con carica nulla, ma dotata di nome e raggio. Aggiungere metodi per modificare massa, nome e raggio del CorpoCeleste. Modifichiamo il metodo di stampa in modo che stampi anche le informazioni aggiuntive (e non stampi la carica, che non ci interessa).
Verifichiamo che le nuovi classi e l'ereditarietà funzioni correttamente:
  1. Istanziamo dinamicamente un oggetto per ogni classe.
  2. Verifichiamo che su tutti questi operano i metodi accessori di massa e carica di Particella, ma il metodo di stampa delle classi derivate.

Brevi Richiami

Classe Particella

Classe Elettrone

Classe CorpoCeleste

Esempio di programma

ESERCIZIO 5.3 - Classi come data membri (da consegnare):
Modificare la classe CorpoCeleste in modo da aggiungere ai suoi data membri anche un'istanza della classe Posizione.
Fornire anche i metodi per accedere e modificare questa posizione.
Aggiungere anche un metodo che dando una Posizione r, restituisca il potenziale gravitazionale generato dal corpo celeste in r.
Come applicazione, rispondere alla domanda: il potenziale gravitazionale prodotto dal Sole sulla Luna è più o meno grande di quello prodotto dalla Terra?

Brevi Richiami

Back to Home Page