Programmazione Orientata agli Oggetti in Linguaggio Java



Похожие документы
Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

L ambizione dei design pattern (letteralmente schemi di programmazione) è quella di offrire soluzioni a problemi ricorrenti che facilitano lo

Programmazione Orientata agli Oggetti in Linguaggio Java

Design patterns in Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Sommario. Introduzione Architettura Client-Server. Server Web Browser Web. Architettura a Due Livelli Architettura a Tre Livelli

DESIGN PATTERN CREAZIONALI INGEGNERIA DEL SOFTWARE INTRODUZIONE SINGLETON. Scopo dei design pattern creazionali

Tecnologie di Sviluppo per il Web

Programmazione Orientata agli Oggetti in Linguaggio Java

Progettazione! Progettazione! Progettazione! Progettazione!

Progettazione : Design Pattern Creazionali

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Tecnologie di Sviluppo per il Web

Test di unità con JUnit4

Programmazione a Oggetti Lezione 10. Ereditarieta

Programmazione a Oggetti Modulo B

Ingegneria del Software. Introduzione al pattern

Oggetti Lezione 3. aspetti generali e definizione di classi I

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

Concetto di Funzione e Procedura METODI in Java

Modulo 4: Ereditarietà, interfacce e clonazione

UML Diagrammi delle classi. UML Diagramma classi 1

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Realizzazione di una classe con un associazione

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Esercitazione n 4. Obiettivi

Alcuni Design Pattern in Java

Main System Monitor Keyboard

Parola chiave extends

Uno dei pregi di Java è quello di integrare la documentazione con il codice stesso Formato dei commenti:

Programmazione Orientata agli Oggetti in Linguaggio Java

Mappatura dei canali logici sui canali fisici

Object Oriented Software Design

design pattern una soluzione progettuale generale a un problema ricorrente

ARRAY BIDIMENSIONALI float [][] mx = new float[3][4]; (float []) [] mx = new float[3][4];

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

Le funzioni in C. I programmi C sono costituiti da definizioni di variabili e funzioni.

Object Oriented Programming

Funzioni in C. Violetta Lonati

Soluzione dell esercizio del 2 Febbraio 2004

Esercitazione sui Design Pattern

Programmazione in Java Parte I: Fondamenti

Design Pattern in Java

Prossime lezioni. Dai TDA agli oggetti. Riassunto. Riassunto TDA. Oggi. Stefano Mizzaro 1

Web Content Management and E- Learning

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti

Visibilità dei Membri di una Classe

Inizializzazione, Assegnamento e Distruzione di Classi

Programmazione A.A Programmazione Orientata agli Oggetti: Lavorare con gli oggetti ( Lezione XXVII)

Siti web centrati sui dati Architettura MVC-2: i JavaBeans

GESTIONE DEI PROCESSI

EXCEL FUNZIONI PRINCIPALI

PROCEDURA INVENTARIO DI MAGAZZINO di FINE ESERCIZIO (dalla versione 3.2.0)

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Architettura MVC-2: i JavaBeans

Testo Esercizio. Un modello è ragionevole quando contiene queste tre caratteristiche.

Corso Linguaggi di programmazione II - Unina Esercitazione (prova intercorso)

Programmazione Procedurale in Linguaggio C++

Introduzione. Java. Composizione. Esempio -- composizione. G. Prencipe È qualcosa che abbiamo già visto varie volte

Ottava Esercitazione. introduzione ai thread java mutua esclusione

Java:Struttura di Programma. Fabio Scanu a.s. 2014/2015

Транскрипт:

Programmazione Orientata agli Oggetti in Linguaggio Java Design Pattern: Storia Parte b versione 2.1 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina) G. Mecca Università della Basilicata mecca@unibas.it Design Pattern: Storia >> Sommario Sommario Una Visione Critica dei Pattern Originali Il Pattern Factory Method 2

Design Pattern: Storia >> I Pattern Originali Dopo 10 anni I Pattern Originali Dopo 10 Anni Dopo 10 anni alla conferenza OOPSLA 2004, una tavola rotonda sui pattern della GoF 10 anni dopo Obiettivo verificare quali tra i pattern originali si sono realmente confermati come soluzioni efficaci nel tempo e quali, viceversa, avrebbero potuto essere omessi 3 Design Pattern: Storia >> I Pattern Originali Dopo 10 anni I Pattern Originali Dopo 10 Anni Il responso alcuni pattern da rimuovere alcuni pattern discutibili Pattern da rimuovere Bridge, Interpreter Pattern discutibili Singleton, Chain of Responsibility (poco usato) 4

Design Pattern: Storia >> Nome: Singleton Categoria: creazionale Difficoltà di apprendimento limitata Difficoltà di applicazione media Un esempio di pattern discusso Singleton è un pattern di tipo creazionale Descrizione del pattern serve a creare una classe con un unica istanza, che rappresenta un oggetto con visibilità globale, accessibile in tutta l applicazione 5 Design Pattern: Storia >> >> volpieconigli2 Configurazione.java Esempio volpi e conigli per ciascuna esecuzione c è un unica configurazione della simulazione è opportuno che la configurazione sia visibile da molte classi (Gioco, Volpe, Coniglio, Test) >> visibilità globale In questo caso è possibile applicare il singleton 6

