Logo dell'Università di Catania: Siciliae Studium Generale 1434 Logo del Centro IPPARI, Programmazione
matite e gomma
Loghi istituzionali: Siciliae Studium Generale 1434, Centro ricerche IPPARI, Università di Catania, Facoltà di Scienze Matematiche, Fisiche, Naturali, Insegnamento di Programmazione

Tipi di dati astratti

Lezione 15 di Programmazione 2

Docente: Giuseppe Scollo

Università di Catania, sede di Comiso (RG)
Facoltà di Scienze Matematiche, Fisiche e Naturali
Corso di Studi in Informatica applicata, AA 2007-8

Logo di Conformità WCAG-1 di Livello Tripla A, W3C-WAI Web Content Accessibility Guidelines 1.0 Validazione XHTML 1.0 Validazione CSS 2

Indice

  1. Tipi di dati astratti
  2. classi e oggetti: origini, cenni storici
  3. tipi di dati astratti, interfacce, visibilità
  4. esempio: metrica cartesiana rivisitata
  5. funzioni e classi friend
  6. ridefinizione di operatori
  7. esercizi

classi e oggetti: origini, cenni storici

la programmazione orientata agli oggetti estende la programmazione procedurale con i concetti di

nasce nell'ambito dei linguaggi di simulazione: Simula 67

ben si presta alla rappresentazione della concorrenza

si sviluppa negli anni '80 come paradigma di progettazione del software

linguaggi più diffusi: Smalltalk, C++, Eiffel, Java

anni '90: diventa il paradigma dominante nella produzione industriale di software

standardizzazione:

tipi di dati astratti, interfacce, visibilità

il concetto di tipo di dato astratto (ingl. abstract data type : ADT) nasce negli anni '70, come costrutto per la definizione, da parte del programmatore, di costruttori di tipi di dati

ADT nei linguaggi OO:

visibilità dei membri (variabili e operazioni) di una classe: public, protected, private

in C++: si conviene che l'interfaccia di una classe consista dei profili delle sue operazioni pubbliche

esempio: metrica cartesiana rivisitata

riformuliamo nella sintassi delle classi la definizione del tipo di dato dei punti nello spazio bidimensionale, con una funzione per la distanza da un punto dato (v. lezione 7)

Punto2D.h: interfaccia + struttura dati

implementazione Punto2D.c++ (con specifica di ambito mediante "::") :

funzioni e classi friend

l'esempio precedente mostra una soluzione di compromesso fra

un altro compromesso, stavolta rispetto al principio di incapsulamento, è fornito dalla possibilità di dichiarare come friend, in un classe, funzioni e classi che non ne sono membri

ad esempio, la funzione float distanza2D(Punto2D a, Punto2D b) potrebbe venir definita al di fuori della classe Punto2D, con il codice visto nella lezione 7, pur di includere nella definizione di questa classe la dichiarazione

ridefinizione di operatori

con le classi si possono definire nuovi tipi di dati: per poterli usare in modo simile ai tipi di dati predefiniti sono necessari alcuni accorgimenti, fra i quali l'overloading di operatori di uso comune

eccone due esempi, per il tipo di dato Punto2d visto sopra

ridefiniamo l'eguaglianza di due punti, per farla valere se la loro distanza è inferiore a una data soglia:

supponiamo ora che il suddetto tipo di dato sia dotato di due funzioni membro pubbliche per leggerne le coordinate:

in tal caso possiamo ridefinire l'operatore << della classe standard ostream, per specificare l'output di dati di tipo Punto2d in un formato conveniente:

esercizi

  1. modificare l'implementazione dell'ADT Punto2D in modo da rappresentare punti in coordinate polari
  2. rivisitare la prima parte dell'esercizio 3 della lezione 7 nella sintassi delle classi: definire interfaccia, struttura dati e implementazione della classe dei punti nello spazio cartesiano a N dimensioni, con una funzione che calcoli la distanza dell'oggetto punto da un punto dato come argomento, dove N sia un parametro del costruttore dell'ADT