strutturare dati e codice



Похожие документы
Le operazioni di allocazione e deallocazione sono a carico del sistema.

costruttori e distruttori

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

Inizializzazione, Assegnamento e Distruzione di Classi

dall argomento argomento della malloc()

Allocazione dinamica della memoria - riepilogo

Visibilità dei Membri di una Classe

Grammatica di base: Pointers

Università degli Studi di Cassino Corso di Fondamenti di Informatica Puntatori. Anno Accademico 2010/2011 Francesco Tortorella

Oggetti Lezione 3. aspetti generali e definizione di classi I

Funzioni in C. Violetta Lonati

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Informatica 3. LEZIONE 7: Fondamenti di programmazione orientata agli oggetti (1)

Introduzione alla programmazione in C

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati

Appunti tratti dal videocorso on-line di Algoritmi e Programmazione Avanzata By ALeXio

Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main

Laboratorio di programmazione

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Le funzioni in C. I programmi C sono costituiti da definizioni di variabili e funzioni.

Linguaggio C. Fondamenti. Struttura di un programma.

Sistemi Operativi. Interfaccia del File System FILE SYSTEM : INTERFACCIA. Concetto di File. Metodi di Accesso. Struttura delle Directory

LINGUAGGI DI PROGRAMMAZIONE

Record in C: il costruttore struct.

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a prof.

VARIABILI LOCALI E GLOBALI (ESTERNE)

Informatica 3. Informatica 3. LEZIONE 12: Liste. Lezione 12 - Modulo 1. Posizione corrente. Introduzione

INFORMATICA - I puntatori Roberta Gerboni

Esercizio: gestione di un conto corrente

Concetto di Funzione e Procedura METODI in Java

I puntatori e l allocazione dinamica di memoria

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

Java: Compilatore e Interprete

Sistemi Operativi IMPLEMENTAZIONE DEL FILE SYSTEM. D. Talia - UNICAL. Sistemi Operativi 9.1

puntatori Lab. Calc. AA 2007/08 1

Il tipo di dato astratto Pila

Connessione ad internet

Appello di Informatica B

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Librerie. Laboratorio di Informatica Antonio Monteleone 28

Lezione 9: Strutture e allocazione dinamica della memoria

Una prima applicazione in C per l utilizzo delle socket

Sistemi Operativi IMPLEMENTAZIONE DEL FILE SYSTEM. Implementazione del File System. Struttura del File System. Implementazione

Sistema operativo: Gestione della memoria

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007

Dynamic Linking. Introduzione Creazione di una libreria dinamica Uso di una libreria dinamica

CREARE UNA LIBRERIA IN C

PROGRAMMA SVOLTO DI INFORMATICA ANNO SCOLASTICO 2013/2014. DOCENTE: Villani Chiara

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Esercitazione sulle libpq - libreria C per PostgreSQL

Sottoprogrammi: astrazione procedurale

Struttura a record. File ad accesso diretto. Modalità di apertura. Modalità di apertura

Progettazione : Design Pattern Creazionali

Definizione di nuovi tipi in C

Laboratorio di Algoritmi e Strutture Dati

Variabili e tipi di dato

Introduzione al linguaggio C Gli array

Indirizzo di una funzione. Puntatori a funzioni. Definizione di variabili. Definizione di variabili

Fondamenti di Informatica T-1, 2009/2010 Modulo 2 Prova d Esame 5 di Giovedì 15 Luglio 2010 tempo a disposizione 2h30'

Quotazione compareto( ) Quotazione piurecente( ) Quotazione Quotazione Quotazione non trovato count( )

GESTIONE INFORMATICA DEI DATI AZIENDALI

Lezione 10: Librerie e compilazione separata

I file di dati. Unità didattica D1 1


Corso di Fondamenti di Informatica

Linguaggio C - Stringhe

Laboratorio di Programmazione in Rete

Generalizzazione di funzioni e di classi. Macro come funzioni generiche

void funzioneprova() { int x=2; cout<<"dentro la funzione x="<<x<<endl; }

Introduzione a Classi e Oggetti

Relazioni tra oggetti e classi : Composizione. Relazioni tra oggetti e classi : esempio di Aggregazione. classe contenitore

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Introduzione alla Programmazione ad Oggetti in C++

Il Sistema Operativo: il File System

INFORMATICA 1 L. Mezzalira

Java:Struttura di Programma. Fabio Scanu a.s. 2014/2015

Sistemi Operativi Il Sistema Operativo Windows (parte 3)

Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it


Calcolare il massimo di una lista

Le Liste. Elisa Marengo. Università degli Studi di Torino Dipartimento di Informatica. Elisa Marengo (UNITO) Le Liste 1 / 31

Obiettivi d esame PHP Developer Fundamentals on MySQL Environment

Capitolo Quarto...2 Le direttive di assemblaggio di ASM Premessa Program Location Counter e direttiva ORG

Puntatori Passaggio di parametri per indirizzo

