Lezione 11 - Bridge
-
Upload
marco-bianchi -
Category
Education
-
view
1.785 -
download
0
description
Transcript of Lezione 11 - Bridge
Ingegneria del Software
Introduzione al pattern…
Ingegneria del Software - A.A. 2003/2004
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 tipi di sensori
(classi di accesso)Gerarchia
“Astrazione” dei tipi di sensori
(classi di accesso)Gerarchia
Cosa accade se ci sono più fornitori di sensori?Cosa accade se ci sono più fornitori di sensori?
La soluzione presenta due problemi:- le classi di accesso non sono riutilizzate- non nasconde le differenze tra i sensori di diversi produttori
La soluzione presenta due problemi:- le classi di accesso non sono riutilizzate- non nasconde le differenze tra i sensori di diversi produttori
Ingegneria del Software - A.A. 2003/2004
Problema introduttivo (3/4)
uses
uses
uses
La soluzione presenta un problema:Le classi di accesso dipendono dalle classi di implementazione
La soluzione presenta un problema:Le classi di accesso dipendono 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 parallela di interfacce che permettono alle permettono alle classi di accesso di rimanere indipendenti
dalle classi di implementazione dei vari fornitori
Gerarchia parallela di interfacce che permettono alle permettono alle classi di accesso di rimanere indipendenti
dalle classi di implementazione dei vari fornitori
Gerarchia delle classi di accesso ai sensori indipendente dalle classi di implementazione dei vari fornitori
Gerarchia delle classi di accesso ai sensori indipendente dalle classi di implementazione dei vari fornitori
Gerarchia parallela di classi che implementano l’accesso ai sensori dei vari fornitori
Gerarchia parallela di classi che implementano l’accesso ai sensori dei vari fornitori
Ingegneria del Software - A.A. 2003/2004
Ingegneria del Software - A.A. 2003/2004
Presentazione del pattern Bridge
Ingegneria del Software - A.A. 2003/2004
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 dovermodificare le classi che usano l’astrazione
- riusare la logica comune a differenti implementazioni diun’astrazione
- creare una nuova implementazione di un’astrazione senza doverri-implementare la logica comune delle astrazioni
- estendere la logica comune di un’astrazione scrivendo una nuovaclasse anziché riscrivere una nuova classe per ogni combinazioneastrazione-implementazione
interfacce e implementazioni
Es. i sensori condividano il range di valori delle misurazioni
Es. aggiunta nuova famiglia di sensori
Cfr. approccio al pattern del GoF
Ingegneria del Software - A.A. 2003/2004
Il pattern Bridge (3/11)
• Solution - Gli attori del pattern Bridge:
– Abstraction - SpecializedAbstraction
– AbstractionImpl
– SpecializedAbstractionImpl
– Impl1, Impl2
– SpecializedImpl1, SpecializedImpl2
Da Context aSolution…
Mantiene il riferimento ad un oggetto che implementa
AstractionImpl
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 fornisconoun’implementazione
- Tale indipendenza può essere utile per aggiungere omodificare le classi di una gerarchia senza dovernecessariamente riportare i cambiamenti nell’altra
- I client delle classi astrazione non hanno alcuna conoscenzariguardo le classi di implementazione. Gli oggetti astrazionepossono quindi cambiare le implementazioni senzaripercussioni nei confronti dei client.
Ingegneria del Software - A.A. 2003/2004
Il pattern Bridge (5/11)
• Implementation
- Come creare gli oggetti di implementazione per leastrazioni?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.awtComponent
TextFieldButton
Abstract
…
• Java API usage
java.awt.Toolkit
Abstract
Gioca il ruolo di Abstract Factory
per creare oggettispecializzati per
la piattaforma in uso
java.awt.peerComponentPeer
TextFieldPeerButtonPeer
Interface
…Interface Interface
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 {
private SimpleSensorImpl impl;
SimpleSensor(SimpleSensorImpl impl) {this.impl = impl;
}
protected SimpleSensorImpl getImpl() {return impl;
}
public int getValue() throws SensorException {return impl.getValue();
}}
SimpleSensor
This constructor is intended to be called by a factorymethod object that is in the same package as this
class and the classes that implement its operations.
This constructor is intended to be called by a factorymethod object that is in the same package as this
class and the classes that implement its operations.
Ingegneria del Software - A.A. 2003/2004
Il pattern Bridge (8/11)
/*** All objects that implement operations for SimpleSensor objects* must implement this interface.*/
interface SimpleSensorImpl {public int getValue() throws SensorException;
}
/*** This class implements SimpleSensor operations for sensors made by Eagle. */class EagleSimpleSensor implements SimpleSensorImpl {
public int getValue() throws SensorException {int value;//...return value;
} }
SimpleSensorImpl
EagleSimpleSensor
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);
}
public void startAverage() throws SensorException {((AveragingSensorImpl) getImpl()).beginAverage();
}}
AveragingSensor
This constructor is intended to be called by a factorymethod object that is in the same package as this
class and the classes that implement its operations.
This constructor is intended to be called by a factorymethod object that is in the same package as this
class and the classes that implement its operations.
The impl object, an AvaragingSensorImpl object, is stored as SimpleSensor by the super class constructor.
The impl object, an AvaragingSensorImpl object, is 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 {
//...}
}
AveragingSensorImpl
EagleAveragingSensor
Ingegneria del Software - A.A. 2003/2004
Il pattern Bridge (11/11)
• Related Patterns
Abstract Factory/ToolkitIl 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?