Corso GOF Design Pattern
     Modulo 1: Introduzione ai Design Pattern

       Leggi il programma completo del corso

www.javaportal.it | www.k-tech.it   corsi@k-tech.it   1
Agenda


►Cap 1 - Introduzione ai Design Pattern◄
 Cap 2 - Design Pattern Creazionali
 Cap 3 - Design Pattern Strutturali
 Cap 4 - Design Pattern Comportamentali




 www.javaportal.it | www.k-tech.it   corsi@k-tech.it   2
Un po’ di Storia…
                                                      1977
                                                   Il lavoro
●   Il termine Pattern fu introdotto             dell’architetto
    in un celebre saggio di                       Christopher
                                                  Alexander
    Christopher Alexander
    nell’ambito della architettura     1980
                                                      1987
    edile.                                    Cunningham e Beck
                                              applicano le idee di
●   L'opera di Alexander ispirò la               Alexander per
                                               sviluppare cinque
    nascita di un settore              1985
                                                pattern per le UI
    dell'ingegneria del software,
                                                     1991
    dedicato all'applicazione del             Tesi di dottorato di
    concetto di Design Pattern alle    1990     Erich Gamma
    architetture software.
                                                     1993
●   Attualmente, l'espressione                     Gruppo di
                                              discussione sul web
    “Design Pattern” viene usata       1995
    principalmente con riferimento                 1995
    all’ambito dell’ingegneria del              Gangs of Four
                                                   book
    software.
www.javaportal.it | www.k-tech.it             corsi@k-tech.it        3
…Un po’ di Storia

La nascita del movimento dei pattern in informatica si deve al
celebre libro:
                  Design Patterns: Elementi per il riuso di software ad
                  Oggetti, di: Erich Gamma, Richard Helm, Ralph Johnson,
                  John Vlissides.
                  1995



Grazie al successo di quest'opera, i suoi quattro autori divennero
talmente citati che la comunità scientifica iniziò, per brevità, a identificarli
collettivamente con il nome: la "banda dei quattro" (Gang of Four o GoF).

 In tale libro si descrivono 23 pattern, che successivamente
 verranno battezzati come “Design Pattern della Gangs of Four”.

 www.javaportal.it | www.k-tech.it                     corsi@k-tech.it             4
Diventare Maestro di Scacchi

Nel gioco degli scacchi:
●    Per essere un principiante basta conoscere le regole del gioco e
    le principali mosse.
●   Per essere un discreto giocatore bisogna apprendere dei principi
    ed acquisire alcune strategie.
●   Per essere un maestro bisogna studiare le partite dei grandi
    maestri, individuare i pattern nascosti, memorizzarli e applicarli.




 www.javaportal.it | www.k-tech.it                  corsi@k-tech.it       5
Diventare Master Designer
Nello sviluppo del software:
1. Primo: imparare le regole
       ●   Linguaggi (di programmazione e di progettazione)
       ●   Strutture Dati
       ●   Algoritmi
2. In seguito: apprendere i principi
       ●   OOA (Object Oriented Analysis)
       ●   OOD (Object Oriented Design)
       ●   OOP (Object Oriented Programming)
3. Infine: studiare i progetti e le soluzioni degli esperti
       ●   Comprendere i Design Pattern
       ●   Memorizzare i Design Pattern
       ●   Applicare i Design Pattern

 www.javaportal.it | www.k-tech.it                     corsi@k-tech.it   6
Definizione dei Design Pattern

“Ogni pattern descrive un problema che si ripete più e più volte nel
nostro ambiente, descrive poi il nucleo della soluzione del problema,
in modo tale che si possa usare la soluzione un milione di volte,
senza mai applicarla nella stessa maniera"
                                                         C. Alexander


In pratica un Design Pattern è una regola tripartita, che esprime
una relazione tra un contesto, un problema ed una soluzione.

                                  CONTESTO




          PROBLEMA                 DESIGN                SOLUZIONE
                                  PATTERN

www.javaportal.it | www.k-tech.it                       corsi@k-tech.it   7
Classificazione dei Pattern Software

