Corso di Linguaggi di Programmazione
|
|
|
- Bernadetta Valentino
- 6 anni fa
- Просмотров:
Транскрипт
1 Corso di Linguaggi di Programmazione Lezione 15 Alberto Ceselli Dipartimento di Tecnologie dell Informazione Università degli Studi di Milano 05 Maggio 2009 Programming in the large Progetto ed analisi di algoritmi: problemi piccoli, ma complessi, da risolvere con programmi compatti Situazioni reali: problemi grandi, composti da molti sottoproblemi, molti programmatori coinvolti, ecc. ingegneria del software per risolvere i problemi (natura tecnica e manageriale) i linguaggi di programmazione devono soddisfare certi requisiti per fornire un supporto all ingegneria del software. Obiettivi: manutenibilità, riuso, portabilità... Principali caratteristiche coinvolte: factoring, locality Principi fondamentali: astrazione e modularità
2 Process abstraction L esempio più semplice di astrazione è il sottoprogramma: sortint(list, listlen) è un astrazione del processo di ordinamento. Data abstraction L esempio più semplice di data abstraction sono i tipi built-in (es. floating point): il programmatore può operare su floating point tramite i costrutti del linguaggio (+, /...) e dimenticarsi cosa succede a livello di bit. questo tra l altro assicura la portabilità del codice.
3 User defined ADT Definition (User defined Abstract Data Types) L ADT è un tipo di dati che soddisfa i seguenti requisiti: La dichiarazione del tipo e delle operazioni sugli elementi del tipo sono contenute in una singola unità sintattica. La rappresentazione di elementi del tipo è nascosta dalle unità che usano il tipo, quindi le uniche operazioni possibili sugli elementi del tipo sono quelle fornite nella dichiarazione. digressione: unità sintattiche Domanda: in che senso unità sintattica? Esempio: package ADA Esempio (non del tutto preciso): Classi Java, C++ o C# Il problema delle unità di compilazione verrà affrontato più avanti nel corso per ora ci concentriamo sul concetto di astrazione di dati (tipi) e processo (operazioni)
4 Caratteristiche degli ADT l ADT è descritto da un interfaccia L implementazione (definizione) può essere nella stessa unità di compilazione (file) o in unità diverse. Anche altre unità devono poter creare variabili di quel tipo. Information hiding: la rappresentazione interna (implementazione) deve essere ininfluente per il resto del programma. Encapsulation: le uniche operazioni accessibili da codice esterno all unità di definizione sono quelle dichiarate nell interfaccia. Esempio di dichiarazione (interfaccia) di un ADT Tipo: stack Operazioni: create() stack destroy(stack) empty(stack) bool push(stack, element) stack pop(stack) stack top(stack) element
5 Esempio di utilizzo di un ADT... s = create(); s = push(s, 21); s = push(s, 3); if (! empty(s) ) write top(s);... Esempio di implementazione di un ADT stack array ed un intero puntatore alla prima componente libera create(): alloca l array e ne restituisce il puntatore alla prima componente destroy(stack): rilascia la memoria riservata per l array empty(stack): il puntatore è 0?...
6 Esempio di implementazione alternativa di un ADT stack lista a puntatori create(): restituisce un puntatore NULL destroy(stack): dealloca tutti gli elementi della lista empty(stack): il puntatore è NULL? push: crea nuovo elemento della lista N.B. Il codice client non cambia! N.B. Ogni sottoprogramma potrebbe essere implementato secondo paradigmi diversi ( fundamental problems ). Alcuni esempi su linguaggi imperativi (CODICE).
7 Encapsulation ed Information Hiding solo attraverso utilizzo di file separati minima (dato che sempre possibile modificare all esterno i campi del record!) nessun modificatore di scope l implementazione è solo parzialmente nascosta... Encapsulation ed Information Hiding, es.2 solo attraverso utilizzo di file separati modificatore di scope static al prezzo di avere una sola istanza dello stack non c è name encapsulation implementazione nascosta...
8 Vantaggi e svantaggi Articolato, poco naturale e per niente sicuro: praticamente, non un ADT. Encapsulation package in due parti (specification e body) tre modificatori di scope: public, private (continua ad avere assegnamento e confronti) e limited private (anche assegnamento e confronti devono essere ridefiniti ) with e use: naming encapsulation si utilizza anche la notazione Package.metodo esistono anche packages senza body (solo tipi e costanti) un programma che ha accesso al package ha accesso a tutte le sue entità public
9 Information Hiding specification e body condividono lo stesso nome, ma possono essere in files separati body discrimina tra body e specification posso compilare separatamente, ma specification prima Vantaggi e svantaggi flessibile, potente e completo codice prolisso molte clausole diverse, difficile da padroneggiare
10 Encapsulation sia variabili che funzioni (data members e member functions, o properties e methods o... ) stack o heap dynamic, anche con heap-dynamic data members tre modificatori di scope: public, private (e protected) gestione tramite puntatori, allocazione / deallocazione esplicita utilizza :: per (parziale) naming encapsulation struct / class è un tipo: un programma che ha accesso alla unit può accedere alle sue entità pubbliche solo dopo aver istanziato. utilizza namespace e using. Information Hiding il corpo di ogni metodo può apparire con il prototipo, nel qual caso diviene inline oppure separatamente (nello stesso o in un altro file). ha costruttori e distruttori
11 Vantaggi e svantaggi supporto completo per l astrazione codice compatto, leggibile ed efficiente le struct sono sempre tipi di dati, mentre i package Ada sono entità più generiche poco ortogonale rispetto ad altri aspetti del linguaggio... Encapsulation Molto simile a C++ tre modificatori di scope: public, private (e protected) differenza di design : non ci sono sezioni public e private, ma ogni proprietà e metodo ha la sua clausola naming encapsulation tramite import e sistema gerarchico dei packages
12 Information Hiding Java ha solo classi (nessun sottoprogramma al di fuori dei metodi della classe) a meno di ricorrere a interface, ogni metodo deve essere definito al momento della dichiarazione (non è possibile definire il corpo altrove) niente distruttori (garbage collection) Vantaggi e svantaggi Più ortogonale ed essenziale del C++ codice più compatto (garbage collection) (vant o svant?) gestione naming più articolata meno potente (niente inline, definizioni e compilazioni separate...)
13 Encapsulation ed Information Hiding cinque modificatori di scope: private, public, protected, internal, protected internal come Java, ogni classe è heap dynamic (ma ogni struct stack dynamic) codice compatto come in Java (still garbage collection) ha distruttori (usati raramente) accessors e mutators get() e set() per gestire le proprietà nell assegnamento (l-value e r-value) per il resto analogo a Java... public class Weather public int DegreeDays { get { return degreedays; } set { degreedays = value; } } private int degreedays; w.degreedays = 10; i = w.degreedays...
14 Encapsulation ed Information Hiding modificatori di scope impliciti nei nomi degli identificatori supporto completo per encapsulation naming encapsulation tramite utilizzo di moduli separati e parole chiave from e import codice molto compatto (scripting) information hiding parziale (non ho strumenti per definire interfacce) Riassumendo: Encapsulation: catturare più errori in fase di compilazione analisi semantica (anche compilazioni separate!) aumentare la facilità di manutenzione del software (locality) fornire strumenti per condividere packages e librerie in modo sicuro (protetto da accessi esterni, soprattutto accidentali) Modularità: Avere ADT in files diversi consente unità di compilazione separate Avere interfaccia ed implementazione in files diversi consente di avere le specifiche descritte a parte
15 Esercizio: Realizzare un ADT Buffer FIFO (interfaccia, implementazione e codice client) in C ed in un altro linguaggio di programmazione Realizzare un implementazione alternativa nel secondo linguaggio: come cambiano interfaccia e codice client?
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
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
Linguaggi di programmazione e astrazione
Linguaggi di programmazione e astrazione i linguaggi di programmazione ad alto livello moderni sono il più potente strumento di astrazione messo a disposizione dei programmatori che possono, con un solo
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
Linguaggi di Programmazione
Linguaggi di Programmazione Corso di Laurea in Informatica Astrarre sui dati Valeria Carofiglio (Questo materiale è una rivisitazione del materiale prodotto da Nicola Fanizzi) Obiettivi tipi di dato astratti
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
Gestione dinamica della memoria
Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2016-2017 Gestione dinamica della memoria Pietro Di Lena - [email protected] A pessimistic programmer sees the array as half empty.
Allocazione Dinamica della Memoria
Allocazione Dinamica della Memoria Elisa Marengo Università degli Studi di Torino Dipartimento di Informatica Elisa Marengo (UNITO) Allocazione Dinamica della Memoria 1 / 10 Scelta delle variabili Quando
La programmazione ad oggetti (OOP)
Oggetti e Classi (CAP 10) Alberto Garfagnini, Marco Mazzocco Università degli studi di Padova 30 Novembre 2011 La programmazione ad oggetti (OOP) È un approccio concettuale alla programmazione (indipendente
Programmazione con Java
Programmazione con Java Classi e istanze in Java Definizione di classe in Java A meno che non si usino classi già scritte da altri, prima di poter creare un qualsiasi oggetto devo creare la sua rappresentazione:
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
INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica
Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica - Programma Un programma è una formulazione
INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - Programma
Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica - Programma Un programma è una formulazione
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
Oggetti Lezione 3. aspetti generali e definizione di classi I
Programmazione a Oggetti Lezione 3 Il linguaggio Java: aspetti generali e definizione di classi I Sommario Storia e Motivazioni Definizione di Classi Campi e Metodi Istanziazione di oggetti Introduzione
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)
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
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),
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
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
Fondamenti di Programmazione
Fondamenti di Programmazione (con linguaggio di riferimento C++) Gianfranco Rossi Università di Parma Dip. di Matematica e Informatica 43100 Parma (Italy) [email protected] Indice 1 Introduzione
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)
Marco Faella Introduzione al corso
Marco Faella Introduzione al corso 1 Lezione n. Parole chiave: Java Corso di Laurea: Informatica Insegnamento: Linguaggi di Programmazione II Email Docente: [email protected] A.A. 2009-2010 Linguaggi
Sommario. Introduzione... xv. Giorno 1 Elementi base del linguaggio C
Sommario Introduzione... xv Organizzazione del volume... xv Argomenti...xvi Domande...xvi Verifiche...xvi Domande e risposte...xvi Esercizi...xvi Non è richiesta alcuna precedente esperienza di programmazione...
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.
Corso di Fondamenti di Informatica e Laboratorio
Corso di Fondamenti di Informatica e Laboratorio Corsi di Laurea Ingegneria Informatica (O-Z) Corsi di Laurea Ingegneria delle Telecomunicazioni - (A-Z) (ordinamento 03) A.A. 2009-2010 Prof. Giuseppe Mangioni
Interfacce. Esempio: interfaccia I con una sola funzione g() public interface I {
Interfacce Una interfaccia è un astrazione per un insieme di funzioni pubbliche delle quali si definisce solo la segnatura, e non le istruzioni. Un interfaccia viene poi implementata da una o più classi