package it.unibas.volpieconigli2.modello; public class Configurazione { Design Pattern: Storia >> private int numerorighe; private int numerocolonne;... private static Configurazione singleton = new Configurazione(); private Configurazione() { public static Configurazione getinstance() { return Configurazione.singleton; public void carica(string nomefile) throws Exception { java.util.properties proprieta = caricaproperties(nomefile);... il riferimento all unica istanza della classe viene mantenuto come valore della proprietà statica singleton es: singleton vale #2367 public int getnumeroinizialeconigli() { return (int)(this.numerorighe * this.numerocolonne * this.percentualeconigli);... il costruttore è privato; non è possibile creare oggetti all esterno il metodo getinstance() restituisce sempre lo stesso riferimento (#2367) 7 Design Pattern: Storia >> In tutte le altre classi posso ottenere il riferimento al singleton attraverso la chiamata Configurazione.getInstance() e poi chiamarne i metodi; es: Configurazione.getInstance().getNumeroRighe(); Configurazione.getInstance().getFameLimiteVolpi(); 8

Design Pattern: Storia >> Singleton Diagramma UML della GoF Singleton static uniqueinstance field1 field2 static Instance() method1() method2() - return uniqueinstance fonte: Design Patterns Elements of Reusable OO Code 9 Design Pattern: Storia >> Perchè singleton è discutibile? per via di due problemi Problema n. 1 utilizzo esagerato è opportuno usare un singleton solo nei casi in cui serve effettivamente un componente unico e globale ma questa scelta non deve essere frettolosa 10

Design Pattern: Storia >> Esempio: scacchiera potrebbe essere un singleton? In generale no non è indispensabile la visibilità globale che deve essere, per quanto possibile, impedita altrimenti altri componenti potrebbero per errore modificare lo stato della scacchiera 11 Design Pattern: Storia >> In altri termini per poter essere un singleton, un componente deve essere effettivamente condivisibili a livello globale ovvero tale per cui, pur essendo condiviso tra vari client, questi non possano interferire tra di loro modificandone lo stato nel caso di configurazione questo rischio è molto basso perchè i metodi set sono privati un altro esempio plausibile di singleton: Console 12

Design Pattern: Storia >> Ma in effetti, a pensarci bene la stessa configurazione potrebbe non essere per sempre un singleton se mettessi in linea l applicazione su un sito Web, potrei avere vari giocatori che giocano, ciascuno con la sua configurazione a quel punto il singleton non andrebbe più bene 13 Design Pattern: Storia >> Problema n. 2 quando è realmente utile il singleton? Infatti si tratta un componente unico visibile in tutta l applicazione Ma... questo è equivalente ad una classe con costruttore privato e metodi statici 14

Design Pattern: Storia >> In effetti nella versione originale, Configurazione era un componente statico esattamente come it.unibas.utilita.console Di conseguenza in molti casi l utilizzo di un singleton può essere surrogato utilizzando viceversa un componente statico 15 Design Pattern: Storia >> Quando serve realmente il singleton? ci sono due casi in cui è indispensabile I caso ho bisogno di un oggetto, ovvero di manipolare un riferimento II caso il componente unico deve avere comportamento polimorfo (alcuni dei metodi devono essere sovrascritti nelle sottoclassi) 16

Design Pattern: Storia >> Un esempio del I caso AnimaleNullObject in volpi e conigli Infatti costruire tanti oggetti di tipo animale nullo è inutile, visto che si comportano tutti allo stesso modo mi basta un componente unico e globale ma deve essere necessariamente un oggetto perchè devo disporlo sulla scacchiera 17 Design Pattern: Storia >> package it.unibas.volpieconigli2.modello; public class AnimaleNullObjectSingleton { private static AnimaleNullObjectSingleton singleton = new AnimaleNullObjectSingleton(); private AnimaleNullObjectSingleton() { public static AnimaleNullObjectSingleton getinstance() { return singleton; public boolean isconiglio() { return false; public void agisci(scacchiera scacchiera) { return; public String tostring() { return " "; 18

Design Pattern: Storia >> In questo caso cambia l inizializzazione della scacchiera public Scacchiera(int numerorighe, int numerocolonne) { elementi = new Animale[numeroRighe][numeroColonne]; for (int i = 0; i < numerorighe; i++) { for (int j = 0; j < numerocolonne; j++) { elementi[i][j] = AnimaleNullObjectSingleton.getInstance(); 19 Design Pattern: Storia >> Un esempio del II caso in Java non esiste dal momento che una classe basata su singleton non può essere estesa Infatti se il costruttore è privato la classe diventa automaticamente finale 20

Design Pattern: Storia >> La soluzione del libro originale dichiarare il costruttore protected ma anche questo in Java non ha senso, perchè non si tratta più di un singleton (se il costruttore è protected, altre classi dello stesso package possono creare oggetti) Viceversa la soluzione originale con costruttore protected aveva senso in C++ 21 Design Pattern: Storia >> Di conseguenza in Java, l ambito di applicabilità del singleton è molto limitato ha senso solo in casi simili a quello di AnimaleNullObject bisogna evitare di applicarlo quando non è indispensabile 22

Design Pattern: Storia >> Riassumendo Riassumendo Creational patterns (5) Abstract Factory Builder Factory Method Prototype Singleton (discutibile, visto) Structural Patterns (7) Adapter Bridge (da rimuovere) Composite Decorator Facade (visto) Flyweight Proxy Behavioral Patterns (11) Chain of Responsibility (discutibile) Command Interpreter (da rimuovere) Iterator Mediator Memento Observer State Strategy Template Method Visitor Altri pattern Null Object (visto) DAO (visto) 23 Design Pattern: Storia >> Sommario Riassumendo Una Visione Critica dei Pattern Originali Il Pattern Factory Method 24

Termini della Licenza Termini della Licenza This work is licensed under the Creative Commons Attribution- ShareAlike License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/1.0/ or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. Questo lavoro viene concesso in uso secondo i termini della licenza Attribution-ShareAlike di Creative Commons. Per ottenere una copia della licenza, è possibile visitare http://creativecommons.org/licenses/by-sa/1.0/ oppure inviare una lettera all indirizzo Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. 25