SlideShare a Scribd company logo
1 of 30
INTRODUZIONE AI DESIGN PATTERN
INGEGNERIA DEL SOFTWARE
Università degli Studi di Padova
Dipartimento di Matematica
Corso di Laurea in Informatica, A.A. 2014 – 2015
rcardin@math.unipd.it
Ingegneria del software mod. A
SOMMARIO
 Introduzione
 Cos’è un design pattern
 Perché i design pattern
 Livelli di progettazione
 Utilizzare i design pattern
2Riccardo Cardin
Ingegneria del software mod. A
SOMMARIO
 Introduzione
 Cos’è un design pattern
 Perché i design pattern
 Livelli di progettazione
 Utilizzare i design pattern
3Riccardo Cardin
Ingegneria del software mod. A
DESIGN PATTERN
 Specifica Tecnica, Definizione di Prodotto, Piano
di Qualifica
4Riccardo Cardin
Revisione dei
Requisiti
R. Progetto
Architetturale
Revisione di
Qualifica
R. di
Accettazione
Ingegneria del software mod. A
INTRODUZIONE
 Progettare software object oriented è difficile
 Riusabilità
 Ci vuole molta esperienza
 Soluzioni comuni e ricorrenti (pattern)
 Flessibili, eleganti, riusabili
 Non solo progettazione di software
 Macbeth, novelle romantiche
 Altruismo …
 Si tende a tenere per se le soluzioni vincenti!
5Riccardo Cardin
Ingegneria del software mod. A
INTRODUZIONE
 Design Pattern
 Raccolta dell’esperienza dei progettisti, presentata in
un modo effettivamente utilizzabile
 Riutilizzo di soluzioni architetturali vincenti
 Nessuna soluzione nuova (o non documentata)
 Non vogliamo riscoprire la ruota?!
6Riccardo Cardin
Ingegneria del software mod. A
SOMMARIO
 Introduzione
 Cos’è un design pattern
 Perché i design pattern
 Livelli di progettazione
 Utilizzare i design pattern
7Riccardo Cardin
Ingegneria del software mod. A
COS’È UN DESIGN PATTERN
 Quattro elementi essenziali
 Nome del pattern
 Vocabolario di progettazione
 Il problema che il pattern risolve
 Descrizione del contesto
 La soluzione
 Elementi, relazioni, responsabilità e collaborazioni
 Le conseguenze
 Risultati e limiti della soluzione
8Riccardo Cardin
“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.”
Christopher Alexander
Definizione
Ingegneria del software mod. A
DESIGN PATTERN: ESEMPIO
 Model-View-Controller (MVC)
 Disaccoppia le tre componenti, rendendole riusabili
 Model: dati di business e regole di accesso
 View: rappresentazione grafica
 Controller: reazione della UI agli input utente
9Riccardo Cardin
Ingegneria del software mod. A
DESIGN PATTERN: ESEMPIO
 MVC: Model – View
 Disaccoppiamento  protocollo di notifica
 View deve garantire una visualizzazione consistente
 Diversi design pattern
 Observer design pattern
 Composite design pattern
10Riccardo Cardin
Ingegneria del software mod. A
DESIGN PATTERN: ESEMPIO
 MVC: View – Controller
 Permette la modifica del comportamento in risposta
all’input
 Nessuna modifica di visualizzazione
 Strategy/Algorithm design pattern
 Altri pattern…
 Factory Method / Template design pattern
 Decorator design pattern
11Riccardo Cardin
Ingegneria del software mod. A
DESCRIZIONE DI UN DESIGN PATTERN
 Convenzioni per la specifica
 Nome e classificazione
 Sinonimi: altri nomi noti del pattern
 Motivazione: problema progettuale
 Applicabilità: contesti in cui il pattern può essere applicato
 Struttura: rappresentazione grafica delle classi
 Partecipanti: classi e/o oggetti partecipanti e
responsabilità
 Collaborazioni tra i partecipanti
 Conseguenze: costi e benefici
 Implementazione: suggerimenti, tecniche, errori comuni
 Esempio di codice sorgente: possibile implementazione
 Utilizzo comune: il pattern nei sistemi reali
 Pattern correlati
12Riccardo Cardin
Ingegneria del software mod. A
CLASSIFICAZIONE DESIGN PATTERN
13Riccardo Cardin
Ingegneria del software mod. A
SOMMARIO
 Introduzione
 Cos’è un design pattern
 Perché i design pattern
 Livelli di progettazione
 Utilizzare i design pattern
14Riccardo Cardin
Ingegneria del software mod. A
RISOLVERE PROBLEMI ARCHITETTURALI
 Utilizzare gli oggetti appropriati
 È difficile decomporre il sistema in oggetti!
 Oggetti “reali” ≠ oggetti “non reali”
 DP permettono di identificare le astrazioni meno
ovvie
 Utilizzare la giusta granularità
 Come decidere cosa deve essere un oggetto?
 DP forniscono la granularità più appropriata
 Utilizzare le giuste interfacce
 Gli oggetti sono “conosciuti” solo per il proprio
