SlideShare ist ein Scribd-Unternehmen logo
1 von 23
Downloaden Sie, um offline zu lesen
Ingegneria del Software
Introduzione al pattern…
Problema introduttivo (1/4)


• Bisogna sviluppare le classi Java che forniscono l’accesso ai
  sensori di un’applicazione di controllo.

• Tutti i sensori eseguono una misurazione fisica e producono
  un valore numerico.

• I sensori sono classificati in funzione del tipo di misurazione
  che producono, ovvero un:
   – valore relativo ad determinato istante di tempo
   – valore relativo alle misurazioni eseguite per un determinato
     intervallo di tempo
   – flusso di misurazioni




                     Ingegneria del Software - A.A. 2003/2004
Problema introduttivo (2/4)

                                                         “Astrazione” dei
                                                          “Astrazione” dei
                                                           tipi di sensori
                                                            tipi di sensori
                                                        (classi di accesso)
                                                         (classi di accesso)
                                                              Gerarchia
                                                              Gerarchia


     Cosa accade se ci sono più fornitori di sensori?
     Cosa accade se ci sono più fornitori di sensori?




La soluzione presenta due problemi:
 La soluzione presenta due problemi:
--le classi di accesso non sono riutilizzate
   le classi di accesso non sono riutilizzate
--non nasconde le differenze tra iisensori di diversi produttori
   non nasconde le differenze tra sensori di diversi produttori
                    Ingegneria del Software - A.A. 2003/2004
Problema introduttivo (3/4)


                             uses




                                                 uses
            uses




La soluzione presenta un problema:
La soluzione presenta un problema:
   Le classi di accesso dipendono
   Le classi di accesso dipendono
  dalle classi di implementazione
   dalle classi di implementazione

      Ingegneria del Software - A.A. 2003/2004
Problema introduttivo (4/4)

                uses




                                     uses
  uses




     Ingegneria del Software - A.A. 2003/2004
Soluzione al problema introduttivo




        Ingegneria del Software - A.A. 2003/2004
Gerarchia delle classi di accesso ai sensori indipendente
 Gerarchia delle classi di accesso ai sensori indipendente
    dalle classi di implementazione dei vari fornitori
     dalle classi di implementazione dei vari fornitori




     Gerarchia parallela di classi che implementano
     Gerarchia parallela di classi che implementano
          l’accesso ai sensori dei vari fornitori
           l’accesso ai sensori dei vari fornitori

  Gerarchia parallela di interfacce che permettono alle
   Gerarchia parallela di interfacce che permettono alle
permettono alle classi di accesso di rimanere indipendenti
permettono alle classi di accesso di rimanere indipendenti
    dalle classi di implementazione dei vari fornitori
     dalle classi di implementazione dei vari fornitori


                 Ingegneria del Software - A.A. 2003/2004
Ingegneria del Software - A.A. 2003/2004
Ingegneria del Software - A.A. 2003/2004
Presentazione del pattern
         Bridge
Il pattern Bridge (1/11)


•   Nome       Bridge [GoF95]

•   Synopsis   E’ utile quando si ha una gerarchia di astrazioni e
               una corrispondente gerarchia di implementazioni.
               Il pattern Bridge permette di implementare le
               astrazioni e le implementazioni come classi
               indipendenti che possono essere combinate
               dinamicamente

•   Context    Cfr. esempio introduttivo




                     Ingegneria del Software - A.A. 2003/2004
Il pattern Bridge (2/11)


•   Force         Quando si vuole:

    - cambiare l’implementazione usata per un’astrazione senza dover
      modificare le classi che usano l’astrazione interfacce e implementazioni

    - riusare la logica comune a differenti implementazioni di
      un’astrazione Es. i sensori condividano il range di valori delle misurazioni

    - creare una nuova implementazione di un’astrazione senza dover
      ri-implementare la logica comune delle astrazioni
                                               Es. aggiunta nuova famiglia di sensori
    - estendere la logica comune di un’astrazione scrivendo una nuova
      classe anziché riscrivere una nuova classe per ogni combinazione
      astrazione-implementazione
                                                        Cfr. approccio al pattern del GoF



                         Ingegneria del Software - A.A. 2003/2004
