Programmazione Orientata agli Oggetti in Linguaggio Java



Documenti analoghi
Programmazione Orientata agli Oggetti in Linguaggio Java

Tecnologie di Sviluppo per il Web

Programmazione Orientata agli Oggetti in Linguaggio Java

L ambizione dei design pattern (letteralmente schemi di programmazione) è quella di offrire soluzioni a problemi ricorrenti che facilitano lo

Programmazione Orientata agli Oggetti in Linguaggio Java

Ingegneria del Software. Introduzione ai pattern

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Tecnologie di Sviluppo per il Web

Progettazione : Design Pattern Creazionali

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

Sommario. Introduzione Architettura Client-Server. Server Web Browser Web. Architettura a Due Livelli Architettura a Tre Livelli

Design patterns in Java

design patterns e GRASP

Progettazione! Progettazione! Progettazione! Progettazione!

DESIGN PATTERN CREAZIONALI INGEGNERIA DEL SOFTWARE INTRODUZIONE SINGLETON. Scopo dei design pattern creazionali

Tecnologie di Sviluppo per il Web

Tecnologie di Sviluppo per il Web

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

Programmazione Orientata agli Oggetti in Linguaggio Java

Le variabili. Olga Scotti

Corso sul linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Test di unità con JUnit4

Ingegneria del Software. Introduzione al pattern

Tecnologie di Sviluppo per il Web

Programmazione Orientata agli Oggetti in Linguaggio Java

Inizializzazione, Assegnamento e Distruzione di Classi

Concetto di Funzione e Procedura METODI in Java

Approccio stratificato

Oggetti Lezione 3. aspetti generali e definizione di classi I

7. Architetture Software

Il Pattern PROXY. Ex presentazione realizzata dallo studente Paolo Melchiori (matricola 65734) nell a.a

Ingegneria del Software. Presentazione del pattern Proxy

Architetture Applicative

Concetti di base di ingegneria del software

Programmazione a Oggetti Modulo B

Soluzione dell esercizio del 2 Febbraio 2004

Realizzazione di una classe con un associazione

Obiettivi dell esercitazione. Requisiti (cont.) Requisiti. Università di Roma La Sapienza A.A Facoltà di Ingegneria Sede di Latina

Programmazione a Oggetti Lezione 10. Ereditarieta

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

Programmazione Orientata agli Oggetti in Linguaggio Java

10. Design Patterns. Andrea Polini. Ingegneria del Software Corso di Laurea in Informatica. (Ingegneria del Software) 10. Design Patterns 1 / 36

Object Oriented Software Design

Reflection in Java. Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A

!"#$%&&'()#*%+%+!"#$"',,'()#*%+ -")%*&'&'+'$.)+-$$%&&) !"#$%&&'(%)'*+%",#-%"#.'%&'#/0)-+#12"+3,)4+56#7+#.')8'9

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

Appunti sulla Macchina di Turing. Macchina di Turing

Algoritmi di Ricerca. Esempi di programmi Java

Studente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Secondo Compitino 21 Dicembre 2006

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti

15 - Packages. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Programmazione Orientata agli Oggetti in Linguaggio Java

Introduzione ai tipi di dato astratti: applicazione alle liste

10 - Programmare con gli Array

Tale attività non è descritta in questa dispensa

Operazioni di input/output. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni

Tecnologie dei Linguaggi di Programmazione

14 - Packages. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Una metodologia per la specifica di software basato su componenti

Object Oriented Programming

Automazione Industriale 4- Ingegneria del Software

Breve riepilogo della puntata precedente:

Corso di Informatica

ARRAY BIDIMENSIONALI float [][] mx = new float[3][4]; (float []) [] mx = new float[3][4];

Database. Si ringrazia Marco Bertini per le slides

SOMMARIO DESIGN PATTERN

GESTIONE DEI PROCESSI

dall argomento argomento della malloc()

Soluzione dell esercizio del 12 Febbraio 2004

Programmazione Orientata agli Oggetti in Linguaggio Java

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

Archivi e database. Prof. Michele Batocchi A.S. 2013/2014

Ingegneria del Software T

Tecnologie di Sviluppo per il Web

SOMMARIO DESIGN PATTERN INTRODUZIONE AI DESIGN PATTERN INGEGNERIA DEL SOFTWARE. Introduzione. Cos è un design pattern. Cos è un design pattern

Appunti di Sistemi Distribuiti