insieme di operazioni
 DP definiscono cosa mettere/non nell’interfaccia
15Riccardo Cardin
Ingegneria del software mod. A
PRINCIPI DI PROGETTAZIONE
16Riccardo Cardin
Program to an interface, not an implementation.
Favor object composition over class inheritance
Ingegneria del software mod. A
PRINCIPI DI PROGETTAZIONE
 Progettare pensando al cambiamento
 Anticipazione di nuovi requisiti e loro estensioni
 Massimizza il riuso
 DP permettono al sistema di evolvere
 Creazione di oggetti indirettamente (interfacce)
 Decidere quale operazione utilizzare solo a runtime
 Limitare le dipendenze dall’ambiente di esecuzione
 Nascondere l’implementazione degli oggetti
 Isolare gli algoritmi che hanno possibilità di essere estesi
 Utilizzare astrazione e livellamento delle classi per ottenere
un sistema con un basso grado di accoppiamento
 Aggiungere nuove funzionalità utilizzando la composizione
17Riccardo Cardin
Ingegneria del software mod. A
SOMMARIO
 Introduzione
 Cos’è un design pattern
 Perché i design pattern
 Livelli di progettazione
 Utilizzare i design pattern
18Riccardo Cardin
Ingegneria del software mod. A
LIVELLI DI PROGETTAZIONE
 Progettare applicazioni
 Riuso “interno”
 Riduzione delle dipendenze
 Toolkit (librerie software)
 Insieme di oggetti correlati e riusabili progettati per
fornire funzionalità generiche.
 Riutilizzo del codice (code reuse)
 C++/Java I/O stream library
19Riccardo Cardin
Applicazioni
Framework
Toolkit
Ingegneria del software mod. A
LIVELLI DI PROGETTAZIONE
 Framework
 Insieme di classi che cooperano per costruire architetture
riutilizzabili per sviluppare un dominio di applicazioni
 Impone un disegno architetturale
 Riutilizzo architetturale
 “Inversion of control”
 Minor grado di accoppiamento possibile
 NON sono design pattern
 DP sono più astratti
 DP disegnano architetture più piccole
 DP sono meno specializzati
20Riccardo Cardin
Applicazioni
Framework
Toolkit
Ingegneria del software mod. A
TIPOLOGIE DI PATTERN
 Architetturali
 Stili architetturali di alto livello
 Progettuali
 Definiscono micro architetture
 Idiomi
 Risolvono piccoli problemi
 Legati al linguaggio
21Riccardo Cardin
Ingegneria del software mod. A
DESIGN PATTERN ARCHITETTURALI
 Pattern di alto livello
 Guida nella scomposizione in sottosistemi
 Ruoli e responsabilità
 Regole di comunicazione fra le componenti
 Agglomerati di pattern architetturali
 Esempi
 Paradigma client-server
 Model-View-Controller (MVC)
 Peer to peer
22Riccardo Cardin
Ingegneria del software mod. A
DESIGN PATTERN PROGETTUALI
 Progettazione di dettaglio di componenti
 Definiscono micro-architetture
 Schema di comunicazione fra gli elementi di un sistema
software
 Basi per costruire i pattern architetturali
 Sono i pattern (Gang of Four) GoF
 Factory
 Command
 Proxy
 Observer
 …
23Riccardo Cardin
Ingegneria del software mod. A
DESIGN PATTERN E IDIOMI
 Basso livello di astrazione
 Specifici del linguaggio di programmazione
 Utilizzano direttamente direttive del linguaggio
 Esempio
 Come implementare un Singleton in Java?
 Definire un attributo statico e privato
 Implementare il metodo pubblico e statico getInstance
 Impostare il costruttore privato.
24Riccardo Cardin
Ingegneria del software mod. A
DESIGN PATTERN E IDIOMI
 Design Pattern
 Soluzione generica ad una classe di problemi
 Propone un modello architetturale
 Idioma
 Soluzione specifica ad un linguaggio
 Legato alla tecnologia
25Riccardo Cardin
Un design idiomatico rinuncia alla genericità della soluzione basata
su un pattern a favore di una implementazione che poggia sulle
caratteristiche (e le potenzialità) del linguaggio.
Ingegneria del software mod. A
SOMMARIO
 Introduzione
 Cos’è un design pattern
 Perché i design pattern
 Livelli di progettazione
 Utilizzare i design pattern
26Riccardo Cardin
Ingegneria del software mod. A
UTILIZZARE I DESIGN PATTERN
 Come selezionare i DP?
 Considerare come il DP risolve il problema
 Leggere la sezione delle motivazioni
 Conoscere le relazioni fra DP
 Considerare le possibili cause di cambiamento
dell’architettura
 Considerare cosa può evolvere nell’architettura
27Riccardo Cardin
Ingegneria del software mod. A
UTILIZZARE I DESIGN PATTERN
 Come utilizzare un design pattern
 Leggere il DP attentamente
 Rileggere le sezioni che descrivono Struttura,
