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 elementari

Lezione 6 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 elementari
  2. tipi di dati
  3. tipi di dati elementari in C++
  4. conversione fra tipi di numeri in C++
  5. tipi di dati definiti dall'utente
  6. interfaccia, implementazione e client
  7. interfacce per la compilazione separata

tipi di dati

tipo di dati : un insieme di valori e una collezione di operazioni su di essi

tipi di dati elementari in C++

tipi di dati elementari predefiniti in C++:

la rappresentazione degli interi dipende dall'architettura della macchina

anche la rappresentazione in virgola mobile dipende dall'architettura della macchina: il tipo double impiega il doppio dello spazio, rispetto al tipo float, per la rappresentazione in doppia precisione

conversione fra tipi di numeri in C++

ai simboli delle operazioni aritmetiche sui tipi int, float e rispettive varianti si applica l'overloading:

tipi di dati definiti dall'utente

il testo (Sedgewick, 2003) propone un programma per il calcolo della media e della varianza di N numeri (Programma 3.2, p. 75)

nel programma si assume che i numeri siano interi, e che l'input sia costituito solo dal valore di N, mentre gli N numeri interi vengono quindi generati pseudocasualmente dalla funzione di libreria rand()

per rendere il programma più facilmente adattabile al calcolo, con lo stesso algoritmo, su numeri di altro tipo, si usa il seguente costrutto per la definizione del tipo Number con la funzione di generazione pseudocasuale randNum() :

questo esempio mostra un tipo di dato definito dall'utente come ridenominazione di un tipo esistente (dunque con lo stesso insieme di valori) ed estensione delle operazioni con una nuova funzione

interfaccia, implementazione e client

la precedente definizione di tipo ne combina

è buona norma di metodo

al fine di svincolare l'uso delle funzioni dichiarate nell'interfaccia, da parte di programmi o moduli client, dalla loro implementazione: l'uso richiede solo l'interfaccia!

in tal modo si può sostituire un'implementazione con un'altra, ad esempio più efficiente, senza dover modificare i client

nel caso in esame, si possono codificare interfaccia e implementazione in due file distinti, ad es. Number.h e NumberImpl.c++, con i seguenti rispettivi contenuti:

interfacce per la compilazione separata

la separazione di interfaccia e implementazione di un tipo di dato definito dall'utente permette di modificarne l'implementazione

se si effettua la compilazione separata di client e implementazione del tipo di dato

come si fa?   supponiamo, nell'esempio visto prima, che il client sia il programma codificato nel file MedVar.c++, che conterrà la direttiva   #include "Number.h"

con il compilatore GCC in ambiente Unix/Linux, i primi due comandi che seguono rispettivamente generano i moduli oggetto dell'implementazione e del client (con estensione .o), senza produrre alcun programma eseguibile (opzione "-c"), mentre il terzo comando assembla i moduli oggetto e genera l'eseguibile MedVar nella directory bin