Il pattern Bridge (3/11)

      Da Context a
      Solution…

                     Mantiene il riferimento ad un
                       oggetto che implementa
                            AstractionImpl




• Solution - Gli attori del pattern Bridge:
– Abstraction    - SpecializedAbstraction
– AbstractionImpl
– SpecializedAbstractionImpl
– Impl1, Impl2
– SpecializedImpl1, SpecializedImpl2
                           Ingegneria del Software - A.A. 2003/2004
Il pattern Bridge (4/11)


•   Consequences

    - Il pattern Bridge tiene le classi che rappresentano un’
      astrazione indipendenti dalle classi che ne forniscono
      un’implementazione

    - Tale indipendenza può essere utile per aggiungere o
      modificare le classi di una gerarchia senza dover
      necessariamente riportare i cambiamenti nell’altra

    - I client delle classi astrazione non hanno alcuna conoscenza
      riguardo le classi di implementazione. Gli oggetti astrazione
      possono quindi cambiare le implementazioni senza
      ripercussioni nei confronti dei client.



                      Ingegneria del Software - A.A. 2003/2004
Il pattern Bridge (5/11)


•   Implementation

    - Come creare gli oggetti di implementazione per le
      astrazioni?
      Delegare la creazione ad un Abstract Factory preserva
      l’indipendenza tra le gerarchie

    - Un oggetto astrazione userà lo stesso oggetto
      implementazione durante il suo ciclo di vita?
      Se no, è possibile aggiungere e isolare la logica che regola il
      cambiamento degli oggetti implementazione usando il
      pattern Decorator




                      Ingegneria del Software - A.A. 2003/2004
Il pattern Bridge (6/11)



•    Java API usage                                  Abstract
                                                                                    java.awt
                                                   Component



                                    Button             …           TextField
          Abstract

    java.awt.Toolkit


                                                       Interface
                                                                                  java.awt.peer
                                                   ComponentPeer
       Gioca il ruolo di
       Abstract Factory
      per creare oggetti
       specializzati per
    la piattaforma in uso              Interface                      Interface
                                     ButtonPeer            …       TextFieldPeer




                              Ingegneria del Software - A.A. 2003/2004
Il pattern Bridge (7/11)

•   Code example
    /** Instances of this class are used to represent all kinds of sensors. Instances of subclasses *
    of this class represent specialized kinds of sensors. */
    public class SimpleSensor
                  SimpleSensor            {

          private SimpleSensorImpl impl;

          SimpleSensor(SimpleSensorImpl impl) {
                 this.impl = impl; This constructor is intended to be called by aafactory
                                    This constructor is intended to be called by factory
          }                        method object that is in the same package as this
                                    method object that is in the same package as this
                                              class and the classes that implement its operations.
                                               class and the classes that implement its operations.
          protected SimpleSensorImpl getImpl() {
                  return impl;
          }

          public int getValue() throws SensorException {
                   return impl.getValue();
          }
    }
                                 Ingegneria del Software - A.A. 2003/2004
Il pattern Bridge (8/11)

/**
* All objects that implement operations for SimpleSensor objects
* must implement this interface.
*/
           SimpleSensorImpl
interface SimpleSensorImpl {
      public int getValue() throws SensorException;
}

/**
* This class implements SimpleSensor operations for sensors made by Eagle.
*/
class EagleSimpleSensor
       EagleSimpleSensor implements SimpleSensorImpl {
      public int getValue() throws SensorException {
                int value;
                //...
                return value;
      }
}
                      Ingegneria del Software - A.A. 2003/2004
Il pattern Bridge (9/11)