Partecipanti e Collaborazioni
 Analizzare il codice di esempio fornito
 Scegliere nomi appropriati per i partecipanti
 Definire la struttura delle classi del pattern all’interno
della propria applicazione
 Scegliere nomi appropriati per le operazioni
 Implementare le operazioni
28Riccardo Cardin
Ingegneria del software mod. A
ANTI-PATTERN
 Evitare gli errori già commessi
 Evidenziare perché una soluzione sbagliata può
sembrare in principio corretta per un problema
 Descrivere come passare dalla soluzione sbagliata a
quella corretta
 Esempi
 Reinventare la ruota (quadrata)
 Codice spaghetti
 Fede cieca
 Anomalia della sottoclasse vuota
 Programmazione “copia e incolla”
 …
29Riccardo Cardin
Problemi ricorrenti che si incontrano durante lo sviluppo dei
programmi e che dovrebbero essere evitati, non affrontati
Ingegneria del software mod. A
RIFERIMENTI
 Design Patterns, Elements of Reusable Object
Oriented Software, GoF, 1995, Addison-Wesley
 MVC
http://www.claudiodesio.com/ooa&d/mvc.htm
 Design Patterns
http://sourcemaking.com/design_patterns
30Riccardo Cardin

More Related Content

What's hot

Design Pattern Architetturali - Dependency Injection
Design Pattern Architetturali - Dependency InjectionDesign Pattern Architetturali - Dependency Injection
Design Pattern Architetturali - Dependency InjectionRiccardo Cardin
 
Design Pattern Creazionali
Design Pattern CreazionaliDesign Pattern Creazionali
Design Pattern CreazionaliRiccardo Cardin
 
IntroduzioneAllaGestioneDiUnProgettoSoftwareConUML
IntroduzioneAllaGestioneDiUnProgettoSoftwareConUMLIntroduzioneAllaGestioneDiUnProgettoSoftwareConUML
IntroduzioneAllaGestioneDiUnProgettoSoftwareConUMLmatteo_gentile
 
Mvc e di spring e angular js
Mvc e di   spring e angular jsMvc e di   spring e angular js
Mvc e di spring e angular jsRiccardo Cardin
 
Il linguaggio UML - Teoria ed esempi pratici sugli use case diagram
Il linguaggio UML - Teoria ed esempi pratici sugli use case diagramIl linguaggio UML - Teoria ed esempi pratici sugli use case diagram
Il linguaggio UML - Teoria ed esempi pratici sugli use case diagramGiuseppe Cramarossa
 
Aspect Oriented Programming
Aspect Oriented ProgrammingAspect Oriented Programming
Aspect Oriented ProgrammingAndrea Bozzoni
 
Generazione automatica diagrammi di rete con template pptx
Generazione automatica diagrammi di rete con template pptxGenerazione automatica diagrammi di rete con template pptx
Generazione automatica diagrammi di rete con template pptxGiacomoZorzin
 
Riuso Object Oriented
Riuso Object OrientedRiuso Object Oriented
Riuso Object OrientedStefano Fago
 
High Level Synthesis Using Esterel
High Level Synthesis Using EsterelHigh Level Synthesis Using Esterel
High Level Synthesis Using EsterelAlberto Minetti
 
Stato di avanzamento dei lavori e roadmap del progetto CMDBuild - CMDBuild Da...
Stato di avanzamento dei lavori e roadmap del progetto CMDBuild - CMDBuild Da...Stato di avanzamento dei lavori e roadmap del progetto CMDBuild - CMDBuild Da...
Stato di avanzamento dei lavori e roadmap del progetto CMDBuild - CMDBuild Da...CMDBuild org
 

What's hot (11)

Design Pattern Architetturali - Dependency Injection
Design Pattern Architetturali - Dependency InjectionDesign Pattern Architetturali - Dependency Injection
Design Pattern Architetturali - Dependency Injection
 
Design Pattern Creazionali
Design Pattern CreazionaliDesign Pattern Creazionali
Design Pattern Creazionali
 
IntroduzioneAllaGestioneDiUnProgettoSoftwareConUML
IntroduzioneAllaGestioneDiUnProgettoSoftwareConUMLIntroduzioneAllaGestioneDiUnProgettoSoftwareConUML
IntroduzioneAllaGestioneDiUnProgettoSoftwareConUML
 
Mvc e di spring e angular js
Mvc e di   spring e angular jsMvc e di   spring e angular js
Mvc e di spring e angular js
 
Il linguaggio UML - Teoria ed esempi pratici sugli use case diagram
Il linguaggio UML - Teoria ed esempi pratici sugli use case diagramIl linguaggio UML - Teoria ed esempi pratici sugli use case diagram
Il linguaggio UML - Teoria ed esempi pratici sugli use case diagram
 
Aspect Oriented Programming
Aspect Oriented ProgrammingAspect Oriented Programming
Aspect Oriented Programming
 
Generazione automatica diagrammi di rete con template pptx
Generazione automatica diagrammi di rete con template pptxGenerazione automatica diagrammi di rete con template pptx
Generazione automatica diagrammi di rete con template pptx
 
