Lezione 11 - Bridge

23
Ingegneria del Software

description

 

Transcript of Lezione 11 - Bridge

Page 1: Lezione 11 - Bridge

Ingegneria del Software

Page 2: Lezione 11 - Bridge

Introduzione al pattern…

Page 3: Lezione 11 - Bridge

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

Page 4: Lezione 11 - Bridge

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

Page 5: Lezione 11 - Bridge

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

Page 6: Lezione 11 - Bridge

Ingegneria del Software - A.A. 2003/2004

Problema introduttivo (4/4)

uses

uses

uses

Page 7: Lezione 11 - Bridge

Ingegneria del Software - A.A. 2003/2004

Soluzione al problema introduttivo

Page 8: Lezione 11 - Bridge

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

Page 9: Lezione 11 - Bridge

Ingegneria del Software - A.A. 2003/2004

Page 10: Lezione 11 - Bridge

Ingegneria del Software - A.A. 2003/2004

Page 11: Lezione 11 - Bridge

Presentazione del pattern Bridge

Page 12: Lezione 11 - 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

Page 13: Lezione 11 - Bridge

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

Page 14: Lezione 11 - Bridge

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

Page 15: Lezione 11 - Bridge

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.

Page 16: Lezione 11 - Bridge

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

Page 17: Lezione 11 - Bridge

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

Page 18: Lezione 11 - Bridge

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.

Page 19: Lezione 11 - Bridge

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

Page 20: Lezione 11 - Bridge

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.

Page 21: Lezione 11 - Bridge

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

Page 22: Lezione 11 - Bridge

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

Page 23: Lezione 11 - Bridge

Ingegneria del Software - A.A. 2003/2004

Domande?