●    Design Patterns:
     Per lo sviluppo del software (spesso Object-Oriented)
●
     Analysis Patterns:
     Per definire modelli di analisi ricorrenti e riutilizzabili.
●    Organization Patterns:
     Per strutturare organizzazioni e progetti.
●    Process Patterns:
     Per definire processi di sviluppo software.




    www.javaportal.it | www.k-tech.it                               corsi@k-tech.it   8
Classificazione dei Design Pattern
I Design Pattern possono essere classificati in funzione del loro livello di
astrazione/dettaglio:
 ●   Architectural Design Patterns:
     Descrivono l’organizzazione strutturale fondamentale di un sistema software
     in termini di sottosistemi,dei loro compiti e delle modalità di interazione.
 ●
     Design Patterns:
     Forniscono uno schema per raffinare i sottosistemi o componenti di un
     sistema software. In genere descrivono strutture ricorrenti di componenti
     comunicanti che risolvono un generico problema di progettazione in un
     particolare contesto.
 ●   Idioms o Coding Design Patterns:
     Pattern di basso livello specifico di un linguaggio di programmazione. Un
     idioma descrive come implementare particolari aspetti dei componenti o le
     relazioni tra essi utilizzando caratteristiche del linguaggio di programmazione
     scelto.


 www.javaportal.it | www.k-tech.it                           corsi@k-tech.it           9
Caratteristiche dei Design Pattern

Un design pattern nomina, astrae ed identifica gli aspetti chiave di
un problema di progettazione:
●   Le classi e le istanze che vi partecipano.
●   I loro ruoli e le collaborazioni.
●   La distribuzione delle responsabilità.




 www.javaportal.it | www.k-tech.it               corsi@k-tech.it       10
Caratteristiche dei Design Pattern

●   Nome: permette di identificare il Design Pattern con una parola
    e di lavorare con un alto livello di astrazione, indica lo scopo del
    pattern.
●   Intento: descrive brevemente le funzionalità e lo scopo.
●   Problema (Motivazione+Applicabilità): descrive il problema a
    cui il pattern è applicato e le condizioni necessarie per
    applicarlo.
●   Soluzione: descrive gli elementi (classi) che costituiscono il
    Design Pattern, le loro responsabilità e le loro relazioni.
●   Conseguenze: indicano risultati, compromessi, vantaggi e
    svantaggi nell'uso del Design Pattern.


www.javaportal.it | www.k-tech.it                  corsi@k-tech.it         11
Obiettivi dei Design Pattern

●   Creare una letteratura per la comunità Object-Oriented.
●   Aiutare gli sviluppatori a risolvere problemi già trattati.
●   Creare un linguaggio per comunicare intuizioni ed esperienza
    sui problemi e sulle relative soluzioni.




www.javaportal.it | www.k-tech.it                    corsi@k-tech.it   12
Importanza dei Design Pattern

Trasferiscono l’esperienza
I Design Pattern costituiscono una tecnica efficace per trasferire la
conoscenza e l'esperienza dei progettisti, rendendola disponibile a
tutti in modo comprensibile e concreto.

    “Sbagliando si impara…” vs “Impara dai successi altrui…”


Aiutano a progettare in modo migliore ed in minor tempo
● Costruire del software che sia riusabile.
● Evitare scelte che compromettano il suo riutilizzo.

● Migliorare la documentazione e la manutenzione di sistemi esistenti.




                Non re-inventiamo la ruota ogni volta!


www.javaportal.it | www.k-tech.it                    corsi@k-tech.it     13
Il Catalogo dei Design Pattern GoF

Il libro della GoF classifica 23 Design Pattern e li suddivide
in 3 categorie:
 ●   Creational (Pattern Creazionali)
        ●Trattano l’inizializzazione e la configurazione di classi ed oggetti.
 ●   Structural (Pattern Strutturali)
        Trattano il disaccoppiamento tra interfacce ed implementazioni delle
        ●

        classi, degli oggetti e della loro composizione.
 ●   Behavioral (Pattern Comportamentali)
        ●   Trattano le interazioni dinamiche tra gruppi di classi ed oggetti.


                    ● Alcuni pattern sono utilizzati insieme.
                    ● Alcuni sono alternativi di altri.

                    ● Altri sono simili ma hanno intenti differenti.




     www.javaportal.it | www.k-tech.it                          corsi@k-tech.it   14
