Corso di Linguaggi di Programmazione

Documenti analoghi
Corso di Linguaggi di Programmazione

Corso di Linguaggi di Programmazione

Programmazione a Oggetti Lezione 7. Il linguaggio Java: aspetti generali

Dichiarazione di una classe. Dichiarazione ereditarietà

Astrazione sui dati. Tipi di dati astratti. Univ. di Udine. Tipi di dati astratti (Univ. di Udine) Astrazione sui dati 1 / 1

Astrazione Dati. Nicola Fanizzi. Linguaggi di Programmazione [010194] 10 mag, Dipartimento di Informatica Università degli Studi di Bari

OOP in C++ ha membro (dati membro) e funzioni membro In Java i dati membro sono chiamati attributi e le funzioni membro metodi

Tipi di Dati Astratti

Client - Interfaccia - Implementazione

Il paradigma OO e le Classi

Allocazione Dinamica della Memoria

I numeri razionali. Specifica: la sintassi. Specifica: la semantica

Gestione dinamica della memoria

Linguaggi di programmazione e astrazione

Programmazione ad oggetti

Linguaggi di Programmazione

Oggetti. La programmazione orientata agli oggetti, OOP (Object-Oriented Programming), prende il nome dall elemento su cui si basa, l oggetto.

Un tipo di dato astratto (ADT) definisce una categoria concettuale con le sue proprietà: una definizione di tipo

Informatica (A-K) 12. Linguaggio C -3

Gli oggetti. Ogni oggetto ha un interfaccia e ogni oggetto ha un tipo. Incapsulamento. Oggetti. Contatore. Invio di Messaggi

Linguaggi di Programmazione

Progettazione Object-Oriented

Corso di Informatica

Programmazione II. Lezione 7. Daniele Sgandurra 9/11/2010.

Sommario. I Uso degli oggetti 39

Corso di Linguaggi di Programmazione

La programmazione ad oggetti (OOP)

Corso di Linguaggi di Programmazione. Organizzazione di un processo in memoria (1)

Java: Definire Classi e Creare Oggetti

Fondamenti di Informatica II 3. Funzioni in C++ (parte 1)

Programmazione con Java

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - Programma

Lab metodi programmazione. Testi. Caratteristiche di Java. Paradigmi di programmazione. Linguaggio Java Progetto

Ingegneria del Software T. Garbage Collector

ISTITUTO STATALE D ISTRUZIONE SUPERIORE FERRARIS - BRUNELLESCHI EMPOLI Anno scolastico 2015/2016

Variabili dinamiche. Obiettivi: Presentare le variabili dinamiche, allocate e deallocate nell area HEAP, e le funzioni malloc e free

Componenti software. Obiettivi

IL COMPONENTE STACK (pila)

OCA JAVA 7 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO

Richiami su oggetti e OOP

PROGRAMMAZIONE Nomi, binding, regole di visibilità (scope)

Definizione di classi

Informatica e Tecnologie per la Produzione del Software Crediti formativi 7+2

PROGRAMMARE IN JAVA Volume I

Fondamenti di Informatica

Corso di Linguaggi di Programmazione

Strutture dati. Il che cosa e il come. F. Damiani - Alg. & Lab. 04/05

Paradigma a oggetti. Programmazione orientata agli oggetti. Programmazione orientata agli oggetti Paradigma a oggetti 1 / 30

Programmazione ad oggetti. Paradigma a oggetti. Esempio. Esempio L estensione del tipo di dato comporta la ridefinizione del codice

Programmazione orientata agli oggetti. Ivan Lanese

Oggetti Lezione 3. aspetti generali e definizione di classi I

Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1

Funzioni, Stack e Visibilità delle Variabili in C

Funzioni, Stack e Visibilità delle Variabili in C

Elementi di programmazione

Strutture dati nel supporto a run time

Corso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I)

