1. Introduzione



1.1 Un po' di storia

Il C++ è un'invenzione del matematico americano Bjarne Stroustrup che negli anni '80, dipendente presso l'azienda AT&T-Bell Laboratories, decise di mettere a punto un nuovo linguaggio di programmazione che gli consentisse di simulare in maniera efficace le centraline di commutazione telefonica.
La situazione nel mondo della ricerca universitaria a quel tempo era la seguente: da un lato cominciava ad affermarsi il linguaggio C per la sua potenza e versatilità, dall'altro si facevano strada le prime teorie di Programmazione Orientata ad Oggetti. Da questo contesto accademico, Stroustrup trasse l'ispirazione che lo portò a unire queste due realtà: C e OOP. Era l'inizio di una grande avventura che avrebbe radicalmente segnato il futuro percorso dell'informatica!


1.2 Dalla realtà ... al Computer

In questo paragrafo si vuole descrivere degli esempi di carattere generale, non necessariamente inerenti alla programmazione.

La metodologia di programmazione Object Oriented rivoluziona il modo classico di programmare. Essa parte dal presupposto che un qualsiasi oggetto della realtà quotidiana può essere schematizzato nel modo seguente:

Vediamo subito qualche esempio.
  1. Tanto per restare nel campo dell'informatica, si consideri un Monitor.
    Esso appare all'utente come uno strumento per visualizzare dati e immagini. Inoltre, è dotato di alcuni comandi che consentono di accenderlo o spegnerlo, di impostare la luminosità, il contrasto, etc. Ebbene, questa è l'interfaccia. L'utente non conosce come funziona il Tubo Catodico, o quali circuiti elettronici costituiscano la struttura interna del monitor: tutte queste informazioni sono volutamente tenute nascoste: egli conosce solo come usare l'oggetto "Monitor".
    Per dirla in breve, i dettagli implementativi dell'oggetto sono occultati.

  2. Si consideri ora un oggetto tanto diffuso nella recente realtà quotidiana: il Telefono Cellulare.
    Il possessore di tale oggetto sa benissimo che esso serve per comunicare; sa inoltre come effettuare una chiamata, rispondere ad una chiamata, inviare un SMS, e così via. Ma certamente non conosce la tecnologia elettronico-circuitale che risiede all'interno del telefonino, nè tantomeno i protocolli di telecomunicazione adoperati. Queste informazioni sono incapsulate in modo ben nascosto e costituiscono la struttura interna dell'oggetto in esame.
Dagli esempi sopra citati, si intuisce che la schematizzazione di un oggetto fisico in termini di Interfaccia e Implementazione ben riproduce la realtà che ci circonda.

Classe

Restando sempre ben ancorati al mondo reale, è utile soffermarsi su un altro aspetto altrettanto basilare per la OOP: l'Astrazione Concettuale.
Un oggetto è caratterizzato da determinate proprietà che lo distinguono da oggetti della medesima specie: ad esempio, nel caso del telefono cellulare sopracitato, esso sarà caratterizzato dalla marca, dal tipo di protocollo di comunicazione (ETACS, GSM, DECT), dalla frequenza di trasmissione (900 MHz, 1800 MHz), dalla memoria interna della rubrica telefonica, dall'autonomia della batteria, etc. Queste ed altre proprietà differenziano un cellulare da un altro: tutti però sono oggetti accomunati dall'appartenere ad una stessa categoria , ossia la categoria "Telefono Cellulare" - che quindi può essere considerata come un'astrazione concettuale - di cui condividono alcune proprietà ed alcune funzioni.
Tale schematizzazione si concretizza nella OOP con il concetto di Classe.

L'ultimo aspetto a cui si vuole accennare in questa breve Introduzione è l'Ereditarietà.
Si tratta di un concetto legato alla teoria dell'evoluzione biologica sviluppata dal famoso scienziato Charles Darwin.
Si consideri il seguente esempio zoologico.
Gatto Il "Gatto" è un caso particolare di "Mammifero". Un Mammifero è un caso particolare di "Animale Vertebrato". Un Animale Vertebrato è un caso particolare di "Animale".
E' dunque possibile descrivere questi concetti in modo gerarchico, ovvero graficamente attraverso una struttura ad albero. Un processo di questo tipo si dice Derivazione.
Da questo esempio si nota come attraverso l'uso di strutture gerarchiche sia possibile rappresentare in modo efficiente e senza sprechi dati ed eventuali funzioni associati ad essi. Infatti, qualsiasi istanza del concetto di Animale è caratterizzato da determinate funzioni (mangia, respira, cresce, si riproduce). Un Animale Vertebrato, oltre ai dati precedenti, ha in più una colonna vertebrale. Un Mammifero ha in più la capacità di allattare i piccoli. Un Gatto, oltre alle caratteristiche precedenti, ha 4 zampe, è un Animale domestico, etc.


Per ora è tutto!
Nel prossimo capitolo vengono ripresi i concetti fin qui illustrati per essere calati nel contesto del linguaggio di programmazione C++.


dx
Precedente
back
Home page
dx
Successivo