/**
* Instances of this class are used to represent sensors that produce
* values that are the average of measurements made over a period
* of time.
*/
public class AveragingSensor extends SimpleSensor {

     AveragingSensor(AveragingSensorImpl impl) {
            super (impl); This constructor is intended to be called by a factory
                           This constructor is intended to be called by a factory
     }                    method object that is in the same package as this
                           method object that is in the same package as this
                                 class and the classes that implement its operations.
                                  class and the classes that implement its operations.
     public void startAverage() throws SensorException {
             ((AveragingSensorImpl) getImpl()).beginAverage();
     }                   The impl object, an AvaragingSensorImpl object, is
                               The impl object, an AvaragingSensorImpl object, is
}                             stored as SimpleSensor by the super class constructor.
                               stored as SimpleSensor by the super class constructor.



                      Ingegneria del Software - A.A. 2003/2004
Il pattern Bridge (10/11)

/**
* All objects that implement operations for AveragingSensor
* objects must implement this interface.
*/
interface AveragingSensorImpl extends SimpleSensorImpl {
      public void beginAverage() throws SensorException;
}

/**
* This class impelments AveragingSensor operations for sensors made by Eagle.
*/
class EagleAveragingSensor extends EagleSimpleSensor
                              implements AveragingSensorImpl {
      public void beginAverage() throws SensorException {
               //...
      }
}

                       Ingegneria del Software - A.A. 2003/2004
Il pattern Bridge (11/11)



•   Related Patterns

    Abstract Factory/Toolkit
        Il pattern Abstract Factory può essere usato dal pattern
        Bridge per decidere quale famiglia di classi
        implementative associare agli oggetti dell’astrazione




                       Ingegneria del Software - A.A. 2003/2004
Domande?




Ingegneria del Software - A.A. 2003/2004

Weitere ähnliche Inhalte

Was ist angesagt?

Design Pattern Comportamentali
Design Pattern ComportamentaliDesign Pattern Comportamentali
Design Pattern ComportamentaliRiccardo Cardin
 
Lezione 08 - Iterator
Lezione 08 - IteratorLezione 08 - Iterator
Lezione 08 - IteratorMarco Bianchi
 
Design Pattern Strutturali
Design Pattern StrutturaliDesign Pattern Strutturali
Design Pattern StrutturaliRiccardo Cardin
 
Design Pattern Creazionali
Design Pattern CreazionaliDesign Pattern Creazionali
Design Pattern CreazionaliRiccardo Cardin
 
Webbit 2004: Aspectj
Webbit 2004: AspectjWebbit 2004: Aspectj
Webbit 2004: AspectjMatteo Baccan
 
Webbit 2004: Tiger, java
Webbit 2004: Tiger, javaWebbit 2004: Tiger, java
Webbit 2004: Tiger, javaMatteo Baccan
 
Corso Iphone in 48h
Corso Iphone in 48hCorso Iphone in 48h
Corso Iphone in 48hFLT.lab
 

Was ist angesagt? (8)

Corso java base
Corso java baseCorso java base
Corso java base
 
Design Pattern Comportamentali
Design Pattern ComportamentaliDesign Pattern Comportamentali
Design Pattern Comportamentali
 
Lezione 08 - Iterator
Lezione 08 - IteratorLezione 08 - Iterator
Lezione 08 - Iterator
 
Design Pattern Strutturali
Design Pattern StrutturaliDesign Pattern Strutturali
Design Pattern Strutturali
 
Design Pattern Creazionali
Design Pattern CreazionaliDesign Pattern Creazionali
Design Pattern Creazionali
 
Webbit 2004: Aspectj
Webbit 2004: AspectjWebbit 2004: Aspectj
Webbit 2004: Aspectj
 
Webbit 2004: Tiger, java
Webbit 2004: Tiger, javaWebbit 2004: Tiger, java
Webbit 2004: Tiger, java
 
Corso Iphone in 48h
Corso Iphone in 48hCorso Iphone in 48h
Corso Iphone in 48h
 