Fondamenti di Informatica 2

Fondamenti di Informatica T. Linguaggio C: i puntatori

MIPS Instruction Set 2

Sistemi Operativi MECCANISMI E POLITICHE DI PROTEZIONE. D. Talia - UNICAL. Sistemi Operativi 13.1

MECCANISMI E POLITICHE DI PROTEZIONE 13.1

Organizzazione degli archivi

Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12};

Capitolo Silberschatz

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

La gestione della memoria

Breve riepilogo della puntata precedente:

Gestione della memoria. Paginazione Segmentazione Segmentazione con paginazione

Транскрипт:

Puntatori e passaggio parametri strutturare dati e codice Tipo di dati int * Pi ; Op. dereferenziazione j = *Pi ; Op. indirizzo Pi = &i ; By value int f(int i) ; a = f(b) ; By address int f(int * Pi) ; a = f(&b) ; By reference int f(int & Pi) ; a = f(b) ; programmazione ad oggetti 2 Ambito di validità (scope)... dalla definizione alla chiusura del blocco in C++ definizione ovunque nel blocco variabile locale - def. interna al corpo di una function variabile globale - def. esterna ai corpi fun extern - globale in gruppo di file (external linkage) static - globale in un singolo file (internal linkage) typedef non definizione di un nuovo tipo ma alias typedef oldname newname talvolta usato per puntatori typedef int* IntPtr ; IntPtr Pi, Pj ; ma soprattutto per le strutture (in C) programmazione ad oggetti 3 programmazione ad oggetti 4

