prof. Nunzio Brugaletta
C++: programmazione e oggetti

EnneBi - Programmazione
Avanti - Indietro - Inizio

Dalla struttura alla classe libro

Viene presentato, di seguito, il file c_libro nel quale è implementata, estendendola rispetto alla presentazione contenuta in un precedente paragrafo, la classe libro per la gestione dei prestiti in una biblioteca:

namespace biblioteca{	/*1*/
  
  struct datilib{	/*2*/
    string titolo;
    string autore;
    string editore;
    float prezzo;
  };

  class libro{       	/*3*/                                                   
  public:
    void setLibro(datilib);	/*4*/
    bool getInPrestito() const {return presente;};	/*4*/

    bool prestato();	/*5*/
    bool restituito();	/*5*/
    friend ostream& operator<<(ostream&, const libro&);	/*6*/
  protected:
    datilib libbib;	/*7*/
    bool presente;	/*8*/
  };

  // overloading operatore inserimento

  ostream& operator<<(ostream& output, const libro& l1)
  {
    output << l1.libbib.titolo << " | " << l1.libbib.autore << " | " 
           << l1.libbib.editore << " | " << l1.libbib.prezzo;

    if(l1.presente)
      cout << "\nLibro presente" << endl;
    else
      cout << "\nLibro in prestito" << endl;
    return output;
  };

  // Implementazione metodi della classe

  void libro::setLibro(datilib lset)	/*9*/
  {
    libbib = lset;	/*10*/
    presente=true;	/*11*/
  }

  // Operazioni di prestito

  bool libro::prestato()	/*9*/
  {
    bool prestitoOk=false;
    if (getInPrestito()){
      presente   = false;
      prestitoOk = true;
    };
    return prestitoOk;
  }

  bool libro::restituito()	/*9*/
  {
    bool ritornatoOk=false;
    if (!getInPrestito()){
      presente    = true;
      ritornatoOk = true;
    };
    return ritornatoOk;
  }
}

Tutta la definizione della classe è definita nello spazio di nomi biblioteca (1).

Nella 2 è definita una struttura di tipo datilib: l'insieme di dati che compongono un libro, l'anagrafica del libro.

Nella 3, invece, il libro diventa una entità su cui si svolgono determinate operazioni e non solo un insieme di dati. La modifica sostanziale è indicata anche dai nomi utilizzati per le variabili: da datilib (dati del libro) a libro (libro in una biblioteca). D'altra parte anche nel mondo reale il modo di agire è abbastanza simile: si registrano i dati del libro e quindi si inserisce il libro nelle disponibilità della biblioteca.

Per poter assolvere ai compiti richiesti da un libro in una biblioteca è necessario, oltre che definire i dati che compongono il libro dal punto di vista dell'utilizzatore della classe (7), anche dati (8) gestiti internamente alla classe stessa. In ogni caso tutti i dati, al solito, sono definiti nella parte protected della classe, accessibili alle classi derivate, e sono gestiti dai metodi pubblici definiti nella stessa.

Fra i metodi pubblici sono definiti alcuni di tipo set e get (4), rispettivamente, per l'inserimento di dati (un libro come insieme di dati diventa un oggetto, un libro della biblioteca) e per la conoscenza della disponibilità del libro, oltre che (5) metodi specifici degli oggetti che interessano. La 6 ridefinisce l'operatore di inserimento per gli oggetti della classe. La presenza del qualificatore const nel metodo getInPrestito da una parte indica il fatto che il metodo non modifica i dati della classe (si tenga presente che anche se non esplicitato è come se i dati della classe fossero passati come parametro per riferimento alla funzione), dall'altra garantisce da possibili errori di modifica involontaria di qualche dato: il compilatore non permetterebbe l'operazione.

Nell'implementazione dei metodi (9) è utilizzato l'operatore di visibilità :: per poter accedere a tutti i dati della classe.

Le operazioni sul libro da gestire nella biblioteca prevedono, fra le altre, la conservazione dei dati del libro (10) e il settaggio della variabile presente (11) ad indicare la disponibilità, al prestito, del libro stesso.

I metodi 5 implementano le operazioni ammissibili per i libri. Come si nota nelle definizioni, si tratta, sostanzialmente, di modificare l'attributo presente.



Avanti - Indietro - Inizio

http://ennebi.solira.org
ennebi@solira.org