Andere mochten auch

SOLID & IoC Principles
SOLID & IoC PrinciplesSOLID & IoC Principles
SOLID & IoC PrinciplesPavlo Hodysh
 
Join us to development New Career Future
Join us to development New Career FutureJoin us to development New Career Future
Join us to development New Career Futurewilliamxue
 
Lezione 13 - Strategy
Lezione 13 - StrategyLezione 13 - Strategy
Lezione 13 - StrategyMarco Bianchi
 
Lezione 04 - Factory method
Lezione 04 - Factory methodLezione 04 - Factory method
Lezione 04 - Factory methodMarco Bianchi
 
Ci 102 Kelsy Sadler
Ci 102 Kelsy SadlerCi 102 Kelsy Sadler
Ci 102 Kelsy Sadlersadler14
 

Andere mochten auch (6)

SOLID & IoC Principles
SOLID & IoC PrinciplesSOLID & IoC Principles
SOLID & IoC Principles
 
Contentmarketing
ContentmarketingContentmarketing
Contentmarketing
 
Join us to development New Career Future
Join us to development New Career FutureJoin us to development New Career Future
Join us to development New Career Future
 
Lezione 13 - Strategy
Lezione 13 - StrategyLezione 13 - Strategy
Lezione 13 - Strategy
 
Lezione 04 - Factory method
Lezione 04 - Factory methodLezione 04 - Factory method
Lezione 04 - Factory method
 
Ci 102 Kelsy Sadler
Ci 102 Kelsy SadlerCi 102 Kelsy Sadler
Ci 102 Kelsy Sadler
 

Ähnlich wie Lezione 11 - Bridge

Lezione 02 - Delegation
Lezione 02 - DelegationLezione 02 - Delegation
Lezione 02 - DelegationMarco Bianchi
 
Sistemi Context-aware: Esercitazione 3
Sistemi Context-aware: Esercitazione 3Sistemi Context-aware: Esercitazione 3
Sistemi Context-aware: Esercitazione 3Marco Loregian
 
Lezione 03 - Interface
Lezione 03 - InterfaceLezione 03 - Interface
Lezione 03 - InterfaceMarco Bianchi
 
Lezione design patterns 2011 (Peron)
Lezione design patterns 2011 (Peron)Lezione design patterns 2011 (Peron)
Lezione design patterns 2011 (Peron)lukebonham
 
Lezione 06 - Façade
Lezione 06 - FaçadeLezione 06 - Façade
Lezione 06 - FaçadeMarco Bianchi
 
Lezione 07 - Decorator
Lezione 07 - DecoratorLezione 07 - Decorator
Lezione 07 - DecoratorMarco Bianchi
 
Progetto SOD Davide Sito
Progetto SOD Davide SitoProgetto SOD Davide Sito
Progetto SOD Davide SitoDavide Sito
 
Acadevmy - Angular Overview
Acadevmy - Angular OverviewAcadevmy - Angular Overview
Acadevmy - Angular OverviewFrancesco Sciuti
 
Qualità del Software
Qualità del SoftwareQualità del Software
Qualità del SoftwareYeser Rema
 
Aspect Oriented Programming
Aspect Oriented ProgrammingAspect Oriented Programming
Aspect Oriented ProgrammingAndrea Bozzoni
 
Real Spring Aop Recipes For Your Everyday Job
Real Spring Aop Recipes For Your Everyday JobReal Spring Aop Recipes For Your Everyday Job
Real Spring Aop Recipes For Your Everyday JobMassimiliano Dessì
 
Dependency injection: the good parts
Dependency injection:  the good partsDependency injection:  the good parts
Dependency injection: the good partsMassimo Groppelli
 
Simulatore Grafico Per Reti Ottiche A Pacchetto
Simulatore Grafico Per Reti Ottiche A PacchettoSimulatore Grafico Per Reti Ottiche A Pacchetto
Simulatore Grafico Per Reti Ottiche A PacchettoFedele Mantuano
 