Strutturare i dati Esigenza nata dalle applicazioni gestionali in campo scientifico bastano gli array (Fortran) Raccogliere un gruppo di variabili in una struttura comune Definizione di nuovi tipi di dati Tipi di dati astratti (ADT) Per potere scrivere del codice efficiente e modulare occorre per ciascun modulo/oggetto/componente concentrarsi su cosa deve fare e non su come lo fa identificare i dettagli che si possono nascondere nel modulo ( information hiding) definire una interfaccia che isoli la struttura dei dati dal programma che la usa Programma interfaccia Add Remove Find Replace Struttura di dati programmazione ad oggetti 5 programmazione ad oggetti 6 Array, Union, Struct esempio di struct il C offre vari ausili per la strutturazione dei dati array, union e struct il C++ oltre alle strutture del C, anche le classi array : collezione di oggetti dello stesso tipo union : sovrapposizione di dati struct : collezione di oggetti di tipi arbitrari consideriamo i caratteri di un word processor. Oltre al carattere hanno un font (normale, italico, grassetto..) ed un corpo (size = 11, 12, 14..) in C è possibile memorizzare la struttura dei dati caratteri di word processor con una struct : struct wp_char { char wp_cval; int wp_font; int wp_size;; dichiarazione struct wp_char a1,a2; definizione di a1 e a2 programmazione ad oggetti 7 programmazione ad oggetti 8

Typedef & Struct Struct & Pointer in C non è possibile usare direttamente il nome di una struct nella definizione di variabili di quel tipo struct wp_char {char ; int ; int ;;... struct wp_char a1,a2; con Typedef si definisce un nuovo nome Typedef struct {char ; int ; int ; wp_char ;... wp_char a1,a2; in C++ non è necessario... SimpleStruc 1,2,3 Utilizzo: struct wp_char a1, a2; a1.wp_cval = ' f '; a1.wp_font = 1; a1.wp_size = 10; a2 = a1 Puntatori a struct struct wp_char *wp_p; wp_p = &a1.wp_cval; (*wp_p).wp_cval = 'x'; wp_p->wp_cval = 'x';. operatore assegnazione assegnazione: unica operazione tra due struct -> operatore dereferenziazione programmazione ad oggetti 9 programmazione ad oggetti 10 Struct Structure Definizione di ADT i membri di una struct sono allocati in memoria nell ordine di apparizione nella definizione il nome di una struct corrisponde al puntatore all indirizzo del suo primo membro struct wp_char item; // esempio precedente // (char *)item == &item.wp_cval; è possibile creare array di struct oppure usare struct come membri di altre struct una struct non può contenere un esempio di se stessa come un suo membro (ma un puntatore si) SelfReferential.cpp programmazione ad oggetti 11 Oltre alla struttura dei dati occorre definire delle operazioni sui dati definizione della struttura in header file definizione delle operazioni in library file esempio - Data : gestione di date esempio - Stash : un deposito generico di dati programmazione ad oggetti 12

Versione C-like: Data struct data {int giorno; int mese; int anno;; void set_data(data*, int, int, int); void next_data(data* ); void print_data(data* ); data oggi; non non ci ci sono connessioni specifiche tra tra gli gli attributi della struttura ed ed i i suoi suoi metodi occorre passare ad ad ogni ogni metodo il il puntatore alla alla struttura Versione C-like: CStash (1) Definizione della Struct size - dimensione di ogni elemento quantity - quanti elementi ci stanno next - il prossimo elemento inseribile storage - blocco di byte contigui (unsigned char *) per contenere i dati CLib.h programmazione ad oggetti 13 programmazione ad oggetti 14 Versione C-like: CStash (2) Definizione delle operazioni della ADT initialize - valori iniziali (size) add - aggiunta di elemento al deposito fetch - preleva l'elemento indicato count - numero di elementi (implementation hiding) inflate - aumenta le dimensioni cleanup - libera la memoria tutte le funzioni devono ricevere un puntatore alla struct su cui operano Versione C-like: CStash (3) Gli elementi puntati non possono essere cambiati, il puntatore si int add(cstash* s, const void* element) { if(s->next >= s->quantity) //Enough space left? inflate(s, increment); // Copy element into storage, Indice con base 0 // starting at next empty space: int startbytes = s->next * s->size; unsigned char* e = (unsigned char*)element; for(int i = 0; i < s->size; i++) s->storage[startbytes + i] = e[i]; s->next++; return(s->next - 1); // Index number programmazione ad oggetti 15 programmazione ad oggetti 16

Versione C-like: CStash (4) void inflate(cstash* s, int increase) { int newquantity = s->quantity + increase; int newbytes = newquantity * s->size; int oldbytes = s->quantity * s->size; unsigned char* b = new unsigned char[newbytes]; for(int i = 0; i < oldbytes; i++) b[i] = s->storage[i]; // Copy old to new delete [](s->storage); // Old storage s->storage = b; // Point to new memory s->quantity = newquantity; allocazione dinamica della memoria in C++ var = new type ritorna puntatore a type b = new char[100] b puntatore a primo elem. array delete var libera memoria delete []array libera l'intero array Versione C-like: commenti Ogni function deve ricevere il puntatore alla struct su cui opera Inizializzazione esplicita Unico spazio di nomi per le function (librerie di produttori diversi...) programmazione ad oggetti 17 programmazione ad oggetti 18 member functions member functions = inserire le function nella struttura dati = inserire le function nella struttura dati struct data { int giorno; int mese; int anno; void set (int, int, int); void get (int*, int*, int*); void next(); void print(); ; struct Stash { int size; // Size of each space int quantity; // Number of storage spaces int next; // Next empty space unsigned char* storage; void initialize(int size); void cleanup(); int add(const void* element); void* fetch(int index); int count(); void inflate(int increase); ; programmazione ad oggetti 19 programmazione ad oggetti 20

Note sulle member functions Non è più necessario il riferimento esplicito negli argomenti o nelle istruzioni (this) Lo spazio di nomi è delimitato dalla struct Copia unica del codice (non dei dati!) Stash A, B, C ; header file - definizione completa dell'adt incapsulare Definizione di member function poiché strutture diverse possono avere metodi interni con lo stesso nome, occorre una notazione speciale per definire un metodo void data::next() { giorno++; if (giorno > 28) { // implementare l algoritmo difficile in una Member Function, gli attributi della struct sono usati direttamente, senza dovere dichiarare esplicitamente l oggetto su cui operano: è chiaro che si lavora con gli attributi dell oggetto chiamante programmazione ad oggetti 21 programmazione ad oggetti 22 Definizione di member function Uso di member function void Stash::initialize(int sz) { size = sz; quantity = 0; storage = 0; next = 0; :: operatore di risoluzione dell'ambito (scope resolution operator) associa il tipo struct alla function void initialize(cstash* s, int sz) { s->size = sz; s->quantity = 0; s->storage = 0; s->next = 0; Analogia sintattica con l'uso dei dati contenuti in una struct intstash.initialize(sizeof(int)); for(int i = 0; i < 100; i++) intstash.add(&i) ; una struct con member function è (quasi) un oggetto lo spazio occupato è lo stesso di una struct con solo dati programmazione ad oggetti 23 programmazione ad oggetti 24

Uso di member function Gestione di header file bisogna passare al metodo interno gli argomenti di tipo corretto i.e. compatibili con la definizione data oggi; data il_mio_compleanno; void f() { il_mio_compleanno.set(24,10,1979); oggi.set(24,10,2001); il_mio_compleanno.print(); oggi.next(); un header file viene incluso nel punto in cui il compilatore incontra la direttiva include come evitare inclusioni multiple (header incluso in header incluso in codice)? GenericHeader.h #ifndef FLAG_NAME #define FLAG_NAME... definizioni... #endif // FLAG_NAME programmazione ad oggetti 25 programmazione ad oggetti 26 Struct in Struct Se una struct contiene un sottoinsieme di dati con una struttura comune... struct Esterna { int a; struct Interna { int b; dato; ; Sovrapposizione di nomi L'operatore di risoluzione dell'ambito può essere usato per indicare ambito globale int f(); struct S { int f(); ; int S::f() { ::f(); ; programmazione ad oggetti 27 programmazione ad oggetti 28