PROGETTO DI SISTEMI Progettare un sistema software è cosa ben diversa dal progettare un algoritmo CRISI DEL SOFTWARE: i costi di gestione diventano preponderanti.

Slides:



Advertisements
Presentazioni simili
Il paradigma Object Oriented
Advertisements

Programmazione ad oggetti
Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 2 1 Progettazione e Sviluppo di Software ad Oggetti 4 OBJECT-ORIENTED ANALYSIS Processo.
Analisi e progettazione
Procedure e funzioni A. Ferrari.
Linguaggi di programmazione
Liste di Interi Esercitazione. Liste Concatenate Tipo di dato utile per memorizzare sequenze di elementi di dimensioni variabile Definizione tipicamente.
Metodologie di Programmazione = decomposizione basata su astrazioni
Generalità Linguaggio e Macchina Astratta
1 9: Progettazione Architetturale Obiettivo: stabilire la struttura globale di un sistema software Descriveremo diversi tipi di modello di architettura,
1 14. Verifica e Validazione Come assicurarsi che il software corrisponda alle necessità dellutente? Introdurremo i concetti di verifica e validazione.
Gestione dei dati e della conoscenza (agenti intelligenti) M.T. PAZIENZA a.a
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
Introduzione al linguaggio C++ 5 lezioni
Corso di Laurea in Biotecnologie Informatica (Programmazione)
Corso di Informatica (Programmazione)
Oggetti e dati primitivi Programmazione Corso di laurea in Informatica.
Unità Didattica 2 I Linguaggi di Programmazione
nome: sequenza di caratteri usata per denotare un oggetto
Type int_stack = struct { int top; int P[100]; } int_stack creapila() { int_stack s = new int_stack; s.top = 0; return s; } int_stack push(int_stack s,
Type int_stack = struct { int top; int P[100]; } int_stack creapila() { int_stack s = new int_stack; s.top = 0; return s; } int_stack push(int_stack s,
Le classi Definizione di classe Attributi e metodi di una classe Costruttori e distruttori Private e public Funzioni friend Il puntatore this.
Espressioni condizionali
Progettazione di una base di dati
Strategia bottom-up Nella strategia bottom-up le specifiche iniziali sono suddivise in componenti via via sempre più piccole, fino a descrivere frammenti.
Java concetti A.Natali Marzo Java Dai concetti ai costrutti.
A.Natali DL Maggio1999 Oggetti Concetti fondamentali.
A.Natali DL Maggio1999 La costruzione del software Meccanismi, principi, concetti e metodologie.
AN FI Un denominatoe comune Comandi u notazioni che esprimono azioni che, una volta eseguite, comportano una modifica permanente dello stato interno.
INSIEMI NUMERABILI L’analisi matematica introduce il concetto di insieme numerabile come insieme i cui elementi possono essere “contati” ossia che possiede.
LINGUAGGI DI PROGRAMMAZIONE
AN FI Un denominatoe comune Linguaggi di programmazione Un denominatore comune.
AN FI Un denominatoe comune Lo stile funzionale Concetti fondamentali.
OGGETTI COMPOSTI Una classe può contenere riferimenti a altre classi (o anche a se stessa): public class Orologio { Counter ore, minuti; } Loggetto Orologio.
IL TEMA DELLA RIUSABILITÀ Si vuole riusare tutto ciò che può essere riusato (componenti, codice, astrazioni) Non è utile né opportuno modificare codice.
FUNZIONI... Una funzione permette di dare un nome a una espressione rendendola parametrica float f(){ return * sin(0.75); } float f1(int x) { return.
Introduzione alla modellazione di sistemi interattivi
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
INTRODUZIONE l sistema operativo è il primo software che lutente utilizza quando accende il computer; 1)Viene caricato nella memoria RAM con loperazione.
1 Programmazione = decomposizione basata su astrazioni (con riferimento a Java)
Elementi di Informatica di base
L’ingegneria del software
Introduzione alla programmazione Object Oriented
1 Astrazioni sui dati : Ragionare sui Tipi di Dato Astratti dispense prof. G. Levi.
Sistemi e Tecnologie Informatiche Requisiti per la realizzazione di un buon programma.
Capitolo 4 (Deitel) Le strutture di controllo in C
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
Dati e DBMS DBMS relazionali SQL Progettazione di una base di dati Programma del Corso.
I nomi in Java F. Bombi 18 novembre novembre 2003.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Gli Algoritmi L’algoritmo è un insieme ordinato di operazioni non ambigue ed effettivamente computabili che, quando eseguito, produce un risultato e si.
Programmazione ad oggetti
Lezione 1 Panoramica sui paradigmi di programmazione
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi.
1 Tipi di Dato §descrittori, tipi, controllo e inferenza dei tipi §specifica (semantica) e implementazione di tipi di dato l implementazioni “sequenziali”
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
1 Interpretazione astratta: un approccio sistematico all’analisi statica.
Ripasso su Java. Introduzione Per risolvere problemi complessi, i linguaggi di programmazione forniscono costrutti per realizzare nuove funzioni che trasformino.
ALLOCAZIONE STATICA: LIMITI Per quanto sappiamo finora, in C le variabili sono sempre dichiarate staticamente –la loro esistenza deve essere prevista e.
Progettazione di una base di dati Ciclo di vita di un sistema informativo Studio di fattibilità definisce le varie alternative possibili, i relativi costi.
Sistemi basati su conoscenza (agenti intelligenti) Prof. M.T. PAZIENZA a.a
Strategie di progetto Si possono utilizzare le strategie tipiche dello sviluppo di un processo di ingegnerizzazione (es. ingegneria del software). Strategie.
1 Linguaggi: guardando la semantica §esistono un insieme di concetti semantici e di strutture di implementazione in termini dei quali si descrivono in.
1 Metodologie di Programmazione = decomposizione basata su astrazioni.
Progettazione di basi di dati: metodologie e modelli
LIP: 15 Marzo 2005 Vettori di interi. Esercizio proposto Definire una classe VectorInt i cui oggetti sono vettori omogenei di interi ordinati in modo.
Le basi di dati.
Introduzione alle Classi e agli Oggetti in Java 1.
Transcript della presentazione:

PROGETTO DI SISTEMI Progettare un sistema software è cosa ben diversa dal progettare un algoritmo CRISI DEL SOFTWARE: i costi di gestione diventano preponderanti su quelli di produzione Cosa occorre per ottenere un sistema che non solo funzioni, ma che sia ancheben fatto?

SOFTWARE BEN FATTO … ? Ben organizzato Modulare Protetto Riusabile Riconfigurabile Flessibile Documentato Incrementalmente estendibile A componenti

LA COSTRUZIONE DEL SOFTWARE Ingredienti computazionali –le mosse di un linguaggio Requisiti –non basta un sistema che funzioni Principi –regole per una buona organizzazione Modelli, Concetti, Paradigmi, Pattern –fonti di ispirazione

LO SVILUPPO STORICO : –cosa significa computare? –quali mosse primitive deve avere un linguaggio di programmazione? : –quali principi di organizzazione del software? –basta la programmazione strutturata?

: –perché il modello a oggetti è importante? –vi sono alternative alla classificazione? : –quali ripercussioni se la piattaforma computazionale diventa una rete? –come recuperare vecchie applicazioni sulle nuove piattaforme?... LO SVILUPPO STORICO

PROGETTO & LINGUAGGI I linguaggi di programmazione devono fornire non solo un modo per esprimere computazioni ma anche un modo per dare struttura alla descrizione e un supporto per organizzare il processo produttivo del software.

PROGETTO & STRUMENTI PROBLEMA: le strutture dati e le strutture di controllo (programmazione strutturata) le funzioni e le procedure file e moduli come contenitori di descrizioni non bastano per ottenere software modulare e sviluppabile in modo incrementale. Perché?

LA CRISI DIMENSIONALE Il cambio di dimensioni del problema cambia non solo le dimensioni fisiche ma anche le astrazioni, i modelli, gli strumenti più opportuni per progettare Lattenzione si sposta dal singolo algoritmo (e da una o più funzioni) alle entità del mondo reale da modellare e agli strumenti che consentono il lavoro di gruppo

LA CRISI DIMENSIONALE Programmi di piccole dimensioni enfasi sullalgoritmo programmazione strutturata Programmi di medie dimensioni funzioni e procedure come astrazioni di espressioni/istruzioni complesse decomposizione degli algoritmi in blocchi funzionali

LA CRISI DIMENSIONALE Programmi di grandi dimensioni devono trattare grandi moli di dati, ma la decomposizione funzionale è inadeguata dati e funzioni che elaborano tali dati sono scor- relati: nulla indica che le una agiscano sugli altri devono essere sviluppati da gruppi, ma la decomposizione funzionale e il disaccoppia- mento dati/funzioni non agevolano la decompo- sizione del lavoro (segue)

LA CRISI DIMENSIONALE Programmi di grandi dimensioni (segue) trattano dati relativi a entità del mondo reale (persone, oggetti, grafici, documenti) interagiscono con entità del modo reale Tuttavia: le entità del mondo reale non sono "dati" su cui operano delle funzioni sono entità che devono essere trattate in modo coerente alla loro essenza

LA CRISI GESTIONALE Il costo maggiore nel processo di produzione del software è dovuto alla manutenzione –correttiva (per eliminare errori) –adattativa (per rispondere a nuove esigenze) Programmi di piccole dimensioni –trovare gli errori non è difficilissimo –limpatto delle modifiche è intrinsecamente limi- tato dalle piccole dimensioni del programma

LA CRISI GESTIONALE Programmi di medie dimensioni individuare gli errori è già più complesso limpatto delle modifiche si propaga, a causa del non-accoppiamento dati/funzioni, anche a fun- zioni o procedure diverse da quella modificata. Programmi di grandi dimensioni trovare gli errori può essere estremamente difficile e oneroso data la propagazione delle modifiche, ogni cambiamento coinvolge tutto il team di sviluppo.

LA CRISI GESTIONALE Programmi di medie dimensioni individuare gli errori è già più complesso limpatto delle modifiche si propaga, a causa del non-accoppiamento dati/funzioni, anche a fun- zioni o procedure diverse da quella modificata. Programmi di grandi dimensioni trovare gli errori può essere estremamente difficile e oneroso data la propagazione delle modifiche, ogni cambiamento coinvolge tutto il team di sviluppo. È necessario cambiare RADICALMENTE il modo di concepire, progettare e programmare il software

LOBIETTIVO Costruzione modulare e incrementale del software per composizione, estensione, specia- lizzazione di componenti Tecnologia component-based Quali strumenti?

MODELLI COMPUTAZIONALI Diversi modelli… –Imperativo –Funzionale –Dichiarativo –A oggetti (?) … con ingredienti comuni… … e differenze cruciali

GLI INGREDIENTI COMUNI... Valori Costanti (Riferimenti) Tipi di dato (scalari e strutturati) Variabili (Puntatori) Binding e Visibilità (scope)

Strutture di controllo Comandi e procedure Funzioni Moduli Classi GLI INGREDIENTI COMUNI...

…E LE DIFFERENZE Differenza cruciale: il modello del collante cioè i meccanismi di combinazione ed astrazione

…E LE DIFFERENZE Modello funzionale: –elementi di base: funzioni ed espressioni –meccanismo fondamentale: la chiamata Modello logico: –elemento di base: lassioma –meccanismo fondamentale: la deduzione logica

…E LE DIFFERENZE Modello imperativo: –elemento fondamentale: il comando –meccanismi fondamentali:

REQUISITI DEL SOFTWARE : Correttezza, Efficienza, Generalità : Strutturazione, Modularità, Incapsulamento (ADT) : Riusabilità, Estendibilità, Genericità, Incrementalità : Distribuzione, Mobilità, Interattività …:Interoperabilità,...

EFFICIENZA… MA NON SOLO Premature optimization is the root of all evil –Donald E. Knuth Make it work first, before you make it work fast –Bruce Whiteside Make it fail-safe before you make it faster Make it clear before you make it faster –Kernighan A. Plaugher

UN PAIO DI PRINCIPI If you need a little speedup, work at the best level (which delivers the most speedup for the less effort) –definizione del problema –struttura del sistema –ottimizzazione dellalgoritmo –riorganizzazione delle strutture dati –ottimizzazione del codice –hardware e software del sistema

UN PAIO DI PRINCIPI If you need a big speedup, work at many levels –quando le modifiche ad un livello sono indipendenti dai cambiamenti negli altri livelli, i miglioramenti di velocità si moltiplicano

QUALE PROGETTO? Spesso si studia un linguaggio si pensa in termini del linguaggio conosciuto, usando –i costrutti del linguaggio –linformation space del linguaggio –metodologie legate al linguaggio (idiomi, framework ) –schemi standard (pattern)

INFORMATION SPACE un insieme di dimensioni e di con- cetti usati per la espressione (di un modello) di un sistema (software) –L'information space proposto dalle macchine di Turing (o di Von Neumann ) non introduce concetti adatti a trattare la complessità

MODELLO Non tanto la rappresentazione di una realtà, quanto....linsieme di strutture simboliche usate per dare una descrizione (schema) di una certa realtà

COSA SI DOVREBBE FARE? 1.Definire i requisiti 2.Fare lanalisi e il progetto adottando un information space e un modello adeguato 3. Implementare (anche in un linguaggio di più basso livello rispetto al modello adottato) 4. Effettuare il testing Processo di sviluppo iterativo (a spirale)

PRODUZIONE DEL SOFTWARE: COSA OCCORRE? Concetti e Metodologie per pensare Metodologie, Processi e Strumenti per produrre

PRINCIPI STRUTTURALI Information hiding, incapsulamento Località Parametricità Astrazione vs. rappresentazione Cosa fa vs. come lo fa –a livello di dati –a livello di elaborazione

INTERFACCIA E IMPLEMENTAZIONE L'interfaccia esprime una vista astratta di un ente computazionale, nascon- dendone –l'organizzazione interna –i dettagli di funzionamento L'implementazione esprime –la rappresentazione dello stato interno –il codice di un ente computazionale.

ASTRAZIONE Si focalizza sul funzionamento osservabile di un ente Abstraction helps people to think about what they are doing –la struttura interna di un servitore è inessenziale agli occhi del cliente –basta assicurare il rispetto del contratto stabilito dallinterfaccia.

INCAPSULAMENTO Si focalizza sullimplementazione di un ente Encapsulation allows program changes to be reliably made with limited effort Astrazione e incapsulamento sono concetti complementari.

INDIPENDENZA DALLA RAPPRESENTAZIONE Incapsulamento significa che la rappresentazione concreta di un dato può essere modificata senza che vi siano ripercussioni sul resto del programma.

DAL DIRE AL FARE... In assenza di precisi supporti linguistici, in fase di codifica si può però compromettere il livello di astrazione e con esso la modularità e la riusabilità della soluzione.

RAPPRESENTAZIONE & ASTRAZIONE Attraverso i costruttori di tipo ( array, struct, enum, etc.) il progettista può definire strutture dati che siano la rappresentazione concreta delle astrazioni che ha in mente. Occorre catturare la semantica delle astrazioni di dato, cercando di impedire laccesso diretto alla rappresentazione concreta del dato.

RAPPRESENTAZIONE & ASTRAZIONE Due grandi approcci: definire tipi di dati astratti (ADT) sfruttare i moduli per definire singole astrazioni di dato Questi approcci hanno caratteristiche complementari.

TIPI DI DATO ASTRATTO Focalizzano lattenzione sulle pro- prietà logico-concettuali di un tipo Lasciano sullo sfondo la rappresen- tazione concreta. Quali proprietà rilevanti? Quali operazioni visibili ai clienti (interfaccia)? Quali criteri per definire linterfaccia? Quali metodologie per una soluzione flessibile?

MODULI Il modulo permette di raggruppare dati, funzioni e procedure in una singola unità sintattica, ottenendone lincapsulamento. L'uso di un modulo rende possibile costruire una barriera di astrazione intorno alla rappresentazione concreta di una struttura dati.

MODULI Se ben definito, un modulo permette di: –garantire l'uso consistente e corretto di una nuova astrazione di dato –ottenere indipendenza dalla rappresenta- zione concreta Però, è adatto a rappresentare una singola risorsa (astrazione di dato): non è infatti possibile includere lo stesso modulo più volte in unapplicazione.

ESEMPIO: IL CONTATORE Scopo: definire il concetto di contatore Specifica: un componente caratterizzato in ogni istante da un valore (intero) a cui si accede tramite le operazioni di: –reset:azzera il valore del contatore –inc:incrementa di uno il valore –getValue:restituisce il valore attuale

ESEMPIO: IL CONTATORE Scopo: definire il concetto di contatore Specifica: un componente caratterizzato in ogni istante da un valore (intero) a cui si accede tramite le operazioni di: –reset:azzera il valore del contatore –inc:incrementa di uno il valore –getValue:restituisce il valore attuale Non importa come è realizzato dentro: importa il suo comportamento osservabile.

ESEMPIO: IL CONTATORE Due possibilità: definire il tipo di dato astratto (ADT) contatore e poi sfruttarlo per creare oggetti di tipo contatore definire in un modulo la singola astrazione di dato contatore e poi usarlo così comè.

ESEMPIO: IL CONTATORE Due possibilità: definire il tipo di dato astratto (ADT) contatore e poi sfruttarlo per creare oggetti di tipo contatore definire in un modulo la singola astrazione di dato contatore e poi usarlo così comè. Pro: possibile definire tanti oggetti contatore quanti ne servono. Contro: mancanza di vero incapsulamento (chiunque può in realtà accedere allo stato interno)

ESEMPIO: IL CONTATORE Due possibilità: definire il tipo di dato astratto (ADT) contatore e poi sfruttarlo per creare oggetti di tipo contatore definire in un modulo la singola astrazione di dato contatore e poi usarlo così comè. Pro: possibile garantire vero incapsulamento Contro : si può definire un solo oggetto contatore (loggetto coincide col modulo che lo realizza)

IL CONTATORE COME ADT Definire il tipo di dato astratto (ADT) contatore... typedef …… contatore;...con le sue operazioni: void reset(contatore*); void inc(contatore*); int getValue(contatore); tutti i clienti vedono la typedef tutti sanno in realtà come è fatto

IL CONTATORE COME ADT Definire il tipo di dato astratto (ADT) contatore... typedef …… contatore;...con le sue operazioni: void reset(contatore*); void inc(contatore*); int getValue(contatore); reset e inc devono cambiare lo stato del contatore necessario passare un puntatore getValue invece deve solo accedere allo stato del contatore, ma senza cambiarlo è più opportuno il passaggio per valore

IL CONTATORE COME ADT NOTA: la specifica del tipo di dato astratto contatore non ha richiesto per ora alcuna scelta circa la sua organizzazione interna. La struttura interna del contatore è irrilevante per i clienti che devono usarlo!

IL CONTATORE COME ADT: USO Si importano la definizione dellADT e le dichiarazioni delle funzioni ( counter.h ) Si definiscono tante variabili contato- re quante ne occorrono, e si usano #include "counter.h" main() { int v1, v2; contatore c1, c2; reset(&c1); reset(&c2); inc(&c1); inc(&c1); inc(&c2); v1=getValue(c1); v2=getValue(c2); }

IL CONTATORE COME ADT Implementazione La struttura interna del contatore diventa rilevante quando giunge il momento di realizzarlo. Se ora scegliamo di rappresentare lo stato con un intero, avremo: typedef int contatore;

IL CONTATORE COME ADT È ora possibile definire (e non solo dichiarare) le operazioni: void reset(contatore* c){ *c = 0; } void inc(contatore* c){ (*c)++; } int getValue(contatore c){ return c; }

IL CONTATORE COME ADT Una implementazione alternativa Se invece scegliessimo di rappresen- tare lo stato con una stringa di I (notazione a numeri romani): typedef char contatore[21]; Qui –la stringa vuota indica lo zero – I indica 1, II indica 2, etc. ma per il cliente non cambia niente! ok solo per nu- meri fino a 20

IL CONTATORE COME ADT Le operazioni diventerebbero: void reset(contatore* c){ (*c)[0] = '\0'; } void inc(contatore* c){ int x=strlen(*c); (*c)[x]='I'; (*c)[x+1]='\0'; } int getValue(contatore c){ return strlen(c); }

LAPPROCCIO DEGLI ADT Consente di separare interfaccia e implementazione Rende il cliente indipendente dalla struttura interna dellADT (servitore) Permette al cliente di definire tanti oggetti quanti gliene occorrono Ma non garantisce incapsulamento –tutti i clienti vedono la typedef, –conoscono la struttura interna dellADT –e possono violare il protocollo di accesso

LAPPROCCIO DEGLI ADT Consente di separare interfaccia e implementazione Rende il cliente indipendente dalla struttura interna dellADT (servitore) Permette al cliente di definire tanti oggetti quanti gliene occorrono Ma non garantisce incapsulamento –tutti i clienti vedono la typedef, –conoscono la struttura interna dellADT –e possono violare il protocollo di accesso Rispettare il protocollo di accesso stabilito dellinterfaccia è, per il cliente, un atto volontario Se un cliente ill-behaved decide di aggira-re le operazioni previste e di accedere diret- tamente allo stato interno degli oggetti, nessuno può impedirlo

IL CONTATORE COME MODULO Definire il contatore come singola risorsa protetta dentro a un modulo static int cont; con operazioni che agiscono implicitamente su essa void reset( void ); void inc( void ); int getValue( void );

IL CONTATORE COME MODULO Definire il contatore come singola risorsa dentro a un modulo static int cont; con operazioni che agiscono implicitamente su essa void reset( void ); void inc( void ); int getValue( void ); Le operazioni non hanno alcun parametro perché ora agiscono tutte, implicitamente, sullunico contatore esistente: quello rappresentato dalla variabile statica cont.

CONTATORE COME MODULO: USO Si importano solo le dichiarazioni delle funzioni ( mcounter.h ) Si usa semplicemente il contatore racchiuso nel modulo senza dover definire alcunché #include "mcounter.h" main() { int v; reset(); inc(); inc(); v=getValue(); }

LAPPROCCIO A MODULO Separa interfaccia e implementazione Rende il cliente indipendente dalla struttura interna dellADT (servitore) Garantisce lincapsulamento –i clienti vedono solo le dichiarazioni delle operazioni: non conoscono la struttura interna della risorsa (privata) del modulo Offre al cliente una singola risorsa (da usare senza doverla definire): non è adatto se servono più risorse

LOBIETTIVO Lideale sarebbe: garantire lincapsulamento come è in grado di fare lapproccio a modulo ma nel contempo consentire al clien- te di creare tanti oggetti quanti glie- ne occorrono come nellapproccio ad ADT garantendo inoltre –separazione interfaccia / implementazione –indipendenza dalla rappresentazione

IL CONCETTO DI OGGETTO Un oggetto viene inteso come un centro di servizi dotato di una parte visibile (interfaccia) e di una parte nascosta Centro servizi Operazione A Operazione B Operazione C Parte nascosta Parte visibile (INTERFACCIA)

IL CONCETTO DI OGGETTO Centro servizi Operazione A Operazione B Operazione C Parte nascosta Parte visibile (INTERFACCIA) Offre agli altri oggetti (clienti) un insieme di attività (operazioni) senza che sia nota/accessibile la sua organizzazione interna.

IL CONCETTO DI OGGETTO Centro servizi Operazione A Operazione B Operazione C Parte nascosta Parte visibile (INTERFACCIA) Ogni cliente può creare (istanziare) tanti oggetti quanti gliene occorrono a partire da una sorta di modello delloggetto (classe)

SISTEMI A OGGETTI Larchitettura di un sistema a oggetti: un insieme di oggetti che interagi- scono gli uni con gli altri senza conoscere nulla delle rispet- tive rappresentazioni concrete Modello di intera- zione a scambio di messaggi

ELABORAZIONE E INTERAZIONE Peter Wegner: gli oggetti sono la classe più usata di interaction machines la tecnologia object-based è divenu- ta dominante perché interattiva, e quindi per ciò stesso più espressiva di una specifica algoritmica.

LIDEA DI OGGETTO integra dati e elaborazione (comportamento) promuove approcci di progettazione e sviluppo sia top-down sia bottom-up cattura i principi fondamentali di una corretta strutturazione del software introduce un information space molto ricco e orientato alla gestione della complessità.

INFORMATION SPACE OO

LE PROPRIETÀ DI UN OGGETTO Un oggetto possiede stato, funziona- mento e identità Struttura e funzionamento di oggetti simili sono definiti nella loro classe comune, di cui essi sono istanze. I termini istanza e oggetto sono intercambiabili.

IL CONCETTO DI CLASSE Una classe descrive la struttura interna e il funzionamento di un oggetto. Oggetti appartenenti a una stessa classe hanno: –la stessa rappresentazione interna –le stesse operazioni –lo stesso funzionamento.

OGGETTI vs. ALGORITMI Gli algoritmi hanno un funzionamento osserva- bile che non dipende dal tempo. Gli oggetti posseggono sia proprietà trasforma- zionali sia proprietà temporali. Il funzionamento osser- vabile di un oggetto è descritto da interaction histories che specifi- cano i messaggi ricevuti e i messaggi inviati.

OGGETTI vs. ALGORITMI Un algoritmo calcola eseguendo una sequenza finita di azioni interne. Un algoritmo è un siste- ma off-line, che specifica il flusso completo di una computazione prima che essa inizi. Un oggetto calcola attra- verso un pattern di inte- razioni (interaction his- tory) iniziate dallester- no, al di fuori del con- trollo dell'oggetto. Un oggetto è un sistema on-line.

OGGETTI vs. ALGORITMI Un algoritmo è un siste- ma chiuso, non soggetto a interazioni con lesterno durante il suo funziona- mento. Problemi di natura algo- ritmica ammettono specifi- che formali, sono imple- mentati da programmi la cui correttezza può essere dimostrata e hanno una precisa nozione di com- plessità. Un oggetto è un siste- ma aperto. Problemi interattivi co- me la prenotazione dei posti aerei non hanno specifiche complete, né una definizione precisa di correttezza o di complessità.

OGGETTI vs. ALGORITMI Il funzionamento di algoritmi può essere specificato da un contratto che si conclude in un dato momento, come un contratto di vendita. Un algoritmo trasforma un ingresso prespecificato (pre- condizioni) in una uscita (post-condizioni): se i clienti forniscono un valore che soddisfa le precondizioni, si garantisce un risultato che soddisfa le postcondizioni. Gli oggetti richiedono la specifica di un contratto che si prolunga nel tem- po, come un contratto di matrimonio.

OGGETTI vs. ALGORITMI Gli algoritmi hanno come requisito primario la corret- tezza e come requisito secondario lefficienza. Gli algoritmi sono progettati mediante un raffinamento top-down delle specifiche. I sistemi software hanno come requisito primario un basso co- sto del ciclo di vita. Il progetto di un sistema ad oggetti parte da una descrizione bottom-up dellambiente di intera- zione.

RELAZIONI TRA OGGETTI Le relazioni tra oggetti sono il punto- chiave della progettazione in grande Sono oggi codificate in pattern –incapsulamento, possesso –ereditarietà

EREDITARIETÀ Una relazione tra classi Ereditarietà singola: una classe condivide la struttura e/o il funziona- mento definito in unaltra classe Ereditarietà multipla: una classe condivide la struttura e/o il funziona- mento definito in varie altre classi

EREDITARIETÀ Una relazione tra classi Ereditarietà singola: una classe condivide la struttura e/o il funziona- mento definito in unaltra classe Ereditarietà multipla: una classe condivide la struttura e/o il funziona- mento definito in varie altre classi La nozione di ereditarietà scaturisce dall'esigenza di poter condividere (parti di) una descrizione, cioè di riusare concetti già esistenti e codice già scritto e provato.

LINGUAGGI AD OGGETTI Linguaggi object-oriented –supportano sia incapsulamento, sia ereditarietà Linguaggi object-based –supportano solo incapsulamento (come Ada e Modula2)

SVILUPPO OBJECT-ORIENTED Si può sviluppare software in modo object-oriented anche senza disporre a livello implementativo di un linguaggio a oggetti? SÌ... anche se a fatica

CLASSI, MODULI, ADT, TIPI Il concetto di classe non coincide con il concetto di tipo –La classe può essere intesa come la specifica implementazione di un tipo –incluse le modalità di costruzione degli oggetti. Il costrutto class integra –aspetti tipici dei costrutti per esprimere modularità –aspetti tipici dei costrutti per definire ADT

QUALI OPERAZIONI ?

IL PUNTO DI VISTA UTENTE Dal punto di vista dellutente, vi sono: operazioni di costruzione (costruttori) operazioni di selezione di componenti (selettori) operazioni di verifica di proprietà (predicati) operazioni di trasformazione (trasformatori) La presenza o assenza di certe categorie di operazioni implica diversi tipi di oggetti: oggetti atomici vs. oggetti composti gli oggetti atomici non hanno selettori oggetti con o senza stato gli oggetti senza stato non hanno trasformatori

IL PUNTO DI VISTA DELLIMPLEMENTATORE Limplementatore, invece, opera diverse classificazioni in relazione allaspetto che intende mettere in luce operazioni di costruzione / configurazione operazioni primitive / non primitive operazioni private / pubbliche Questi criteri di classificazione operano su dimensioni diverse uno rispetto allaltro –possono quindi esistere primitive private o pubbliche, operatori di costruzione privati e pubblici, etc.

IL PUNTO DI VISTA DELLIMPLEMENTATORE Limplementatore, invece, opera diverse classificazioni in relazione allaspetto che intende mettere in luce operazioni di costruzione / configurazione operazioni primitive / non primitive operazioni private / pubbliche Questi criteri di classificazione operano su dimensioni diverse uno rispetto allaltro –possono quindi esistere primitive private o pubbliche, operatori di costruzione privati e pubblici, etc. Costruzione: unoperazione di definizione, che alloca memoria e eventualmente inizializza. Configurazione: unoperazione che inizializza un oggetto.

IL PUNTO DI VISTA DELLIMPLEMENTATORE Limplementatore, invece, opera diverse classificazioni in relazione allaspetto che intende mettere in luce operazioni di costruzione / configurazione operazioni primitive / non primitive operazioni private / pubbliche Questi criteri di classificazione operano su dimensioni diverse uno rispetto allaltro –possono quindi esistere primitive private o pubbliche, operatori di costruzione privati e pubblici, etc. Primitive: operazioni dipendenti dalla rappresentazione le uniche a poter accedere alla rappresentazione interna un insieme funzionalmente completo Non primitive: operazioni indipendenti dalla rappresentazione non accedono alla rappresentazione interna non cambiano se essa viene modificata

IL PUNTO DI VISTA DELLIMPLEMENTATORE Limplementatore, invece, opera diverse classificazioni in relazione allaspetto che intende mettere in luce operazioni di costruzione / configurazione operazioni primitive / non primitive operazioni private / pubbliche Questi criteri di classificazione operano su dimensioni diverse uno rispetto allaltro –possono quindi esistere primitive private o pubbliche, operatori di costruzione privati e pubblici, etc. Pubbliche: tutti possono invocarle per operare sulloggetto Private: possono essere invocate solo da altre operazioni del medesimo oggetto