Implementazione in Java di plugin Maven per algoritmi di addestramento per re...
Implementazione in Java di plugin Maven per algoritmi di addestramento per re...Implementazione in Java di plugin Maven per algoritmi di addestramento per re...
Implementazione in Java di plugin Maven per algoritmi di addestramento per re...Francesco Komauli
 
Spring Framework
Spring FrameworkSpring Framework
Spring FrameworkNaLUG
 
Sviluppo di una piattaforma CLIENT/SERVER per attività didattiche basate su AR
Sviluppo di una piattaforma CLIENT/SERVER per attività didattiche basate su ARSviluppo di una piattaforma CLIENT/SERVER per attività didattiche basate su AR
Sviluppo di una piattaforma CLIENT/SERVER per attività didattiche basate su ARGiacomo Giovanni Delfini
 
Sviluppo di una piattaforma Client/Server per attività didattiche basate su R...
Sviluppo di una piattaforma Client/Server per attività didattiche basate su R...Sviluppo di una piattaforma Client/Server per attività didattiche basate su R...
Sviluppo di una piattaforma Client/Server per attività didattiche basate su R...Giacomo Delfini
 

Ähnlich wie Lezione 11 - Bridge (20)

Lezione 02 - Delegation
Lezione 02 - DelegationLezione 02 - Delegation
Lezione 02 - Delegation
 
Sistemi Context-aware: Esercitazione 3
Sistemi Context-aware: Esercitazione 3Sistemi Context-aware: Esercitazione 3
Sistemi Context-aware: Esercitazione 3
 
Lezione 03 - Interface
Lezione 03 - InterfaceLezione 03 - Interface
Lezione 03 - Interface
 
Lezione design patterns 2011 (Peron)
Lezione design patterns 2011 (Peron)Lezione design patterns 2011 (Peron)
Lezione design patterns 2011 (Peron)
 
Lezione 06 - Façade
Lezione 06 - FaçadeLezione 06 - Façade
Lezione 06 - Façade
 
Lezione 07 - Decorator
Lezione 07 - DecoratorLezione 07 - Decorator
Lezione 07 - Decorator
 
Progetto SOD Davide Sito
Progetto SOD Davide SitoProgetto SOD Davide Sito
Progetto SOD Davide Sito
 
Acadevmy - Angular Overview
Acadevmy - Angular OverviewAcadevmy - Angular Overview
Acadevmy - Angular Overview
 
Qualità del Software
Qualità del SoftwareQualità del Software
Qualità del Software
 
Aspect Oriented Programming
Aspect Oriented ProgrammingAspect Oriented Programming
Aspect Oriented Programming
 
Real Spring Aop Recipes For Your Everyday Job
Real Spring Aop Recipes For Your Everyday JobReal Spring Aop Recipes For Your Everyday Job
Real Spring Aop Recipes For Your Everyday Job
 
Java AWT
Java AWTJava AWT
Java AWT
 
Dependency injection: the good parts
Dependency injection:  the good partsDependency injection:  the good parts
Dependency injection: the good parts
 
Simulatore Grafico Per Reti Ottiche A Pacchetto
Simulatore Grafico Per Reti Ottiche A PacchettoSimulatore Grafico Per Reti Ottiche A Pacchetto
Simulatore Grafico Per Reti Ottiche A Pacchetto
 
Implementazione in Java di plugin Maven per algoritmi di addestramento per re...
Implementazione in Java di plugin Maven per algoritmi di addestramento per re...Implementazione in Java di plugin Maven per algoritmi di addestramento per re...
Implementazione in Java di plugin Maven per algoritmi di addestramento per re...
 
Spring Framework
Spring FrameworkSpring Framework
Spring Framework
 
C# Language Evolution
C# Language EvolutionC# Language Evolution
C# Language Evolution
 
Corso Java
Corso JavaCorso Java
Corso Java
 