design pattern una soluzione progettuale generale a un problema ricorrente

Funzioni in C. Violetta Lonati

DESIGN PATTERNS Parte 6. State Proxy

LEZIONE 10 - Design Patterns

Stefania Marrara - Esercitazioni di Tecnologie dei Sistemi Informativi. Integrazione di dati di sorgenti diverse

Corso Analista Programmatore Web PHP Corso Online Analista Programmatore Web PHP

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

Prossime lezioni. Dai TDA agli oggetti. Riassunto. Riassunto TDA. Oggi. Stefano Mizzaro 1

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo.

Corso sul linguaggio SQL

Programmazione Orientata agli Oggetti in Linguaggio Java

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Testo Esercizio. Un modello è ragionevole quando contiene queste tre caratteristiche.

Studente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Primo scritto 11 Gennaio 2008

utente: collezione di contenuti e servizi sviluppatore: pagine e applicazioni

Strumenti di modellazione. Gabriella Trucco

Web Content Management and E- Learning

Automazione Industriale (scheduling+mms) scheduling+mms.

SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE

Design Patterns. fonti: [Gamma95] e [Pianciamore03] Autori: Giacomo Gabrielli, Manuel Comparetti

Parola chiave extends

UML Diagrammi delle classi. UML Diagramma classi 1

Transcript:

Programmazione Orientata agli Oggetti in Linguaggio Java Design Pattern: Storia Parte a versione 2.1 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina) G. Mecca Università della Basilicata mecca@unibas.it Design Pattern: Storia >> Sommario Sommario Definizione e Origine Il Libro Design Patterns della GoF Evoluzione dei Pattern Il Pattern Null Object Il Pattern DAO 2

Design Pattern: Storia >> Definizione e Origine Definizione e Origine Design Pattern letteralmente motivi ricorrenti di progettazione si tratta di modelli di soluzioni per problemi ricorrenti di sviluppo del software consolidatesi nel tempo attraverso l esperienza con i linguaggi ad oggetti sono scheletri di soluzione, sufficientemente generali da essere riadattabili a vari contesti applicativi si riferiscono a problemi che si presentano con frequenza nascono dall esperienza sono basati su tecnologie OO 3 Design Pattern: Storia >> Definizione e Origine Definizione e Origine In effetti l origine non è legata al software, ma all architettura Il primo ideatore Cristopher Alexander A Pattern Language: Towns, Buildings, Construction, Oxford University Press, 1977 circa 250 pattern diversi per l architettura degli edifici 4

Design Pattern: Storia >> Definizione e Origine Definizione e Origine La definizione di Alexander Each pattern describes a problem which occurs over and over again in our environment, and then describes the core of the solution to that problem, in such a way that you can use this solution a million times over, without ever doing it the same way twice 5 Design Pattern: Storia >> Definizione e Origine Definizione e Origine La descrizione di un pattern un breve nome una descrizione del problema da risolvere una descrizione della soluzione suggerita una discussione del contesto di applicazione, ovvero delle conseguenze, dei vantaggi e degli svantaggi collegati all introduzione del pattern 6

Design Pattern: Storia >> Definizione e Origine Definizione e Origine Un esempio di pattern in architettura Nome: Corridoio corto Problema:... i corridoi lunghi e inutili rappresentano le cose peggiori dell architettura moderna.. 7 Design Pattern: Storia >> Definizione e Origine Definizione e Origine Soluzione realizzare corridoi brevi, rendendoli per quanto possibile simili a stanze con tappeti, mobili, librerie prevedere dimensioni ampie e abbondante illuminazione 8

Design Pattern: Storia >> Definizione e Origine Definizione e Origine L idea di Alexander costruire edifici utilizzando esclusivamente pattern ovvero definire un linguaggio di pattern per la progettazione architettonica Pattern Language insieme di pattern collegati tra di loro che collaborano a costruire un intero artefatto 9 Design Pattern: Storia >> GoF Design Patterns Il Libro Design Patterns della GoF I pattern nella programmazione nascono con un libro classico sull argomento della cosiddetta Gang of Four (GoF) La Gang of Four Erich Gamma, Software Techn. Center, Svizzera Richard Helm, IBM, Sydney Ralph Johnson, Univ. of Illinois, USA John Vlissides, IBM John Watson Center, USA 10