Dependency Injection
Dependency InjectionDependency Injection
Dependency Injection
 
Riuso Object Oriented
Riuso Object OrientedRiuso Object Oriented
Riuso Object Oriented
 
High Level Synthesis Using Esterel
High Level Synthesis Using EsterelHigh Level Synthesis Using Esterel
High Level Synthesis Using Esterel
 
Stato di avanzamento dei lavori e roadmap del progetto CMDBuild - CMDBuild Da...
Stato di avanzamento dei lavori e roadmap del progetto CMDBuild - CMDBuild Da...Stato di avanzamento dei lavori e roadmap del progetto CMDBuild - CMDBuild Da...
Stato di avanzamento dei lavori e roadmap del progetto CMDBuild - CMDBuild Da...
 

Viewers also liked

Java - Processing input and output
Java - Processing input and outputJava - Processing input and output
Java - Processing input and outputRiccardo Cardin
 
Scala For Java Programmers
Scala For Java ProgrammersScala For Java Programmers
Scala For Java ProgrammersEnno Runne
 
Software architecture patterns
Software architecture patternsSoftware architecture patterns
Software architecture patternsRiccardo Cardin
 
SOLID - Principles of Object Oriented Design
SOLID - Principles of Object Oriented DesignSOLID - Principles of Object Oriented Design
SOLID - Principles of Object Oriented DesignRiccardo Cardin
 
Java - Remote method invocation
Java - Remote method invocationJava - Remote method invocation
Java - Remote method invocationRiccardo Cardin
 
Java- Concurrent programming - Synchronization (part 1)
Java- Concurrent programming - Synchronization (part 1)Java- Concurrent programming - Synchronization (part 1)
Java- Concurrent programming - Synchronization (part 1)Riccardo Cardin
 
Java- Concurrent programming - Synchronization (part 2)
Java- Concurrent programming - Synchronization (part 2)Java- Concurrent programming - Synchronization (part 2)
Java- Concurrent programming - Synchronization (part 2)Riccardo Cardin
 
Java Graphics Programming
Java Graphics ProgrammingJava Graphics Programming
Java Graphics ProgrammingRiccardo Cardin
 
A (too) Short Introduction to Scala
A (too) Short Introduction to ScalaA (too) Short Introduction to Scala
A (too) Short Introduction to ScalaRiccardo Cardin
 
Java - Concurrent programming - Thread's advanced concepts
Java - Concurrent programming - Thread's advanced conceptsJava - Concurrent programming - Thread's advanced concepts
Java - Concurrent programming - Thread's advanced conceptsRiccardo Cardin
 
Java Exception Handling, Assertions and Logging
Java Exception Handling, Assertions and LoggingJava Exception Handling, Assertions and Logging
Java Exception Handling, Assertions and LoggingRiccardo Cardin
 
Java - Collections framework
Java - Collections frameworkJava - Collections framework
Java - Collections frameworkRiccardo Cardin
 
Scala - the good, the bad and the very ugly
Scala - the good, the bad and the very uglyScala - the good, the bad and the very ugly
Scala - the good, the bad and the very uglyBozhidar Bozhanov
 
Java - Generic programming
Java - Generic programmingJava - Generic programming
Java - Generic programmingRiccardo Cardin
 
Presto updates to 0.178
Presto updates to 0.178Presto updates to 0.178
Presto updates to 0.178Kai Sasaki
 
Java - Concurrent programming - Thread's basics
Java - Concurrent programming - Thread's basicsJava - Concurrent programming - Thread's basics
Java - Concurrent programming - Thread's basicsRiccardo Cardin
 

Viewers also liked (17)

Java - Processing input and output
Java - Processing input and outputJava - Processing input and output
Java - Processing input and output
 
Scala For Java Programmers
Scala For Java ProgrammersScala For Java Programmers
Scala For Java Programmers
 
Software architecture patterns
Software architecture patternsSoftware architecture patterns
Software architecture patterns
 
SOLID - Principles of Object Oriented Design
SOLID - Principles of Object Oriented DesignSOLID - Principles of Object Oriented Design
SOLID - Principles of Object Oriented Design
 
Java - Remote method invocation
Java - Remote method invocationJava - Remote method invocation
Java - Remote method invocation
 
Java- Concurrent programming - Synchronization (part 1)
Java- Concurrent programming - Synchronization (part 1)Java- Concurrent programming - Synchronization (part 1)
Java- Concurrent programming - Synchronization (part 1)
 
Java- Concurrent programming - Synchronization (part 2)
Java- Concurrent programming - Synchronization (part 2)Java- Concurrent programming - Synchronization (part 2)
Java- Concurrent programming - Synchronization (part 2)
 
Java Graphics Programming
Java Graphics ProgrammingJava Graphics Programming
Java Graphics Programming
 
A (too) Short Introduction to Scala
A (too) Short Introduction to ScalaA (too) Short Introduction to Scala
A (too) Short Introduction to Scala
 