Sviluppo di una piattaforma CLIENT/SERVER per attività didattiche basate su AR
Sviluppo di una piattaforma CLIENT/SERVER per attività didattiche basate su ARSviluppo di una piattaforma CLIENT/SERVER per attività didattiche basate su AR
Sviluppo di una piattaforma CLIENT/SERVER per attività didattiche basate su AR
 
Sviluppo di una piattaforma Client/Server per attività didattiche basate su R...
Sviluppo di una piattaforma Client/Server per attività didattiche basate su R...Sviluppo di una piattaforma Client/Server per attività didattiche basate su R...
Sviluppo di una piattaforma Client/Server per attività didattiche basate su R...
 

Kürzlich hochgeladen

biblioverifica ijf24 Festival Internazionale del Giornalismo 2024
biblioverifica ijf24 Festival Internazionale del Giornalismo 2024biblioverifica ijf24 Festival Internazionale del Giornalismo 2024
biblioverifica ijf24 Festival Internazionale del Giornalismo 2024Damiano Orru
 
Terza cultura w la scienza Italo Calvino.pdf
Terza cultura w la scienza Italo Calvino.pdfTerza cultura w la scienza Italo Calvino.pdf
Terza cultura w la scienza Italo Calvino.pdfPierLuigi Albini
 
Storia dell’Inghilterra nell’Età Moderna.pptx
Storia dell’Inghilterra nell’Età Moderna.pptxStoria dell’Inghilterra nell’Età Moderna.pptx
Storia dell’Inghilterra nell’Età Moderna.pptxOrianaOcchino
 
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla CresimaIL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla CresimaRafael Figueredo
 
Esame finale - riunione genitori 2024.pptx
Esame finale - riunione genitori 2024.pptxEsame finale - riunione genitori 2024.pptx
Esame finale - riunione genitori 2024.pptxfedericodellacosta2
 
Ticonzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza culturaTiconzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza culturaPierLuigi Albini
 
La produzione e la gestione degli Open Data
La produzione e la gestione degli Open DataLa produzione e la gestione degli Open Data
La produzione e la gestione degli Open DataGianluigi Cogo
 
La seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medieLa seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medieVincenzoPantalena1
 

Kürzlich hochgeladen (8)

biblioverifica ijf24 Festival Internazionale del Giornalismo 2024
biblioverifica ijf24 Festival Internazionale del Giornalismo 2024biblioverifica ijf24 Festival Internazionale del Giornalismo 2024
biblioverifica ijf24 Festival Internazionale del Giornalismo 2024
 
Terza cultura w la scienza Italo Calvino.pdf
Terza cultura w la scienza Italo Calvino.pdfTerza cultura w la scienza Italo Calvino.pdf
Terza cultura w la scienza Italo Calvino.pdf
 
Storia dell’Inghilterra nell’Età Moderna.pptx
Storia dell’Inghilterra nell’Età Moderna.pptxStoria dell’Inghilterra nell’Età Moderna.pptx
Storia dell’Inghilterra nell’Età Moderna.pptx
 
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla CresimaIL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
 
Esame finale - riunione genitori 2024.pptx
Esame finale - riunione genitori 2024.pptxEsame finale - riunione genitori 2024.pptx
Esame finale - riunione genitori 2024.pptx
 
Ticonzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza culturaTiconzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza cultura
 
La produzione e la gestione degli Open Data
La produzione e la gestione degli Open DataLa produzione e la gestione degli Open Data
La produzione e la gestione degli Open Data
 
La seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medieLa seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medie
 