Design Pattern: Storia >> GoF Design Patterns Il Libro Design Patterns della GoF Il libro Design Patterns Elements of Reusable Object-Oriented Software, Addison Wesley, ottobre 1994 Attualmente oltre la 25ma ristampa 11 Design Pattern: Storia >> GoF Design Patterns Il Libro Design Patterns della GoF Nel libro viene introdotto il concetto di design pattern applicato allo sviluppo del software vengono illustrati i principi metodologici alla base dell uso del pattern viene fornito un elenco di 23 pattern divisi in tre categorie i linguaggi di riferimento sono il C++ e Smalltalk (i linguaggi di riferimento all epoca) 12

Design Pattern: Storia >> GoF Design Patterns Il Libro Design Patterns della GoF Principio metodologico fondamentale sviluppare per consentire il cambiamento Principio n. 1 programmare con le interfacce e non con le implementazioni Principio n. 2 favorire l associazione rispetto all ereditarietà Principio n. 3 separare le cose che possono cambiare da quelle che presumibilmente resteranno le stesse 13 Design Pattern: Storia >> GoF Design Patterns Il Libro Design Patterns della GoF Altri principi importanti non espliciti ma scontati Principio n. 4 rendere il codice efficiente (es: evitare la creazione eccessiva di oggetti) Principio n. 5 mantenere il codice manutenibile (es: evitare troppe classi, concentrare il codice ecc.) 14

Design Pattern: Storia >> GoF Design Patterns Il Libro Design Patterns della GoF Il catalogo dei pattern della GoF 23 pattern divisi in tre categorie Creational patterns riguardano la creazione degli oggetti Structural Patterns riguardano l organizzazione degli oggetti Behavioral Patterns riguardano il comportamento degli oggetti 15 Design Pattern: Storia >> GoF Design Patterns Il Libro Design Patterns della GoF Creational patterns (5) Abstract Factory Builder Factory Method Prototype Singleton Structural Patterns (7) Adapter Bridge Composite Decorator Facade Flyweight Proxy Behavioral Patterns (11) Chain of Responsibility Command Interpreter Iterator Mediator Memento Observer State Strategy Template Method Visitor 16

Design Pattern: Storia >> Un esempio di pattern Facade è un pattern di tipo strutturale Nome: Facade Categoria: strutturale Difficoltà di apprendimento limitata Difficoltà di applicazione limitata Descrizione del pattern serve a creare una singola interfaccia semplificata per l accesso ad un insieme di interfacce e classi più complicato 17 Design Pattern: Storia >> Un esempio il problema della lettura dallo standard input in Java richiede l accesso a svariate classi delle API per la creazione del flusso ed in particolare: System, InputStream, InputStreamReader, BufferedReader, IOException... e ad altre classi per l input formattato: Integer, Double, Float, Boolean, NumberFormatException... 18

Design Pattern: Storia >> In teoria sarebbe possibile scrivere una classe che faccia standard input direttamente accedendo ai metodi di tutte queste classi es: it.unibas.appuntamenti.controllo.principale il programmatore dovrebbe conoscere tutte le classi necessarie e scrivere opportunamente il codice delle chiamate dei metodi 19 Design Pattern: Storia >> System java.lang InputStream in NumberFormatException it.unibas.apppuntamenti.controllo Principale static void main(string[] args) void esegui() Integer static int parseint(string) String Double static int parsedouble(string) char charat(int) it.unibas.volpieconigli.controllo Principale java.io InputStreamReader static void main(string[] args) void esegui() InputStreamReader(InputStream) dovrei riprodurre le stesse dipendenze BufferedReader BufferedReader(Reader) IOException 20

Design Pattern: Storia >> La classe it.unibas.utilita.console fornisce una facciata unica per il complesso di classi necessarie quattro metodi semplici già pronti int leggiintero(), double leggidouble(), String leggistringa(), char leggicarattere() include la gestione delle eccezioni nasconde la complessità delle classi retrostanti 21 Design Pattern: Storia >> java.lang it.unibas.apppuntamenti.controllo Principale static void main(string[] args) void esegui it.unibas.volpieconigli.controllo Console it.unibas.utilita -BufferedReader stdin int leggiintero() double leggidouble() String leggistringa() char leggicarattere() java.io Principale static void main(string[] args) void esegui include anche la gestione delle eccezioni di formato 22