Classificazione dei Design Pattern
                                                                DESIGN
                                                               PATTERN




             CREAZIONALI                         STRUTTURALI                               COMPORTAMENTALI




 FACTORY
                             ADAPTER                               FLYWEIGHT                                            INTERPRETER
  METHOD


  ABSTRACT                                                                                                              TEMPLATE
                                   BRIDGE                          PROXY
   FACTORY                                                                                                               METHOD


                                                                                                                    CHAIN OF
     BUILDER                         COMPOSITE                 FACADE                                             RESPONSABIL.
                                                                               STATE



           PROTOTYPE                             DECORATOR                                                       COMMAND
                                                                                OBSERVER



                       SINGLETON                                                                             ITERATOR

                                                                                       MEMENTO



                                                                                                  MEDIATOR




www.javaportal.it | www.k-tech.it                                                           corsi@k-tech.it                           15
Design Pattern Creazionali

●   Permettono di astrarre il processo di creazione degli oggetti.
●   Rendono un sistema indipendente da come i suoi oggetti
    sono creati,composti, e rappresentati.
●   Incapsulano conoscenza sulle classi concrete che un
    sistema usa.
●   Nascondono come le istanze delle classi sono create e
    composte.




www.javaportal.it | www.k-tech.it                 corsi@k-tech.it    16
Design Pattern Strutturali

●   Sono dedicati alla composizione di classi e oggetti per creare
    delle strutture più grandi.
●   Gli Structual class Pattern utilizzano l'ereditarietà per creare
    interfacce o implementazioni.
●   Gli Structual object Pattern descrivono il modo in cui comporre
    gli oggetti per realizzare nuove funzionalità.




www.javaportal.it | www.k-tech.it                  corsi@k-tech.it     17
Design Pattern Comportamentali

●   Focalizzano sul controllo del flusso tra oggetti.
●   Descrivono le comunicazioni tra oggetti.
●   Aiutano a valutare le responsabilità assegnate agli oggetti.
●   Suggeriscono modi per incapsulare algoritmi dentro classi.




www.javaportal.it | www.k-tech.it                  corsi@k-tech.it   18
BREAK

                            Dopo la pausa:

                            Abstract Factory




       Leggi il programma completo del corso



www.javaportal.it | www.k-tech.it              corsi@k-tech.it   19

