Ingegneria del Software
Introduzione al pattern…
Problema introduttivo (1/4)


• Bisogna sviluppare le classi Java che forniscono l’accesso ai
  sensori di un’applicazione...
Problema introduttivo (2/4)

                                                         “Astrazione” dei
                   ...
Problema introduttivo (3/4)


                             uses




                                                 uses
...
Problema introduttivo (4/4)

                uses




                                     uses
  uses




     Ingegneria...
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
    d...
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...
Il pattern Bridge (2/11)


•   Force         Quando si vuole:

    - cambiare l’implementazione usata per un’astrazione se...
Il pattern Bridge (3/11)

      Da Context a
      Solution…

                     Mantiene il riferimento ad un
         ...
Il pattern Bridge (4/11)


•   Consequences

    - Il pattern Bridge tiene le classi che rappresentano un’
      astrazion...
Il pattern Bridge (5/11)


•   Implementation

    - Come creare gli oggetti di implementazione per le
      astrazioni?
 ...
Il pattern Bridge (6/11)



•    Java API usage                                  Abstract
                                ...
Il pattern Bridge (7/11)

•   Code example
    /** Instances of this class are used to represent all kinds of sensors. Ins...
Il pattern Bridge (8/11)

/**
* All objects that implement operations for SimpleSensor objects
* must implement this inter...
Il pattern Bridge (9/11)

/**
* Instances of this class are used to represent sensors that produce
* values that are the a...
Il pattern Bridge (10/11)

/**
* All objects that implement operations for AveragingSensor
* objects must implement this i...
Il pattern Bridge (11/11)



•   Related Patterns

    Abstract Factory/Toolkit
        Il pattern Abstract Factory può es...
Domande?




Ingegneria del Software - A.A. 2003/2004
Upcoming SlideShare
Loading in …5
×

Lezione 11 - Bridge

1,330 views
1,265 views

Published on

Published in: Education, Technology, Business
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,330
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
29
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Lezione 11 - Bridge

  1. 1. Ingegneria del Software
  2. 2. Introduzione al pattern…
  3. 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. 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. 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. 6. Problema introduttivo (4/4) uses uses uses Ingegneria del Software - A.A. 2003/2004
  7. 7. Soluzione al problema introduttivo Ingegneria del Software - A.A. 2003/2004
  8. 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. 9. Ingegneria del Software - A.A. 2003/2004
  10. 10. Ingegneria del Software - A.A. 2003/2004
  11. 11. Presentazione del pattern Bridge
  12. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  23. 23. Domande? Ingegneria del Software - A.A. 2003/2004

×