Utilizza i tipi di dati comuni a tutto il framework.net Accesso nativo ai tipi.net (C# è nato con.net) Concetti fondamentali:

La programmazione nel linguaggio C. Liste

PIANO DI STUDIO DELLA DISCIPLINA DISCIPLINA: Informatica

I.I.S. Federico II di Svevia - Melfi

Il C nel C++: Funzioni

Funzioni (1) Il C nel C++: Funzioni. Funzione (2) Vantaggi delle Funzioni. Localizzazione della funzionalità correggibilità manutenibilità

A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas

Laboratorio di programmazione

Il linguaggio C. Notate che...

Gestione della memoria in Java. Emilio Di Giacomo e Walter Didimo

Appunti sulla lezione 3

Programmazione Orientata agli Oggetti in Linguaggio Java

Corso di Fondamenti di Informatica e Laboratorio

Reti di Connessione e Instradamento AA

Fondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati

Programmazione ad Oggetti C++

Marco Faella Introduzione al corso

Programmazione Java Avanzata Programmazione Object- Oriented in Java

Fondamenti di Programmazione

Linked Lists. Liste linkate (1) liste linkate ( stack, queues ), trees. Liste linkate come strutture

Abstact Data Type. Abstact Data Type. Pubblico e privato. Struttura di un ADT

Programmazione I - corso B a.a prof. Viviana Bono

Sommario. Introduzione... xv. Giorno 1 Elementi base del linguaggio C

Informatica 3. LEZIONE 1: Introduzione. Modulo 1: Introduzione al corso Modulo 2: Introduzione ai linguaggi di programmazione

Elementi di programmazione

Introduzione. "Introduction to Scientific and Technical Computing in C"

Linked Lists. Liste linkate (1) Progettazione: struct. Liste linkate (2)

Laboratorio di Algoritmi e Strutture Dati. Esercizi

La programmazione ad oggetti: chiamate di metodi. Overloading. This

Oggetti e dati primitivi 1

Corso di Informatica

Fondamenti di Informatica

Informatica 3. Informatica 3. Lezione 1- Modulo 1. LEZIONE 1: Introduzione. Concetti di linguaggi di programmazione. Introduzione

Sviluppo di Software Sicuro -S 3 SPARK - Introduzione. Sommario. SPARK - Elementi lessicali 24/02/2010 SCOPO DEL LINGUAGGIO S

Appunti sull'implementazione in C di tipi di dato

Linguaggi ad oggetti. Linguaggi di Programmazione: Paradigmi di Programmazione. I principali linguaggi ad oggetti. Programmazione ad oggetti.

Linguaggi ad oggetti (object oriented) LINGUAGGI DI PROGRAMMAZIONE: PARADIGMI DI PROGRAMMAZIONE. Programmazione ad oggetti

Transcript:

Corso di Linguaggi di Programmazione Lezione 16 Alberto Ceselli alberto.ceselli@unimi.it Dipartimento di Informatica Università degli Studi di Milano 30 Aprile 2013

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à

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.

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)

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

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?...

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 ).

++ sharp Alcuni esempi su linguaggi imperativi (CODICE).

++ sharp 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...

++ sharp 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...

Vantaggi e svantaggi ++ sharp Articolato, poco naturale e per niente sicuro: praticamente, non un ADT.

Encapsulation ++ sharp 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

Information Hiding ++ sharp 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 ++ sharp flessibile, potente e completo codice prolisso molte clausole diverse, difficile da padroneggiare

Encapsulation ++ sharp 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 ++ sharp 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

Vantaggi e svantaggi ++ sharp 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 ++ sharp 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

Information Hiding ++ sharp 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 ++ sharp 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...)

++ sharp 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...

++ sharp public class Weather public int DegreeDays { get { return degreedays; } set { degreedays = value; } } private int degreedays;...... w.degreedays = 10; i = w.degreedays...

++ sharp 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: ++ sharp 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