Lezione 11 - Bridge

  • 3. Problema introduttivo (1/4) • Bisogna sviluppare le classi Java che forniscono l’accesso ai sensori di un’applicazione di controllo. • Tutti i sensori eseguono una misurazione fisica e producono un valore numerico. • I sensori sono classificati in funzione del tipo di misurazione che producono, ovvero un: – valore relativo ad determinato istante di tempo – valore relativo alle misurazioni eseguite per un determinato intervallo di tempo – flusso di misurazioni Ingegneria del Software - A.A. 2003/2004
  • 4. Problema introduttivo (2/4) “Astrazione” dei “Astrazione” dei tipi di sensori tipi di sensori (classi di accesso) (classi di accesso) Gerarchia Gerarchia Cosa accade se ci sono più fornitori di sensori? Cosa accade se ci sono più fornitori di sensori? La soluzione presenta due problemi: La soluzione presenta due problemi: --le classi di accesso non sono riutilizzate le classi di accesso non sono riutilizzate --non nasconde le differenze tra iisensori di diversi produttori non nasconde le differenze tra sensori di diversi produttori Ingegneria del Software - A.A. 2003/2004
  • 5. Problema introduttivo (3/4) uses uses uses La soluzione presenta un problema: La soluzione presenta un problema: Le classi di accesso dipendono Le classi di accesso dipendono dalle classi di implementazione dalle classi di implementazione Ingegneria del Software - A.A. 2003/2004
  • 6. Problema introduttivo (4/4) uses uses uses Ingegneria del Software - A.A. 2003/2004
  • 7. Soluzione al problema introduttivo Ingegneria del Software - A.A. 2003/2004
  • 8. Gerarchia delle classi di accesso ai sensori indipendente Gerarchia delle classi di accesso ai sensori indipendente dalle classi di implementazione dei vari fornitori dalle classi di implementazione dei vari fornitori Gerarchia parallela di classi che implementano Gerarchia parallela di classi che implementano l’accesso ai sensori dei vari fornitori l’accesso ai sensori dei vari fornitori Gerarchia parallela di interfacce che permettono alle Gerarchia parallela di interfacce che permettono alle permettono alle classi di accesso di rimanere indipendenti permettono alle classi di accesso di rimanere indipendenti dalle classi di implementazione dei vari fornitori dalle classi di implementazione dei vari fornitori Ingegneria del Software - A.A. 2003/2004
  • 9. Ingegneria del Software - A.A. 2003/2004
  • 10. Ingegneria del Software - A.A. 2003/2004
  • 12. Il pattern Bridge (1/11) • Nome Bridge [GoF95] • Synopsis E’ utile quando si ha una gerarchia di astrazioni e una corrispondente gerarchia di implementazioni. Il pattern Bridge permette di implementare le astrazioni e le implementazioni come classi indipendenti che possono essere combinate dinamicamente • Context Cfr. esempio introduttivo Ingegneria del Software - A.A. 2003/2004
  • 13. Il pattern Bridge (2/11) • Force Quando si vuole: - cambiare l’implementazione usata per un’astrazione senza dover modificare le classi che usano l’astrazione interfacce e implementazioni - riusare la logica comune a differenti implementazioni di un’astrazione Es. i sensori condividano il range di valori delle misurazioni - creare una nuova implementazione di un’astrazione senza dover ri-implementare la logica comune delle astrazioni Es. aggiunta nuova famiglia di sensori - estendere la logica comune di un’astrazione scrivendo una nuova classe anziché riscrivere una nuova classe per ogni combinazione astrazione-implementazione Cfr. approccio al pattern del GoF Ingegneria del Software - A.A. 2003/2004
  • 14. Il pattern Bridge (3/11) Da Context a Solution… Mantiene il riferimento ad un oggetto che implementa AstractionImpl • Solution - Gli attori del pattern Bridge: – Abstraction - SpecializedAbstraction – AbstractionImpl – SpecializedAbstractionImpl – Impl1, Impl2 – SpecializedImpl1, SpecializedImpl2 Ingegneria del Software - A.A. 2003/2004
  • 15. Il pattern Bridge (4/11) • Consequences - Il pattern Bridge tiene le classi che rappresentano un’ astrazione indipendenti dalle classi che ne forniscono un’implementazione - Tale indipendenza può essere utile per aggiungere o modificare le classi di una gerarchia senza dover necessariamente riportare i cambiamenti nell’altra - I client delle classi astrazione non hanno alcuna conoscenza riguardo le classi di implementazione. Gli oggetti astrazione possono quindi cambiare le implementazioni senza ripercussioni nei confronti dei client. Ingegneria del Software - A.A. 2003/2004
  • 16. Il pattern Bridge (5/11) • Implementation - Come creare gli oggetti di implementazione per le astrazioni? Delegare la creazione ad un Abstract Factory preserva l’indipendenza tra le gerarchie - Un oggetto astrazione userà lo stesso oggetto implementazione durante il suo ciclo di vita? Se no, è possibile aggiungere e isolare la logica che regola il cambiamento degli oggetti implementazione usando il pattern Decorator Ingegneria del Software - A.A. 2003/2004
  • 17. Il pattern Bridge (6/11) • Java API usage Abstract java.awt Component Button … TextField Abstract java.awt.Toolkit Interface java.awt.peer ComponentPeer Gioca il ruolo di Abstract Factory per creare oggetti specializzati per la piattaforma in uso Interface Interface ButtonPeer … TextFieldPeer Ingegneria del Software - A.A. 2003/2004
  • 18. Il pattern Bridge (7/11) • Code example /** Instances of this class are used to represent all kinds of sensors. Instances of subclasses * of this class represent specialized kinds of sensors. */ public class SimpleSensor SimpleSensor { private SimpleSensorImpl impl; SimpleSensor(SimpleSensorImpl impl) { this.impl = impl; This constructor is intended to be called by aafactory This constructor is intended to be called by factory } method object that is in the same package as this method object that is in the same package as this class and the classes that implement its operations. class and the classes that implement its operations. protected SimpleSensorImpl getImpl() { return impl; } public int getValue() throws SensorException { return impl.getValue(); } } Ingegneria del Software - A.A. 2003/2004
  • 19. Il pattern Bridge (8/11) /** * All objects that implement operations for SimpleSensor objects * must implement this interface. */ SimpleSensorImpl interface SimpleSensorImpl { public int getValue() throws SensorException; } /** * This class implements SimpleSensor operations for sensors made by Eagle. */ class EagleSimpleSensor EagleSimpleSensor implements SimpleSensorImpl { public int getValue() throws SensorException { int value; //... return value; } } Ingegneria del Software - A.A. 2003/2004
  • 20. Il pattern Bridge (9/11) /** * Instances of this class are used to represent sensors that produce * values that are the average of measurements made over a period * of time. */ public class AveragingSensor extends SimpleSensor { AveragingSensor(AveragingSensorImpl impl) { super (impl); This constructor is intended to be called by a factory This constructor is intended to be called by a factory } method object that is in the same package as this method object that is in the same package as this class and the classes that implement its operations. class and the classes that implement its operations. public void startAverage() throws SensorException { ((AveragingSensorImpl) getImpl()).beginAverage(); } The impl object, an AvaragingSensorImpl object, is The impl object, an AvaragingSensorImpl object, is } stored as SimpleSensor by the super class constructor. stored as SimpleSensor by the super class constructor. Ingegneria del Software - A.A. 2003/2004
  • 21. Il pattern Bridge (10/11) /** * All objects that implement operations for AveragingSensor * objects must implement this interface. */ interface AveragingSensorImpl extends SimpleSensorImpl { public void beginAverage() throws SensorException; } /** * This class impelments AveragingSensor operations for sensors made by Eagle. */ class EagleAveragingSensor extends EagleSimpleSensor implements AveragingSensorImpl { public void beginAverage() throws SensorException { //... } } Ingegneria del Software - A.A. 2003/2004
  • 22. Il pattern Bridge (11/11) • Related Patterns Abstract Factory/Toolkit Il pattern Abstract Factory può essere usato dal pattern Bridge per decidere quale famiglia di classi implementative associare agli oggetti dell’astrazione Ingegneria del Software - A.A. 2003/2004