Il pattern decorator. L21_DecoratorPattern 1

Documenti analoghi
Design Patterns. Introduzione 2. Introduzione 3

Esercitazione sui Design Pattern. lunedì 29 aprile 13

Unità 2 I file binari

Algoritmi per suddividere il testo in righe in un editor di testo

Sul pattern Decorator

Esonero del corso di Programmazione a Oggetti

Definizione di metodi

Laboratorio di Progettazione di Sistemi Software Design Patterns

Oggetti Composti (1) Oggetti Composti (2)

Oggetti e classi. Cos è un oggetto

Lettura e scrittura - Stream

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

Il linguaggio Java I file sequenziali

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

CLASSI ASTRATTE - ESERCIZIO

IL CONCETTO DI CLASSE

Fondamenti di Informatica C Esercitazioni di Laboratorio / 4 Outline

Programmazione Java: Polimorfismo

Il pattern ABSTRACT FACTORY

Ingegneria del Software

Errata Corrige di Manuale di Java 8

Eccezioni. Comportamento di default (esempio) Propagazione delle eccezioni

Il pattern FACTORY è un pattern di tipo Creazionale secondo la classificazione della GoF I pattern di tipo creazionali si occupano della costruzione

L Abstract Windowing Toolkit. Le GUI in Java. Il Frame. Cenni sull ereditarietà. Gianpaolo Cugola - Sistemi Informativi in Rete

RETI DI CALCOLATORI Linguaggio Java: Eccezioni

Proprietà delle Classi e degli Oggetti in Java

Sockets in Java. Lorenzo Gallucci

Esercitazione sui Design Pattern

Progettazione! Progettazione! Progettazione! Progettazione!

Fondamenti di Informatica T-1. Ereditarietà & Polimorfismo

Ingegneria del Software. Introduzione al pattern

Operazioni di input/output. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni

Marco Faella I pattern Template Method e Factory Method

Architettura Client-Server

Ereditarietà e Polimorfismo

Programmazione Orientata agli Oggetti in Linguaggio Java

Definizione di classi

Classi Wrapper. int Integer float Float char Char byte Byte double Double. classe "wrapper"

Flussi, lettori e scrittori

I Layout Manager di java. Prof. Francesco Accarino IIS Altiero Spinelli via Leopardi 132 Sesto san Giovanni

Programmazione Orientata agli Oggetti

Principi di Progettazione del Software. Principi di Progettazione del Software a.a

Esercitazioni Ingegneria del So2ware 3 - Programmazione Java Excep<ons, I/O

Pattern GOF 2. Laboratorio di Ingegneria del Software. Andrea Bei

Esercitazione n.1 13 Ottobre Obiettivi:

STRINGHE IN JAVA In Java, le stringhe non sono pezzi di memo-ria con dentro dei caratteri, come in C: sono oggetti appartenenti alla classe

Corso di Fondamenti di Informatica I

public BankAccount() { balance = 0; } public BankAccount(double initialbalance) { balance = initialbalance; }

Strumenti per l automazione del testing di applicazioni web Javascript-based

Modificatori di visibilità

Programmazione orientata agli oggetti Classi, package e file system. Package

Modelli di interazione tra processi

Lezione 9 programmazione in Java Classi come contenitori

public double getlato() restituisce la lunghezza del lato del quadrato che esegue il metodo.

Refactoring 5 Sposta Metodo. 5 Sposta Metodo. 5 Sposta Metodo - Codice iniziale

In questa lezione. Polimorfismo

Laboratorio Reti di Calcolatori Laurea Triennale in Comunicazione Digitale. Anno Accademico 2012/2013

Programmazione orientata agli oggetti

ELEMENTI DI PROGETTAZIONE SOFTWARE

Il codice generato automaticamente da NetBeans

789:;<:' .&+/"0&12%34%5&66+,("%3787%% %"+&%88$77%9%8:$:7%% ;<'&12%8%=,+>"%3787 % % % %"+&%88$77%9%8:$:7%

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

Input/Output in Java

Esempio Principio di sostituibilità

Linguaggi ad oggetti (object oriented) LINGUAGGI DI PROGRAMMAZIONE: PARADIGMI DI PROGRAMMAZIONE. Programmazione ad oggetti

Compute engine generici in RMI

Grafica swing in Java

Cifratura simmetrica

Subtype Polymorphism. Conversioni di tipo. Conversioni di tipo. Subtyping. Conversioni di tipo. Interfacce e subtype polimorfismo

Corso sul linguaggio Java

Programmazione a oggetti e JAVA. Prof. B.Buttarazzi A.A. 2011/2012

DESIGN PATTERN STRUTTURALI INGEGNERIA DEL SOFTWARE INTRODUZIONE ADAPTER. Scopo Convertire l interfaccia di una classe in un altra.

RETI DI CALCOLATORI Linguaggio Java: Il Package di Input Output

Corso di Reti di Calcolatori L-A

Lezione 5: Socket SSL/ TLS. Corso di Programmazione in Rete Laurea Magistrale in Ing. Informatica Università degli Studi di Salerno

Fondamenti di Informatica T-1. Costruttori Ereditarietà

L input da tastiera in Java. Dott. Ing. M. Banci, PhD

Problema: un astrazione può avere una implementazione tra tante diverse fra loro

Introduzione. Java. Streams. Streams

Esercizi della lezione 5 di Java