Design Pattern: Storia >> In generale una Facade è una classe che fornisce, attraverso una interfaccia singola, accesso semplificato ad una collezione di interfacce complesse è uno strumento per organizzare l applicazione in sottosistemi, ciascuno dei quali accessibile dall esterno in maniera semplificata attraverso la facciata es: sottosistema lettura dallo standard input 23 Design Pattern: Storia >> Di conseguenza in alcuni casi le classi client possono semplicemente usare l interfaccia semplificata della facciata (la maggioranza) in altri casi potrebbe essere necessario accedere alle singole classi nascoste Altri esempi di Facade it.unibas.utilita.logger la classe System.Date di C# 24

Design Pattern: Storia >> Facade Diagramma UML della GoF fonte: http://www.tml.hut.fi/~pnr/tik-76.278/gof/html/ 25 Design Pattern: Storia >> Una prima annotazione sui nomi è convenzione riportare nel nome di una classe sviluppata secondo il pattern il nome del pattern utilizzato per renderne più evidente l utilizzo Di conseguenza la classe Console avrebbe dovuto chiamarsi ConsoleFacade 26

Design Pattern: Storia >> Una seconda annotazione dall esempio dovrebbe essere evidente la differenza tra pattern e framework Pattern scheletro di soluzione per un problema in un certo contesto Framework collezione di classi e di regole riutilizzabili per lo sviluppo di una classe di applicazioni 27 Design Pattern: Storia >> Quindi i framework sono fatti anche di codice, i pattern no i framework sono legati ad una classe specifica di applicazioni (es: test, collezioni, programmazione grafica ecc.), i pattern sono legati ad una classe di problemi di programmaizone 28

Design Pattern: Storia >> Evoluzione dei Pattern Evoluzione dei Pattern Dopo il libro della Gang of Four si crea molto interesse e il movimento dei design pattern decolla rapidamente vengono suggeriti molti altri pattern nascono vari convegni internazionali es: PLoP, Pattern Language of Programming, nel 2004 all 11 edizione nascono altri concetti collegati; es: antipattern: un errore da evitare 29 Design Pattern: Storia >> Evoluzione dei Pattern Il Pattern Null Object In effetti esistono pattern che non fanno parte del catalogo della GoF perchè sono successivi ma che nella pratica si rivelano molto utili Un esempio il pattern Null Object ( Oggetto Nullo ) Descrizione del pattern un modo per sostituire un riferimento nullo con un oggetto che non fa nulla Nome: NullObject Categoria: -- Difficoltà di apprendimento limitata Difficoltà di applicazione limitata 30

Design Pattern: Storia >> Evoluzione dei Pattern Il Pattern Null Object Esempio nell applicazione volpi e conigli, solo alcune posizioni sulla scacchiera sono occupate da animali i restanti riferimenti hanno valore null Di conseguenza ogni volta che si preleva un riferimento dalla scacchiera è necessario, prima di fare qualsiasi cosa, verificare che non sia null 31 Design Pattern: Storia >> Evoluzione dei Pattern Il Pattern Null Object public void simula(scacchiera scacchiera) { for (int i = 0; i < scacchiera.getrighe(); i++) { for (int j = 0; j < scacchiera.getcolonne(); j++) { Animale animale = scacchiera.getelemento(i, j); if (animale!= null) { animale.agisci(scacchiera); } } } } lo stesso tipo di test è necessario ogni volta che prelevo un animale sulla scacchiera es: stampa della scacchiera 32

Design Pattern: Storia >> Evoluzione dei Pattern Il Pattern Null Object Una possibile soluzione definisco una classe AnimaleNullObject che implementa l interfaccia animale ma i cui metodi corrispondono ad un comportamento neutro In particolare agisci() non effettua nessuna operazione tostring() restituisce la stringa vuota 33 Design Pattern: Storia >> Evoluzione dei Pattern Il Pattern Null Object String tostring() { return ; } void agisci() { return; } boolean isconiglio {return false;} <<inteface>> Animale void agisci() boolean isconiglio() String tostring() Volpe Coniglio AnimaleNullObject void agisci() boolean isconiglio() String tostring() void agisci() boolean isconiglio() String tostring() void agisci() boolean isconiglio() String tostring() 34