Java - Concurrent programming - Thread's advanced concepts
Java - Concurrent programming - Thread's advanced conceptsJava - Concurrent programming - Thread's advanced concepts
Java - Concurrent programming - Thread's advanced concepts
 
Java Exception Handling, Assertions and Logging
Java Exception Handling, Assertions and LoggingJava Exception Handling, Assertions and Logging
Java Exception Handling, Assertions and Logging
 
Java - Sockets
Java - SocketsJava - Sockets
Java - Sockets
 
Java - Collections framework
Java - Collections frameworkJava - Collections framework
Java - Collections framework
 
Scala - the good, the bad and the very ugly
Scala - the good, the bad and the very uglyScala - the good, the bad and the very ugly
Scala - the good, the bad and the very ugly
 
Java - Generic programming
Java - Generic programmingJava - Generic programming
Java - Generic programming
 
Presto updates to 0.178
Presto updates to 0.178Presto updates to 0.178
Presto updates to 0.178
 
Java - Concurrent programming - Thread's basics
Java - Concurrent programming - Thread's basicsJava - Concurrent programming - Thread's basics
Java - Concurrent programming - Thread's basics
 

Similar to Introduzione ai Design Pattern

Presentazione review it_20min
Presentazione review it_20minPresentazione review it_20min
Presentazione review it_20minFabrizio Straccia
 
Il programmatore e le sue api
Il programmatore e le sue apiIl programmatore e le sue api
Il programmatore e le sue apiBetter Software
 
Ribesdesign interfacce
Ribesdesign interfacceRibesdesign interfacce
Ribesdesign interfacceRibesdesign
 
Programma modellazione 3 d e biografia
Programma modellazione 3 d e biografiaProgramma modellazione 3 d e biografia
Programma modellazione 3 d e biografiaOrnella Pirone
 
Programma modellazione 3 d e biografia
Programma modellazione 3 d e biografiaProgramma modellazione 3 d e biografia
Programma modellazione 3 d e biografiaCollettivo Creativo
 
Collettivo Creativo | Programma modellazione 3D e biografia- WorkshopCreativi...
Collettivo Creativo | Programma modellazione 3D e biografia- WorkshopCreativi...Collettivo Creativo | Programma modellazione 3D e biografia- WorkshopCreativi...
Collettivo Creativo | Programma modellazione 3D e biografia- WorkshopCreativi...Ornella Pirone
 
Idiomatic Domain Driven Design
Idiomatic Domain Driven DesignIdiomatic Domain Driven Design
Idiomatic Domain Driven DesignAndrea Saltarello
 
Tesi Marco Ventura
Tesi Marco VenturaTesi Marco Ventura
Tesi Marco Venturaguest335584
 
Presentazione Tamiazzo09
Presentazione Tamiazzo09Presentazione Tamiazzo09
Presentazione Tamiazzo09gueste37f39
 
Refactoring Smell Code
Refactoring Smell CodeRefactoring Smell Code
Refactoring Smell CodeJOULEHUB GMBH
 
Lo stato dell' arte sulla documentazione dei progetti ICT
Lo stato dell' arte sulla documentazione dei progetti ICTLo stato dell' arte sulla documentazione dei progetti ICT
Lo stato dell' arte sulla documentazione dei progetti ICTMatteo Gentile
 
Sviluppo di un prototipo di interfaccia per la verbalizzazione degli esami on...
Sviluppo di un prototipo di interfaccia per la verbalizzazione degli esami on...Sviluppo di un prototipo di interfaccia per la verbalizzazione degli esami on...
Sviluppo di un prototipo di interfaccia per la verbalizzazione degli esami on...LeD87
 
Usare i Design System - Un approccio Frameworkless per la tua Web Application
Usare i Design System - Un approccio Frameworkless per la tua Web ApplicationUsare i Design System - Un approccio Frameworkless per la tua Web Application
Usare i Design System - Un approccio Frameworkless per la tua Web Applicationextrategy
 
Alm pills - Sessione community tour Dot Net Umbria 2011
Alm pills - Sessione community tour Dot Net Umbria 2011Alm pills - Sessione community tour Dot Net Umbria 2011
Alm pills - Sessione community tour Dot Net Umbria 2011Gian Maria Ricci
 
Modellazione geometrica generativa: un approccio algoritmico
Modellazione geometrica generativa: un approccio algoritmicoModellazione geometrica generativa: un approccio algoritmico
Modellazione geometrica generativa: un approccio algoritmicoAntonio Turiello
 
Modelli applicativi per il Cloud Computing - Part 1 - Edition 2014
Modelli applicativi per il Cloud Computing - Part 1 - Edition 2014Modelli applicativi per il Cloud Computing - Part 1 - Edition 2014
Modelli applicativi per il Cloud Computing - Part 1 - Edition 2014Marco Parenzan
 
Corso WebApp iOS - Lezione 02: Design Touch Mobile
Corso WebApp iOS - Lezione 02: Design Touch MobileCorso WebApp iOS - Lezione 02: Design Touch Mobile
Corso WebApp iOS - Lezione 02: Design Touch MobileAndrea Picchi
 

