Linguaggi di Programmazione
|
|
|
- Donata Battaglia
- 8 anni fa
- Просмотров:
Транскрипт
1 Linguaggi di Programmazione Corso di Laurea in Informatica Astrarre sui dati Valeria Carofiglio (Questo materiale è una rivisitazione del materiale prodotto da Nicola Fanizzi)
2 Obiettivi tipi di dato astratti information hiding modularizzazione N. Fanizzi Linguaggi di Programmazione (cc)
3 Incapsulamento e tipi macchina fisica: stringa di bit (unico tipo di dato) macchina astratta (LdP ad alto livello): Organizzazione delle stringhe di bit Ogni stringa di bit (valore) ha una capsula (il suo tipo) che la riveste (operazioni associate) LINGUAGGI SICURI RISPETTO AI TIPI: Capsula Opaca (accesso alla rappresentazione, consentito solo per mezzo della capsula) N. Fanizzi Linguaggi di Programmazione (cc)
4 Costruttori di tipo I comuni meccanismi di costruzione di tipo (es. array, struct) consentono la definizione di operazioni sui valori che si rappresentano ma non garantiscono che siano le sole modalità di manipolazione es pila di interi realizzata con un array (Pascal, C,...) operazioni push, pop, empty, top nulla vieta la manipolazione diretta dell'array N. Fanizzi Linguaggi di Programmazione (cc)
5 Costruttori di tipo I comuni meccanismi di costruzione di tipo (es. array, struct) consentono la definizione di operazioni sui valori che si rappresentano ma Il linguaggio fornisce tipi predefiniti che nascondono l'implementazione (astrazione sui dati) non garantiscono che siano le sole modalità di manipolazione es pila di interi realizzata con un array (Pascal, C,...) No per il programmatore operazioni push, pop, empty, top nulla vieta la manipolazione diretta dell'array N. Fanizzi Linguaggi di Programmazione (cc)
6 Astrazione sui dati Per rendere inaccessibile la rappresentazione: meccanismo ADT tipo di dato astratto (ADT- aspetti principali): nome tipo implementazione (rappresentazione) valori insieme di nomi di operazioni per ogni operazione implementazione dell'operazione che usi la rappresentazione fornita capsula che separi nomi dei tipi ed operazioni dalla loro implementazione la capsula (opaca) separa interfaccia (segnatura) dalla implementazione (realizzazione) N. Fanizzi Linguaggi di Programmazione (cc) nei linguaggi più evoluti ADT come tipi predefiniti (ML, CLU,...)
7 Rappresentazionenome nome ADT pila di interi (capsula opaca) abstype Int_Stack; type Int_Stack = struct { int P[100]; int n; int top; Int_Stack crea_pila() { Int_Stack s = new Int_Stack(); s.top = 0; return s; Nomi e tipi di operazioni signature Int_Stack crea_pila(); Int_Stack top(int_stack s); bool empty(int_stack s); Int_Stack push(int_stack s, int k); Int_Stack pop(int_stack s); Implementazione delle op. operations Int_Stack top(int_stack s) { return s.p[s.top]; bool empty(int_stack s) { return (s.top == 0); Int_Stack push(int_stack s, int k) { if (s.top == 100) errore(); s.p[s.top] = k; s.top = s.top + 1; return s; Int_Stack pop(int_stack s) { if (s.top == 0) errore(); s.p[s.top] = k; s.top = s.top - 1; return s; Fuori dalla rappresentazione del tipo non c'e alcuna relazione tra tipo astratto e tipo concreto N. Fanizzi Linguaggi di Programmazione (cc)
8 information hiding separare interfaccia da implementazione astrazione sul controllo: nasconde codice del corpo mostra la sua interfaccia (es. funzioni) astrazione dati: nasconde codice ma anche rappresentazione del dato Il sistema dei tipi garantisce la non violazione dell'astrazione vantaggi: possibile sostituire un'implementazione a parità d'interfaccia es. pila realizzata con lista concatenata anziché con vettore N. Fanizzi Linguaggi di Programmazione (cc)
9 ADT: specifica descrizione della semantica delle operazioni di un ADT espresse come relazioni generali astratte (no tipo concreto) in linguaggio naturale, schemi semi-formali, linguaggi formalizzati manipolabili da theorem-prover,... es. ADT pila di interi crea_pila: crea una pila vuota push: inserisce un elemento sulla pila; top: restituisce l'elemento in cima alla pila (non vuota) senza modificare la stessa pop: elimina l'elemento in cima alla pila (non vuota) empty: vero sse pila vuota specifica = contratto cliente con ADT implementazione corretta deve corrispondere alla specifica (assicurata dalla specifica) N. Fanizzi Linguaggi di Programmazione (cc)
10 indipendenza dalla rappresentazione Due implementazioni corrette di una stessa specifica di un ADT risultano indistinguibili da parte dei clienti Un cliente dell'adt non deve accorgersi in caso di cambiamento dell'implementazione versione debole sostituzione (senza errori di tipo) a parità di segnatura dimostrata come un teorema per linguaggi type-safe come CLU, ML,... N. Fanizzi Linguaggi di Programmazione (cc)
11 moduli ADT programmazione in piccolo programmazione in grande modulo: astrazione di più strutture dati correlate: es. package Java; unit Pascal/Delphi partizionamento statico di un programma complesso in unità più semplici, dotate di dichiarazioni dati: tipi, variabili,... operazioni: funzioni,... regole di visibilità che realizzano: incapsulamento, N. Fanizzi Linguaggi di Programmazione (cc) occultamento dell'informazione (information hiding)
12 ADT vs. moduli in teoria: nessuna differenza ADT è un caso particolare di modulo in pratica: moduli più flessibili Grado di permeabilità della capsula Possibilità di selezione degli operatori visibili e del loro grado di visibilità moduli generici (polimorfi) risoluzione al momento dell'uso N. Fanizzi Linguaggi di Programmazione (cc) compilazione separata (unità di compilazione)
13 Visibile Non Visibile esempio N. Fanizzi Linguaggi di Programmazione (cc)
14 esempio modulo Counter module Buffer imports Counter; public type Count; void init_counter( int get(count c); void inc(reference Count c); private imports Queue; init_counter(reference reference Count c); type Count = int; void init_counter( int init_counter(reference reference Count c) { c = 0; int get(count c) { return c; void inc(reference Count c); { c = c+1; N. Fanizzi Linguaggi di Programmazione (cc)
15 esempio modulo Queue module Queue; public type Queue; void inqueue( int... private... void inqueue(reference Queue q, int n); int dequeue(queue q); dequeue(queue q); void bookkeep(reference Queue q) { N. Fanizzi Linguaggi di Programmazione (cc)
16 modulo composizione parte pubblica: visibile all'esterno parte privata: invisibile uso di un modulo: importazione spesso congiunto con il polimorfismo parametrico risolto a linking-time collegamento a funzioni precompilate di libreria N. Fanizzi Linguaggi di Programmazione (cc)
17 esempio modulo Buffer<T> module Buffer<T> imports Counter; public type Buf; void insert( <T> get(buf b); Count c; insert(reference reference Buf b, <T> n); Count c; // quante volte si è usato il buffer // quante volte si è usato il buffer private imports Queue; type Buf = Queue; void insert(reference Buf b, <T> n) { insert(reference Buf b, <T> n) { inqueue(b,n); inc(c); <T> get(buf b) { inc(c); return dequeue(b); init_counter(c); // inizializzazione del modulo N. Fanizzi Linguaggi di Programmazione (cc)
18 esempio modulo Queue<S> module Queue<S> <S>; public type Queue; void inqueue( <T>... private... void inqueue(reference Queue q, <S> n); <T> dequeue(queue q); dequeue(queue q); void bookkeep(reference Queue q) { N. Fanizzi Linguaggi di Programmazione (cc)
19 pila di interi in pseudo C++ type Int_Stack = struct { int P[100]; int top; Int_Stack crea_pila() { Int_Stack s = new Int_Stack(); s.top = 0; return s; Int_Stack top(int_stack s) { return s.p[s.top]; bool empty(int_stack s) { return (s.top == 0); Int_Stack push(int_stack s, int k) { if (s.top == 100) errore(); s.p[s.top] = k; s.top = s.top + 1; return s; Int_Stack pop(int_stack s) { if (s.top == 0) errore(); s.p[s.top] = k; s.top = s.top - 1; return s; N. Fanizzi Linguaggi di Programmazione (cc)
Astrazione Dati. Nicola Fanizzi. Linguaggi di Programmazione [010194] 10 mag, Dipartimento di Informatica Università degli Studi di Bari
Astrazione Dati Nicola Fanizzi Dipartimento di Informatica Università degli Studi di Bari Linguaggi di Programmazione [010194] 10 mag, 2016 Sommario 1 Astrazione dati Incapsulamento Esempio / ADT pila
A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas
Classi e oggetti A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas Oggetti La programmazione orientata agli oggetti, OOP (Object-Oriented Programming),
Esercitazione: Implementazione in linguaggio C dell ADT. Stack con l utilizzo. di linked list
Esercitazione: Implementazione in linguaggio C dell ADT Stack con l utilizzo di linked list Laboratorio di Programmazione Introduzione un ADT (Abstract Data Type) è un modello (formale) che generalizza
Implementazione Java di un ADT
Implementazione Java di un ADT Primo passo definire l'interfaccia (API) dell' ADT (l'api descrive i nomi dei metodi che l'adt supporta e come essi sono dichiarati e usati) Secondo passo scrivere il codice
Specifica: la sintassi. Specifica: la semantica. Specifica: la semantica
Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi Che cos è un tipo di dato? Tutti i linguaggi di programmazione tipati forniscono tipi ed operatori predefiniti
Funzioni, Stack e Visibilità delle Variabili in C
Funzioni, Stack e Visibilità delle Variabili in C Programmazione I e Laboratorio Corso di Laurea in Informatica A.A. 2016/2017 Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7
Programmazione orientata agli oggetti. Ivan Lanese
Programmazione orientata agli oggetti Ivan Lanese Argomenti Programmazione orientata agli oggetti Classi Oggetti Costruttori Scrivere grosse applicazioni La gran parte delle applicazioni sono GROSSE Windows
Introduzione all OOP!
Introduzione all OOP! Introdurre l evoluzione dei linguaggi di programmazione e la loro classificazione Introdurre l OOP (astrazione, incapsulamento, ereditarietà) Dal C a Java un primo esempio 1 LINGUAGGI
ADT: Abstract Data Type. Quasi ADT. ADT per collezioni di dati (code generalizzate) 04 I tipi di dati astratti (I parte)
ADT: Abstract Data Type I tipi di dati astratti (I parte) Gianpiero Cabodi e Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino Scopo Livello di astrazione sui dati tale da mascherare completamente
Liste con sentinella. intlist *createlist(void){ intlist *q = malloc(sizeof(intlist)); if(!q) { exit(-1); } q->next = q->prev = q; return q; }
Liste con sentinella Un ulteriore semplificazione delle operazioni sulle liste si ottiene utilizzando un elemento sentinella (dummy) che non contiene informazione, ma serve a segnalare la fine e l inizio
Esempio su strutture dati dinamiche: ArrayList
Esempio su strutture dati dinamiche: ArrayList 1 ArrayList Abbiamo detto che gli array non possono cambiare la propria dimensione: il numero di elementi contenuti viene stabilito al momento della creazione
Le basi del linguaggio Java
Le basi del linguaggio Java Compilazione e interpretazione Quando si compila il codice sorgente scritto in Java, il compilatore genera il codice compilato, chiamato bytecode. È un codice generato per una
Questa soluzione va contemplata quando le lunghezze stimate dalle liste usate sono significativamente maggiori delle dimensioni di un elemento.
Un ulteriore semplificazione si ottiene utilizzando un elemento sentinella (dummy) che non contiene informazione, ma serve a segnalare la fine (e l inizio) di una lista. Questa soluzione va contemplata
La programmazione ad oggetti: chiamate di metodi. Overloading. This
ISTITUTO D ISTRUZIONE SUPERIORE FERRARIS BRUNELLESCHI - EMPOLI Materia: INFORMATICA PROGRAMMA SVOLTO A.S. 2015/2016 Classe IV C Informatica Proff. Fabio Ciao / Simone Calugi Libro di testo: Cloud B P.
Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014
Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 11 luglio 2014 TEMPO DISPONIBILE: 2 ore Negli esercizi
14 - Metodi e Costruttori
14 - Metodi e Costruttori Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it
Indice PARTE A. Prefazione Gli Autori Ringraziamenti dell Editore La storia del C. Capitolo 1 Computer 1. Capitolo 2 Sistemi operativi 21 XVII XXIX
Indice Prefazione Gli Autori Ringraziamenti dell Editore La storia del C XVII XXIX XXXI XXXIII PARTE A Capitolo 1 Computer 1 1.1 Hardware e software 2 1.2 Processore 3 1.3 Memorie 5 1.4 Periferiche di
Corso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I)
Corso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I) Ing. Gianluca Caminiti Sommario ( OOP ) Programmazione Object-Oriented Incapsulamento, Ereditarietà, Polimorfismo Richiami
Informatica 3. LEZIONE 5: Tipi di dati
Informatica 3 LEZIONE 5: Tipi di dati Modulo 1: Tipi e costruttori di tipo Modulo 2: Tipi definiti dall utente e tipi di dati astratti Modulo 3: Sistemi di tipi Informatica 3 Lezione 5 - Modulo 1 Tipi
Esercizi Strutture dati di tipo astratto
Salvatore Cuomo Esercizi Strutture dati di tipo astratto Lezione n. 20 Parole chiave: Strutture dati, pile code, liste Corso di Laurea: Informatica Insegnamento: Programmazione II, modulo di Laboratorio
Classi. Oggetti e classi. Creazione e inizializzazione di oggetti in C++ Distruzione di oggetti in C++
Informatica 3 Informatica 3 LEZIONE 7: Fondamenti di programmazione orientata agli oggetti (1) Modulo 1: Introduzione: oggetti e classi Modulo 2: Link e associazioni Modulo 3: Aggregazione Lezione 7 -
Polimorfismo parametrico vs polimorfismo per inclusione
Polimorfismo parametrico vs polimorfismo per inclusione Esercizio Definire il tipo di dato Stack con operazioni Push( element ) Pop() Non forzare una specifica implementazione Non forzare un tipo specifico
CORSO DI PROGRAMMAZIONE
ISTITUTO TECNICO INDUSTRIALE G. M. ANGIOY SASSARI CORSO DI PROGRAMMAZIONE PILE E CODE DI DATI DISPENSA 11.02 11-02_Pile_Code_[ver_15] Questa dispensa è rilasciata sotto la licenza Creative Common CC BY-NC-SA.
Client - Interfaccia - Implementazione
Client - Interfaccia - Implementazione Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Violetta Lonati
Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre 2014. Negli esercizi proposti si utilizzano le seguenti classi:
Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 22 settembre 2014 TEMPO DISPONIBILE: 2 ore Negli
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati A.A. 15/16 Informatica Università degli Studi di Bari Aldo Moro Nicola Di Mauro Contatti Studio: stanza 513, V piano DIB Telefono: 080 544 2297 email: [email protected]
Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1
Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1 Cosa è il C++ E un linguaggio di programmazione derivato dal C Può essere usato per modificare il SO Unix e i suoi derivati (Linux)
ISTITUTO STATALE D ISTRUZIONE SUPERIORE FERRARIS - BRUNELLESCHI EMPOLI Anno scolastico 2015/2016
ISTITUTO STATALE D ISTRUZIONE SUPERIORE FERRARIS - BRUNELLESCHI EMPOLI Anno scolastico 2015/2016 Classe: 4^A inf Prof.ssa Lami Carla Prof. Simone Calugi Programma di INFORMATICA GENERALE, APPLICAZIONI
PILE E CODE. Pile (stack):
PILE E CODE Sono tipi di dato che consentono di rappresentare sequenze di elementi in cui gli inserimenti e le cancellazioni sono eseguiti con particolari modalita` (politiche o discipline). Pile (stack):
Informatica 3. LEZIONE 1: Introduzione. Modulo 1: Introduzione al corso Modulo 2: Introduzione ai linguaggi di programmazione
Informatica 3 LEZIONE 1: Introduzione Modulo 1: Introduzione al corso Modulo 2: Introduzione ai linguaggi di Informatica 3 Lezione 1- Modulo 1 Introduzione al corso Introduzione Corso di Informatica 3
Implementazione ADT: Alberi
Implementazione ADT: Alberi Livelli di astrazione 2001/2002 1 Esercitazione 5 (E6): alberi (tree) albero struttura dati fondamentale, soprattutto per le operazioni di ricerca tipi di albero con radice
Esempio su strutture dati dinamiche: ArrayList
Esempio su strutture dati dinamiche: ArrayList 1 ArrayList! Abbiamo detto che gli array non possono cambiare la propria dimensione: il numero di elementi contenuti viene stabilito al momento della creazione
18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo
18 - Vettori Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://pages.di.unipi.it/milazzo milazzo di.unipi.it Corso di
Il paradigma OO e le Classi
Oggetti e Classi (CAP 10) Alberto Garfagnini Università degli studi di Padova 1 Dicembre 2009 Il paradigma OO e le Classi La programmazione ad Oggetti () è una filosofia di programmazione che si basa sui
Esempio su strutture dati dinamiche: ArrayList
Esempio su strutture dati dinamiche: ArrayList Fondamenti di Informatica L-B 1 ArrayList Abbiamo detto che gli array non possono cambiare la propria dimensione: il numero di elementi contenuti viene stabilito
7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari
7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa
Indice generale Introduzione...vii Parte I Concetti e costrutti fondamentali... 1 Capitolo 1 Introduzione al linguaggio... 3
Introduzione...vii Organizzazione del libro... viii Struttura del libro e convenzioni... ix Codice sorgente e progetti... x Compilare ed eseguire direttamente i listati e gli snippet di codice... x Compilare
Laboratorio di programmazione
Laboratorio di programmazione Lezione VIII Tatiana Zolo [email protected] 1 PROGRAMMAZIONE A OGGETTI Quando si programma a oggetti si scompone il problema in sottogruppi di parti collegate che tengono
Strutture dati e loro organizzazione. Gabriella Trucco
Strutture dati e loro organizzazione Gabriella Trucco Introduzione I linguaggi di programmazione di alto livello consentono di far riferimento a posizioni nella memoria principale tramite nomi descrittivi
Perché il linguaggio C?
Il linguaggio C 7 Perché il linguaggio C? Larga diffusione nel software applicativo Standard di fatto per lo sviluppo di software di sistema Visione a basso livello della memoria Capacità di manipolare
Ereditarietà e Polimorfismo
Ereditarietà e Polimorfismo Riusare il software A volte si incontrano classi con funzionalità simili In quanto sottendono concetti semanticamente vicini È possibile creare classi disgiunte replicando le
strutturare dati e codice
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) ;
Programmazione Orientata agli Oggetti in Linguaggio Java
Programmazione Orientata agli Oggetti in Linguaggio Java Classi e Oggetti: Metafora Parte a versione 2.2 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina)
19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo
19 - Eccezioni Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso
Ingegneria del Software
Ingegneria del Software Analisi Object Oriented ed Elementi di Programmazione OO Origini Le metodologie ad oggi nascono negli anni 70 ma si affermano solo nelgi anni 80 grazie alla nascita dei linguaggi
OO puro. Primi concetti di Java. Tipi primitivi. Ogni cosa è un oggetto. Java è object-oriented puro Non come il C+ + (OO ibrido) Lorenzo Bettini
Primi concetti di Java Lorenzo Bettini OO puro Java è object-oriented puro Non come il C+ + (OO ibrido) Per compatibilità col C Ogni cosa è un oggetto Gli oggetti si manipolano tramite riferimenti String
Programmazione a Oggetti Lezione 7. Il linguaggio Java: aspetti generali
Programmazione a Oggetti Lezione 7 Il linguaggio Java: aspetti generali Sommario Obiettivi di JAVA Portabilità: produrre codice eseguibile su più piattaforme (JVM) Affidabilità: Evitare il più possibile
Struttura dati astratta Coda
CODE Struttura dati astratta Coda La coda o queue è una struttura dati astratta in cui l'inserimento e l estrazione sono consentite solo in specifiche posizioni; in particolare, l'inserimento è consentito
Il linguaggio C. Puntatori e dintorni
Il linguaggio C Puntatori e dintorni 1 Puntatori : idea di base In C è possibile conoscere e denotare l indirizzo della cella di memoria in cui è memorizzata una variabile (il puntatore) es : int a = 50;
9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo
9 - Array Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso di Laurea
Le funzioni in JavaScript. Modularizzazione
Modularizzazione Quando abbiamo a che fare con un problema complesso spesso lo suddividiamo in problemi più semplici che risolviamo separatamente, per poi combinare insieme le soluzioni dei sottoproblemi