LPR A 2005/2006 Lezione 4

Esercitazione n 1. Obiettivi

Il Pattern PROXY. Ex presentazione realizzata dallo studente Paolo Melchiori (matricola 65734) nell a.a

Istallazione di Java - Uso delle librerie

LEZIONE 10 - Design Patterns

Università degli Studi di Modena e Reggio Emilia. Facoltà di Ingegneria Reggio Emilia CORSO DI TECNOLOGIE E APPLICAZIONI WEB. Http con java, URL

Eredità e Polimorfismo in Java

Programmazione ad Oggetti

Gerarchia di classi Java 1

Modelli di interazione tra processi

Esercizio 3. Oppure fare queste operazioni nel metodo main all interno della classe Persona.

PROGRAMMAZIONE AVANZATA JAVA E C

Prof. D. Malerba Dr. A. Appice - Dr. M.Ceci. Il sistema Input/Output di Java

Corso sul linguaggio Java

20 - Input/Output su File

INFORMATICA GRAFICA - FONDAMENTI DI INFORMATICA Ing. Civile - Edile/Architettura Dott. Penzo SOLUZIONE PROVA SCRITTA DEL 16/09/2002.

Marco Faella Elementi di programmazione di interfacce Grafiche. Il pattern OBSERVER.

Programmazione ad Oggetti

Antonio Cianfrani. Dynamic Host Configuration Protocol (DHCP)

Laboratorio di Programmazione 1 [Java]

Transcript:

Il pattern decorator L21_DecoratorPattern 1

Il pattern decorator Problema affrontato: aggiungere comportamenti e caratteristiche dinamicamente ad una classe, in maniera alternativa all'ereditarietà, non attraverso interfacce, ma privilegiando la composizione. Es. Aggiungere bordi ad una finestra L21_DecoratorPattern 2

L21_DecoratorPattern 3

L21_DecoratorPattern 4

Applicabilità Usare il pattern decorator per aggiungere funzionalità agli oggetti quando l'utilizzo di interfacce o l'ereditarietà sono strade poco praticabili L21_DecoratorPattern 5

Struttura L21_DecoratorPattern 6

Esempio: scroll bar Supponiamo di avere un componente grafico "Text" cui è possibile associare un bordo semplice o 3D, ed una scroll bar verticla o orizzontale. Rappresentare tutte le combinazioni con sotto classi di TextView porta ad una moltiplicazione di classe L21_DecoratorPattern 7

Text View <- TextViewSimpleBorder TextViewSimpleBorderLeftScrollBar TextViewSimpleBorderRightScrollBar TextView3DBorder TextView3DBorderLeftScrollBar TextView3DBorderRightScrollBar Eccetera L21_DecoratorPattern 8

In questo modo, oltre ad avere una esplosione di sottoclassi, il client deve stabilire "staticamente" quale sottoclasse istanziare e non puo' certo "decorare" dinamicamente il componente L21_DecoratorPattern 9

Possibile uso del pattern Strategy public class TextView extends Component { public void draw() { // Code to draw the TextView object itself. L21_DecoratorPattern 10

Se si usa una interfaccia componet ed una superclasse Decorator, si puo' usare il pattern strategy per delegare ai componenti il meccanismo di disegno L21_DecoratorPattern 11

public class TextView extends Component { private Border border; private Scrollbar sb; public TextView(Border border, Scrollbar sb) { this.border = border; this.sb = sb; public void draw() { border.draw(); sb.draw(); // Code to draw the TextView object itself. L21_DecoratorPattern 12

Manca pero' ancora la possibilità di cambiare dinamicamente le decorazioni, ed il Text View ancora deve conoscere i suoi componenti L21_DecoratorPattern 13

Usare la composizione-> decorator pattern public class TextView extends Component { public void draw() { // Code to draw the TextView object itself. L21_DecoratorPattern 14

Adesso sono i Decorator a conoscere in cascata i vari "componenti" public class FancyBorder extends Decorator { private Component component; public FancyBorder(Component component) { this.component = component; public void draw() { component.draw(); // Code to draw the FancyBorder object itself. Uso aggiunta dei co0mponenti dinamici public class Client { public static void main(string[] args) { TextView data = new TextView(); Component borderdata = new FancyBorder(data); Component scrolleddata = new VertScrollbar(data); Component borderandscrolleddata = new HorzScrollbar(borderData); L21_DecoratorPattern 15

Uso pattern decorator I/O Un uso tipico del pattern decorator è quello relativo alle classi I/O di Java Le classi fondamentali per l'i/o sono: InputStream, OutputStream, Reader e Writer E' possibile aggiungere altre funzionalità attraverso delle classi "filter" che sono applicazioni del pattern decorator DataStream -> funzioni su tipi primitivi BufferedStream -> consente l'utilizzo di un buffer PushBackStream -> permette le operazioni "UNDO" L21_DecoratorPattern 16

public class JavaIO { public static void main(string[] args) { // Open an InputStream. FileInputStream in = new FileInputStream("test.dat"); // Create a buffered InputStream. BufferedInputStream bin = new BufferedInputStream(in); // Create a buffered, data InputStream. DataInputStream dbin = new DataInputStream(bin); // Create an unbuffered, data InputStream. DataInputStream din = new DataInputStream(in); // Create a buffered, pushback, data InputStream. PushbackInputStream pbdbin = new PushbackInputStream(dbin); L21_DecoratorPattern 17