Design Pattern: Storia >> Evoluzione dei Pattern Il Pattern Null Object In questo caso posso inizializzare la scacchiera invece che attraverso riferimenti null, riempendola di riferimenti ad animali nulli da quel momento in poi non è più necessario verificare se i riferimenti prelevati dalla scacchiera sono nulli o meno 35 Design Pattern: Storia >> Evoluzione dei Pattern Il Pattern Null Object public Scacchiera(int numerorighe, int numerocolonne) { elementi = new Animale[numeroRighe][numeroColonne]; for (int i = 0; i < numerorighe; i++) { for (int j = 0; j < numerocolonne; j++) { elementi[i][j] = new AnimaleNullObject(); } } } public void simula(scacchiera scacchiera) { for (int i = 0; i < scacchiera.getrighe(); i++) { for (int j = 0; j < scacchiera.getcolonne(); j++) { scacchiera.getelemento(i, j).agisci(); } } } 36

Design Pattern: Storia >> Evoluzione dei Pattern Il Pattern Null Object In generale il pattern NullObject è utile in tutti i casi in cui riferimenti ad oggetti di un certo tipo devono essere mischiati con riferimenti nulli consente di evitare l utilizzo di riferimenti nulli e quindi le verifiche corrispondenti evita, di conseguenza, errori del tipo NullPointerException 37 Design Pattern: Storia >> Evoluzione dei Pattern Il Pattern DAO Nome: DAO Categoria: -- Difficoltà di apprendimento limitata Difficoltà di applicazione limitata Un ulteriore esempio il pattern DAO ( Data Access Object ) un pattern per la gestione della persistenza Descrizione del pattern un oggetto specializzato in operazioni di persistenza per una classe di oggetti del modello è in grado di caricare, salvare e modificare oggetti di una classe in memoria persistente 38

Design Pattern: Storia >> Evoluzione dei Pattern Il Pattern DAO Vantaggi del DAO aumenta la coesione e consente di modularizzare il codice (separa lo strato del modello da quello della persistenza) riduce l accoppiamento perchè isola lo strato del controllo dalla tecnologia della persistenza (il controllo interagisce esclusivamente con i DAO) 39 Design Pattern: Storia >> Evoluzione dei Pattern Evoluzione dei Pattern Attualmente esistono sulla rete molti cataloghi di pattern in cui si contano centinaia di pattern diversi anche in contesti applicativi vari (es: sviluppo di applicazioni distribuite) Esempi http://hillside.net/patterns/ http://home.earthlink.net/~huston2/dp/patterns.html 40

Design Pattern: Storia >> Evoluzione dei Pattern Evoluzione dei Pattern La diffusione dei pattern ha aspetti senza dubbio positivi i pattern migliorano la comunicazione tra i programmatori ( usiamo una Facade qui.. ) i pattern migliorano la documentazione del software (alcuni pezzi dei diagrammi diventano autoesplicativi) i pattern favoriscono la diffusione delle esperienze 41 Design Pattern: Storia >> Evoluzione dei Pattern Evoluzione dei Pattern Ma ha anche aspetti negativi una forte proliferazione è contraria al concetto stesso di pattern perchè si scopra un pattern è necessario individuare una soluzione efficace ad un problema ricorrente (quindi i pattern vengono scoperti lentamente) inoltre, non sempre i propositori sono del tutto autorevoli 42

Design Pattern: Storia >> Evoluzione dei Pattern Evoluzione dei Pattern Una degenerazione del movimento riapplicare anche al contesto del software l idea del linguaggio di pattern ovvero regole per descrivere la struttura di un applicazione esclusivamente in termini di pattern Ma... questo è contrario allo spirito del libro della GoF 43 Design Pattern: Storia >> Evoluzione dei Pattern Evoluzione dei Pattern Infatti nel libro vengono chiaramente discusse le differenze con i pattern di Alexander l architettura esiste da molti più anni del software, le soluzioni architetturali sono molto più consolidate, il concetto di linguaggio ha senso viceversa, il software è ancora immaturo per spingere i pattern a diventare una soluzione definitiva ci vorranno anni per consolidare le tecniche 44

Design Pattern: Storia >> Sommario Riassumendo Definizione e Origine Il Libro Design Patterns della GoF Evoluzione dei Pattern Il Pattern Null Object Il Pattern DAO 45 Termini della Licenza Termini della Licenza This work is licensed under the Creative Commons Attribution- ShareAlike License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/1.0/ or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. Questo lavoro viene concesso in uso secondo i termini della licenza Attribution-ShareAlike di Creative Commons. Per ottenere una copia della licenza, è possibile visitare http://creativecommons.org/licenses/by-sa/1.0/ oppure inviare una lettera all indirizzo Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. 46