Similar to Introduzione ai Design Pattern (20)

AutoCAD2011
AutoCAD2011AutoCAD2011
AutoCAD2011
 
Presentazione review it_20min
Presentazione review it_20minPresentazione review it_20min
Presentazione review it_20min
 
Il programmatore e le sue api
Il programmatore e le sue apiIl programmatore e le sue api
Il programmatore e le sue api
 
Corso GOF Design Pattern
Corso GOF Design PatternCorso GOF Design Pattern
Corso GOF Design Pattern
 
Ribesdesign interfacce
Ribesdesign interfacceRibesdesign interfacce
Ribesdesign interfacce
 
Programma modellazione 3 d e biografia
Programma modellazione 3 d e biografiaProgramma modellazione 3 d e biografia
Programma modellazione 3 d e biografia
 
Programma modellazione 3 d e biografia
Programma modellazione 3 d e biografiaProgramma modellazione 3 d e biografia
Programma modellazione 3 d e biografia
 
Collettivo Creativo | Programma modellazione 3D e biografia- WorkshopCreativi...
Collettivo Creativo | Programma modellazione 3D e biografia- WorkshopCreativi...Collettivo Creativo | Programma modellazione 3D e biografia- WorkshopCreativi...
Collettivo Creativo | Programma modellazione 3D e biografia- WorkshopCreativi...
 
Idiomatic Domain Driven Design
Idiomatic Domain Driven DesignIdiomatic Domain Driven Design
Idiomatic Domain Driven Design
 
Tesi Marco Ventura
Tesi Marco VenturaTesi Marco Ventura
Tesi Marco Ventura
 
Presentazione Tamiazzo09
Presentazione Tamiazzo09Presentazione Tamiazzo09
Presentazione Tamiazzo09
 
Refactoring Smell Code
Refactoring Smell CodeRefactoring Smell Code
Refactoring Smell Code
 
Lo stato dell' arte sulla documentazione dei progetti ICT
Lo stato dell' arte sulla documentazione dei progetti ICTLo stato dell' arte sulla documentazione dei progetti ICT
Lo stato dell' arte sulla documentazione dei progetti ICT
 
Sviluppo di un prototipo di interfaccia per la verbalizzazione degli esami on...
Sviluppo di un prototipo di interfaccia per la verbalizzazione degli esami on...Sviluppo di un prototipo di interfaccia per la verbalizzazione degli esami on...
Sviluppo di un prototipo di interfaccia per la verbalizzazione degli esami on...
 
Usare i Design System - Un approccio Frameworkless per la tua Web Application
Usare i Design System - Un approccio Frameworkless per la tua Web ApplicationUsare i Design System - Un approccio Frameworkless per la tua Web Application
Usare i Design System - Un approccio Frameworkless per la tua Web Application
 
Alm pills - Sessione community tour Dot Net Umbria 2011
Alm pills - Sessione community tour Dot Net Umbria 2011Alm pills - Sessione community tour Dot Net Umbria 2011
Alm pills - Sessione community tour Dot Net Umbria 2011
 
Modellazione geometrica generativa: un approccio algoritmico
Modellazione geometrica generativa: un approccio algoritmicoModellazione geometrica generativa: un approccio algoritmico
Modellazione geometrica generativa: un approccio algoritmico
 
Ascari Project
Ascari ProjectAscari Project
Ascari Project
 
Modelli applicativi per il Cloud Computing - Part 1 - Edition 2014
Modelli applicativi per il Cloud Computing - Part 1 - Edition 2014Modelli applicativi per il Cloud Computing - Part 1 - Edition 2014
Modelli applicativi per il Cloud Computing - Part 1 - Edition 2014
 
Corso WebApp iOS - Lezione 02: Design Touch Mobile
Corso WebApp iOS - Lezione 02: Design Touch MobileCorso WebApp iOS - Lezione 02: Design Touch Mobile
Corso WebApp iOS - Lezione 02: Design Touch Mobile
 