Corso GOF Design Pattern

  • 1.
    Corso GOF DesignPattern Modulo 1: Introduzione ai Design Pattern Leggi il programma completo del corso www.javaportal.it | www.k-tech.it corsi@k-tech.it 1
  • 2.
    Agenda ►Cap 1 -Introduzione ai Design Pattern◄ Cap 2 - Design Pattern Creazionali Cap 3 - Design Pattern Strutturali Cap 4 - Design Pattern Comportamentali www.javaportal.it | www.k-tech.it corsi@k-tech.it 2
  • 3.
    Un po’ diStoria… 1977 Il lavoro ● Il termine Pattern fu introdotto dell’architetto in un celebre saggio di Christopher Alexander Christopher Alexander nell’ambito della architettura 1980 1987 edile. Cunningham e Beck applicano le idee di ● L'opera di Alexander ispirò la Alexander per sviluppare cinque nascita di un settore 1985 pattern per le UI dell'ingegneria del software, 1991 dedicato all'applicazione del Tesi di dottorato di concetto di Design Pattern alle 1990 Erich Gamma architetture software. 1993 ● Attualmente, l'espressione Gruppo di discussione sul web “Design Pattern” viene usata 1995 principalmente con riferimento 1995 all’ambito dell’ingegneria del Gangs of Four book software. www.javaportal.it | www.k-tech.it corsi@k-tech.it 3
  • 4.
    …Un po’ diStoria La nascita del movimento dei pattern in informatica si deve al celebre libro: Design Patterns: Elementi per il riuso di software ad Oggetti, di: Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides. 1995 Grazie al successo di quest'opera, i suoi quattro autori divennero talmente citati che la comunità scientifica iniziò, per brevità, a identificarli collettivamente con il nome: la "banda dei quattro" (Gang of Four o GoF). In tale libro si descrivono 23 pattern, che successivamente verranno battezzati come “Design Pattern della Gangs of Four”. www.javaportal.it | www.k-tech.it corsi@k-tech.it 4
  • 5.
    Diventare Maestro diScacchi Nel gioco degli scacchi: ● Per essere un principiante basta conoscere le regole del gioco e le principali mosse. ● Per essere un discreto giocatore bisogna apprendere dei principi ed acquisire alcune strategie. ● Per essere un maestro bisogna studiare le partite dei grandi maestri, individuare i pattern nascosti, memorizzarli e applicarli. www.javaportal.it | www.k-tech.it corsi@k-tech.it 5
  • 6.
    Diventare Master Designer Nellosviluppo del software: 1. Primo: imparare le regole ● Linguaggi (di programmazione e di progettazione) ● Strutture Dati ● Algoritmi 2. In seguito: apprendere i principi ● OOA (Object Oriented Analysis) ● OOD (Object Oriented Design) ● OOP (Object Oriented Programming) 3. Infine: studiare i progetti e le soluzioni degli esperti ● Comprendere i Design Pattern ● Memorizzare i Design Pattern ● Applicare i Design Pattern www.javaportal.it | www.k-tech.it corsi@k-tech.it 6
  • 7.
    Definizione dei DesignPattern “Ogni pattern descrive un problema che si ripete più e più volte nel nostro ambiente, descrive poi il nucleo della soluzione del problema, in modo tale che si possa usare la soluzione un milione di volte, senza mai applicarla nella stessa maniera" C. Alexander In pratica un Design Pattern è una regola tripartita, che esprime una relazione tra un contesto, un problema ed una soluzione. CONTESTO PROBLEMA DESIGN SOLUZIONE PATTERN www.javaportal.it | www.k-tech.it corsi@k-tech.it 7
  • 8.
    Classificazione dei PatternSoftware ● Design Patterns: Per lo sviluppo del software (spesso Object-Oriented) ● Analysis Patterns: Per definire modelli di analisi ricorrenti e riutilizzabili. ● Organization Patterns: Per strutturare organizzazioni e progetti. ● Process Patterns: Per definire processi di sviluppo software. www.javaportal.it | www.k-tech.it corsi@k-tech.it 8
  • 9.
    Classificazione dei DesignPattern I Design Pattern possono essere classificati in funzione del loro livello di astrazione/dettaglio: ● Architectural Design Patterns: Descrivono l’organizzazione strutturale fondamentale di un sistema software in termini di sottosistemi,dei loro compiti e delle modalità di interazione. ● Design Patterns: Forniscono uno schema per raffinare i sottosistemi o componenti di un sistema software. In genere descrivono strutture ricorrenti di componenti comunicanti che risolvono un generico problema di progettazione in un particolare contesto. ● Idioms o Coding Design Patterns: Pattern di basso livello specifico di un linguaggio di programmazione. Un idioma descrive come implementare particolari aspetti dei componenti o le relazioni tra essi utilizzando caratteristiche del linguaggio di programmazione scelto. www.javaportal.it | www.k-tech.it corsi@k-tech.it 9
  • 10.
    Caratteristiche dei DesignPattern Un design pattern nomina, astrae ed identifica gli aspetti chiave di un problema di progettazione: ● Le classi e le istanze che vi partecipano. ● I loro ruoli e le collaborazioni. ● La distribuzione delle responsabilità. www.javaportal.it | www.k-tech.it corsi@k-tech.it 10
  • 11.
    Caratteristiche dei DesignPattern ● Nome: permette di identificare il Design Pattern con una parola e di lavorare con un alto livello di astrazione, indica lo scopo del pattern. ● Intento: descrive brevemente le funzionalità e lo scopo. ● Problema (Motivazione+Applicabilità): descrive il problema a cui il pattern è applicato e le condizioni necessarie per applicarlo. ● Soluzione: descrive gli elementi (classi) che costituiscono il Design Pattern, le loro responsabilità e le loro relazioni. ● Conseguenze: indicano risultati, compromessi, vantaggi e svantaggi nell'uso del Design Pattern. www.javaportal.it | www.k-tech.it corsi@k-tech.it 11
  • 12.
    Obiettivi dei DesignPattern ● Creare una letteratura per la comunità Object-Oriented. ● Aiutare gli sviluppatori a risolvere problemi già trattati. ● Creare un linguaggio per comunicare intuizioni ed esperienza sui problemi e sulle relative soluzioni. www.javaportal.it | www.k-tech.it corsi@k-tech.it 12
  • 13.
    Importanza dei DesignPattern Trasferiscono l’esperienza I Design Pattern costituiscono una tecnica efficace per trasferire la conoscenza e l'esperienza dei progettisti, rendendola disponibile a tutti in modo comprensibile e concreto. “Sbagliando si impara…” vs “Impara dai successi altrui…” Aiutano a progettare in modo migliore ed in minor tempo ● Costruire del software che sia riusabile. ● Evitare scelte che compromettano il suo riutilizzo. ● Migliorare la documentazione e la manutenzione di sistemi esistenti. Non re-inventiamo la ruota ogni volta! www.javaportal.it | www.k-tech.it corsi@k-tech.it 13
  • 14.
    Il Catalogo deiDesign Pattern GoF Il libro della GoF classifica 23 Design Pattern e li suddivide in 3 categorie: ● Creational (Pattern Creazionali) ●Trattano l’inizializzazione e la configurazione di classi ed oggetti. ● Structural (Pattern Strutturali) Trattano il disaccoppiamento tra interfacce ed implementazioni delle ● classi, degli oggetti e della loro composizione. ● Behavioral (Pattern Comportamentali) ● Trattano le interazioni dinamiche tra gruppi di classi ed oggetti. ● Alcuni pattern sono utilizzati insieme. ● Alcuni sono alternativi di altri. ● Altri sono simili ma hanno intenti differenti. www.javaportal.it | www.k-tech.it corsi@k-tech.it 14
  • 15.
    Classificazione dei DesignPattern DESIGN PATTERN CREAZIONALI STRUTTURALI COMPORTAMENTALI FACTORY ADAPTER FLYWEIGHT INTERPRETER METHOD ABSTRACT TEMPLATE BRIDGE PROXY FACTORY METHOD CHAIN OF BUILDER COMPOSITE FACADE RESPONSABIL. STATE PROTOTYPE DECORATOR COMMAND OBSERVER SINGLETON ITERATOR MEMENTO MEDIATOR www.javaportal.it | www.k-tech.it corsi@k-tech.it 15
  • 16.
    Design Pattern Creazionali ● Permettono di astrarre il processo di creazione degli oggetti. ● Rendono un sistema indipendente da come i suoi oggetti sono creati,composti, e rappresentati. ● Incapsulano conoscenza sulle classi concrete che un sistema usa. ● Nascondono come le istanze delle classi sono create e composte. www.javaportal.it | www.k-tech.it corsi@k-tech.it 16
  • 17.
    Design Pattern Strutturali ● Sono dedicati alla composizione di classi e oggetti per creare delle strutture più grandi. ● Gli Structual class Pattern utilizzano l'ereditarietà per creare interfacce o implementazioni. ● Gli Structual object Pattern descrivono il modo in cui comporre gli oggetti per realizzare nuove funzionalità. www.javaportal.it | www.k-tech.it corsi@k-tech.it 17
  • 18.
    Design Pattern Comportamentali ● Focalizzano sul controllo del flusso tra oggetti. ● Descrivono le comunicazioni tra oggetti. ● Aiutano a valutare le responsabilità assegnate agli oggetti. ● Suggeriscono modi per incapsulare algoritmi dentro classi. www.javaportal.it | www.k-tech.it corsi@k-tech.it 18
  • 19.
    BREAK Dopo la pausa: Abstract Factory Leggi il programma completo del corso www.javaportal.it | www.k-tech.it corsi@k-tech.it 19