Introduzione ai Design Pattern

  • 1. INTRODUZIONE AI DESIGN PATTERN INGEGNERIA DEL SOFTWARE Università degli Studi di Padova Dipartimento di Matematica Corso di Laurea in Informatica, A.A. 2014 – 2015 rcardin@math.unipd.it
  • 2. Ingegneria del software mod. A SOMMARIO  Introduzione  Cos’è un design pattern  Perché i design pattern  Livelli di progettazione  Utilizzare i design pattern 2Riccardo Cardin
  • 3. Ingegneria del software mod. A SOMMARIO  Introduzione  Cos’è un design pattern  Perché i design pattern  Livelli di progettazione  Utilizzare i design pattern 3Riccardo Cardin
  • 4. Ingegneria del software mod. A DESIGN PATTERN  Specifica Tecnica, Definizione di Prodotto, Piano di Qualifica 4Riccardo Cardin Revisione dei Requisiti R. Progetto Architetturale Revisione di Qualifica R. di Accettazione
  • 5. Ingegneria del software mod. A INTRODUZIONE  Progettare software object oriented è difficile  Riusabilità  Ci vuole molta esperienza  Soluzioni comuni e ricorrenti (pattern)  Flessibili, eleganti, riusabili  Non solo progettazione di software  Macbeth, novelle romantiche  Altruismo …  Si tende a tenere per se le soluzioni vincenti! 5Riccardo Cardin
  • 6. Ingegneria del software mod. A INTRODUZIONE  Design Pattern  Raccolta dell’esperienza dei progettisti, presentata in un modo effettivamente utilizzabile  Riutilizzo di soluzioni architetturali vincenti  Nessuna soluzione nuova (o non documentata)  Non vogliamo riscoprire la ruota?! 6Riccardo Cardin
  • 7. Ingegneria del software mod. A SOMMARIO  Introduzione  Cos’è un design pattern  Perché i design pattern  Livelli di progettazione  Utilizzare i design pattern 7Riccardo Cardin
  • 8. Ingegneria del software mod. A COS’È UN DESIGN PATTERN  Quattro elementi essenziali  Nome del pattern  Vocabolario di progettazione  Il problema che il pattern risolve  Descrizione del contesto  La soluzione  Elementi, relazioni, responsabilità e collaborazioni  Le conseguenze  Risultati e limiti della soluzione 8Riccardo Cardin “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.” Christopher Alexander Definizione
  • 9. Ingegneria del software mod. A DESIGN PATTERN: ESEMPIO  Model-View-Controller (MVC)  Disaccoppia le tre componenti, rendendole riusabili  Model: dati di business e regole di accesso  View: rappresentazione grafica  Controller: reazione della UI agli input utente 9Riccardo Cardin
  • 10. Ingegneria del software mod. A DESIGN PATTERN: ESEMPIO  MVC: Model – View  Disaccoppiamento  protocollo di notifica  View deve garantire una visualizzazione consistente  Diversi design pattern  Observer design pattern  Composite design pattern 10Riccardo Cardin
  • 11. Ingegneria del software mod. A DESIGN PATTERN: ESEMPIO  MVC: View – Controller  Permette la modifica del comportamento in risposta all’input  Nessuna modifica di visualizzazione  Strategy/Algorithm design pattern  Altri pattern…  Factory Method / Template design pattern  Decorator design pattern 11Riccardo Cardin
  • 12. Ingegneria del software mod. A DESCRIZIONE DI UN DESIGN PATTERN  Convenzioni per la specifica  Nome e classificazione  Sinonimi: altri nomi noti del pattern  Motivazione: problema progettuale  Applicabilità: contesti in cui il pattern può essere applicato  Struttura: rappresentazione grafica delle classi  Partecipanti: classi e/o oggetti partecipanti e responsabilità  Collaborazioni tra i partecipanti  Conseguenze: costi e benefici  Implementazione: suggerimenti, tecniche, errori comuni  Esempio di codice sorgente: possibile implementazione  Utilizzo comune: il pattern nei sistemi reali  Pattern correlati 12Riccardo Cardin
  • 13. Ingegneria del software mod. A CLASSIFICAZIONE DESIGN PATTERN 13Riccardo Cardin
  • 14. Ingegneria del software mod. A SOMMARIO  Introduzione  Cos’è un design pattern  Perché i design pattern  Livelli di progettazione  Utilizzare i design pattern 14Riccardo Cardin
  • 15. Ingegneria del software mod. A RISOLVERE PROBLEMI ARCHITETTURALI  Utilizzare gli oggetti appropriati  È difficile decomporre il sistema in oggetti!  Oggetti “reali” ≠ oggetti “non reali”  DP permettono di identificare le astrazioni meno ovvie  Utilizzare la giusta granularità  Come decidere cosa deve essere un oggetto?  DP forniscono la granularità più appropriata  Utilizzare le giuste interfacce  Gli oggetti sono “conosciuti” solo per il proprio insieme di operazioni  DP definiscono cosa mettere/non nell’interfaccia 15Riccardo Cardin
  • 16. Ingegneria del software mod. A PRINCIPI DI PROGETTAZIONE 16Riccardo Cardin Program to an interface, not an implementation. Favor object composition over class inheritance
  • 17. Ingegneria del software mod. A PRINCIPI DI PROGETTAZIONE  Progettare pensando al cambiamento  Anticipazione di nuovi requisiti e loro estensioni  Massimizza il riuso  DP permettono al sistema di evolvere  Creazione di oggetti indirettamente (interfacce)  Decidere quale operazione utilizzare solo a runtime  Limitare le dipendenze dall’ambiente di esecuzione  Nascondere l’implementazione degli oggetti  Isolare gli algoritmi che hanno possibilità di essere estesi  Utilizzare astrazione e livellamento delle classi per ottenere un sistema con un basso grado di accoppiamento  Aggiungere nuove funzionalità utilizzando la composizione 17Riccardo Cardin
  • 18. Ingegneria del software mod. A SOMMARIO  Introduzione  Cos’è un design pattern  Perché i design pattern  Livelli di progettazione  Utilizzare i design pattern 18Riccardo Cardin
  • 19. Ingegneria del software mod. A LIVELLI DI PROGETTAZIONE  Progettare applicazioni  Riuso “interno”  Riduzione delle dipendenze  Toolkit (librerie software)  Insieme di oggetti correlati e riusabili progettati per fornire funzionalità generiche.  Riutilizzo del codice (code reuse)  C++/Java I/O stream library 19Riccardo Cardin Applicazioni Framework Toolkit
  • 20. Ingegneria del software mod. A LIVELLI DI PROGETTAZIONE  Framework  Insieme di classi che cooperano per costruire architetture riutilizzabili per sviluppare un dominio di applicazioni  Impone un disegno architetturale  Riutilizzo architetturale  “Inversion of control”  Minor grado di accoppiamento possibile  NON sono design pattern  DP sono più astratti  DP disegnano architetture più piccole  DP sono meno specializzati 20Riccardo Cardin Applicazioni Framework Toolkit
  • 21. Ingegneria del software mod. A TIPOLOGIE DI PATTERN  Architetturali  Stili architetturali di alto livello  Progettuali  Definiscono micro architetture  Idiomi  Risolvono piccoli problemi  Legati al linguaggio 21Riccardo Cardin
  • 22. Ingegneria del software mod. A DESIGN PATTERN ARCHITETTURALI  Pattern di alto livello  Guida nella scomposizione in sottosistemi  Ruoli e responsabilità  Regole di comunicazione fra le componenti  Agglomerati di pattern architetturali  Esempi  Paradigma client-server  Model-View-Controller (MVC)  Peer to peer 22Riccardo Cardin
  • 23. Ingegneria del software mod. A DESIGN PATTERN PROGETTUALI  Progettazione di dettaglio di componenti  Definiscono micro-architetture  Schema di comunicazione fra gli elementi di un sistema software  Basi per costruire i pattern architetturali  Sono i pattern (Gang of Four) GoF  Factory  Command  Proxy  Observer  … 23Riccardo Cardin
  • 24. Ingegneria del software mod. A DESIGN PATTERN E IDIOMI  Basso livello di astrazione  Specifici del linguaggio di programmazione  Utilizzano direttamente direttive del linguaggio  Esempio  Come implementare un Singleton in Java?  Definire un attributo statico e privato  Implementare il metodo pubblico e statico getInstance  Impostare il costruttore privato. 24Riccardo Cardin
  • 25. Ingegneria del software mod. A DESIGN PATTERN E IDIOMI  Design Pattern  Soluzione generica ad una classe di problemi  Propone un modello architetturale  Idioma  Soluzione specifica ad un linguaggio  Legato alla tecnologia 25Riccardo Cardin Un design idiomatico rinuncia alla genericità della soluzione basata su un pattern a favore di una implementazione che poggia sulle caratteristiche (e le potenzialità) del linguaggio.
  • 26. Ingegneria del software mod. A SOMMARIO  Introduzione  Cos’è un design pattern  Perché i design pattern  Livelli di progettazione  Utilizzare i design pattern 26Riccardo Cardin
  • 27. Ingegneria del software mod. A UTILIZZARE I DESIGN PATTERN  Come selezionare i DP?  Considerare come il DP risolve il problema  Leggere la sezione delle motivazioni  Conoscere le relazioni fra DP  Considerare le possibili cause di cambiamento dell’architettura  Considerare cosa può evolvere nell’architettura 27Riccardo Cardin
  • 28. Ingegneria del software mod. A UTILIZZARE I DESIGN PATTERN  Come utilizzare un design pattern  Leggere il DP attentamente  Rileggere le sezioni che descrivono Struttura, Partecipanti e Collaborazioni  Analizzare il codice di esempio fornito  Scegliere nomi appropriati per i partecipanti  Definire la struttura delle classi del pattern all’interno della propria applicazione  Scegliere nomi appropriati per le operazioni  Implementare le operazioni 28Riccardo Cardin
  • 29. Ingegneria del software mod. A ANTI-PATTERN  Evitare gli errori già commessi  Evidenziare perché una soluzione sbagliata può sembrare in principio corretta per un problema  Descrivere come passare dalla soluzione sbagliata a quella corretta  Esempi  Reinventare la ruota (quadrata)  Codice spaghetti  Fede cieca  Anomalia della sottoclasse vuota  Programmazione “copia e incolla”  … 29Riccardo Cardin Problemi ricorrenti che si incontrano durante lo sviluppo dei programmi e che dovrebbero essere evitati, non affrontati
  • 30. Ingegneria del software mod. A RIFERIMENTI  Design Patterns, Elements of Reusable Object Oriented Software, GoF, 1995, Addison-Wesley  MVC http://www.claudiodesio.com/ooa&d/mvc.htm  Design Patterns http://sourcemaking.com/design_patterns 30Riccardo Cardin