SlideShare une entreprise Scribd logo
1  sur  29
Télécharger pour lire hors ligne
Design Pattern in Java
Un modo di fare qualcosa,
di perseguire un intento usando
la tecnologia a oggetti
HELLO!
Io sono Antonio Musarra
Sono qui per cercare di trasmettere come i
design pattern possano diventare i nostri migliori
amici.
Puoi trovarmi con un tweet a @antonio_musarra
Categorie di pattern
» Pattern architetturali (stili architetturali):
descrivono lo schema organizzativo della struttura
che caratterizza un sistema software.
⋄ In genere individuano le parti del sistema a cui
sono associate responsabilità omogenee e le
relazioni che esistono tra i diversi sottosistemi.
Categorie di pattern
» Pattern di disegno (design pattern): sono i pattern
che si riferiscono alle problematiche legate al
disegno object-oriented
⋄ forniscono uno schema per raffinare gli elementi
di un sistema software o le relazioni tra di essi
⋄ descrive una struttura che ricorre comunemente
di elementi di progetto interconnessi, che
risolvono un problema di progettazione generale
in un contesto particolare
Categorie di pattern
» Pattern di implementazione (idiomi): sono pattern
di basso livello specifici per una particolare
tecnologia (per esempio, il .NET Framework, J2EE).
⋄ descrivono le modalità implementative da
utilizzare per risolvere problematiche di sviluppo
sfruttando in modo mirato le caratteristiche
peculiari di una particolare piattaforma.
Categorie di pattern
Ciascuna categoria è caratterizzata da un grado di astrazione
differente.
» I pattern architetturali sono troppo generici per essere
orientati a risolvere problematiche di disegno
» I pattern idiomatici, molto legati alla tecnologia a cui si
riferiscono e all’implementazione vera e propria.
Categorie di pattern
Ciascuna categoria è caratterizzata da un grado di
astrazione differente.
» I design pattern descrivono soluzioni che
lasciano sempre e comunque un certo grado di
libertà nella loro adozione e implementazione
⋄ non descrivono mai soluzioni che sono valide
per una piattaforma specifica
⋄ hanno una validità più generale e trasversale
rispetto alla tecnologia
Introduzione ai design pattern
» Pattern di interfaccia
» Pattern di responsabilità
» Pattern di costruzione
» Pattern di operazione
» Pattern di estensione
La maggior parte delle implementazioni dei design pattern in java
sono disponibili sul repository GitHub java-design-patterns
all’indirizzo https://github.com/amusarra/java-design-patterns
1.
Perchè i design pattern
Un modo comune per risolvere problemi
ricorrenti
A quale scopo usare i pattern?
» Un pattern è un metodo ben preciso di
svolgere un determinato lavoro, di
perseguire un intento.
» E’ possibile identificare metodi efficaci d’uso
comune per raggiungere obiettivi e risolvere
problemi in vari contesti.
» Un design pattern, letteralmente “pattern di
progettazione”, è un pattern che utilizza le
classi e i metodi di un linguaggio orientato
agli oggetti.
I Design Pattern
» Fanno parte dell’ingegneria del software
» Introdotti perchè ci si accorse che c’erano
problemi ricorrenti e le soluzioni adottate
erano pressoché simili
» Introdotti per fornire uno schema di
partenza dal quale definire poi i propri
progetti
» L’adozione dei pattern rende più flessibili e
robusti i sistemi sw e il tempo dedicato alla
ricerca di una soluzione diminuisce.
Struttura dei Design Pattern
» Nome: deve essere univoco, composto da una o due parole,
cercando di rendere chiara la tipologia di pattern
» Problema Affrontato: descrizione del contesto in cui
applicare il pattern
» Soluzione: descrizione delle classi, delle relazioni e
implicazioni. La soluzione deve essere espressa in forma
generica, visto che si offre come risoluzione di un problema
astratto
» Conseguenze: sono tutti i vincoli e risultati che derivano
dall’applicazione del pattern
Problema da
risolvere
Design Pattern
Pattern Prescelto Implementazione
2.
Pattern di interfaccia
L’importanza del costrutto interface di java
Oltre le interfacce Java
» Con l’applicazione appropriata delle interfacce Java è
possibile semplificare e rendere più robusto il codice. Andare
oltre l’uso ordinario delle interfacce se:
⋄ Vogliamo adattare l’interfaccia di una classe per farla
corrispondere alle esigenze di un client allora
applicheremo il pattern Adapter
⋄ Vogliamo fornire una semplice interfaccia che racchiuda
una collezioni di classi allora applicheremo il pattern
Facade
Oltre le interfacce Java
» Con l’applicazione appropriata delle interfacce Java è
possibile semplificare e rendere più robusto il codice. Andare
oltre l’uso ordinario delle interfacce se:
⋄ Vogliamo definire un’interfaccia che si applichi sia a
singoli oggetti che a gruppi di oggetti allora applicheremo
il pattern Composite
⋄ Vogliamo rendere indipendente un’astrazione dalla sua
implementazione in modo che le due possano variare
indipendentemente allora applicheremo il pattern Bridge
3.
Pattern di responsabilità
Centralizzare, delegare e limitare la
responsabilità degli oggetti
Oltre la normale distribuzione di responsabilità
» In quei contesti in cui bisogna deviare dalla regola normale
secondo cui la responsabilità deve essere distribuita il più
ampiamente possibile, se:
⋄ Vogliamo centralizzare tutta la responsabilità di una
classe in una sua singola istanza, allora applicheremo il
pattern Singleton
⋄ Vogliamo permettere ad un oggetto di non tenere conto di
quali altri oggetti dipendono dal suo stato, allora
applicheremo il pattern Observer
Oltre la normale distribuzione di responsabilità
» In quei contesti in cui bisogna deviare dalla regola normale
secondo cui la responsabilità deve essere distribuita il più
ampiamente possibile, se:
⋄ Vogliamo centralizzare la responsabilità in una classe che
supervisioni le interazioni di un insiemi di oggetti, allora
applicheremo il pattern Mediator
⋄ Vogliamo consentire a un oggetto di agire in vece di un
altro oggetto, allora applicheremo il pattern Proxy
Oltre la normale distribuzione di responsabilità
» In quei contesti in cui bisogna deviare dalla regola normale
secondo cui la responsabilità deve essere distribuita il più
ampiamente possibile, se:
⋄ Vogliamo permettere a una chiamata di percorrere una
catena di oggetti finché non trova quello in grado di
gestirla, allora applicheremo il pattern Chain of
Responsibility
⋄ Vogliamo centralizzare la responsabilità in oggetti
condivisi di granularità fine, allora applicheremo il
pattern Flyweight
4.
Pattern di costruzione
La strada per costruire oggetti in modo adeguato
Oltre i costruttori Java
» I pattern orientati alla costruzione permettono a un client di
costruire un nuovo oggetto senza chiamare direttamente il
costruttore di una classe, quindi, se:
⋄ Vogliamo ottenere gradualmente informazione su un
oggetto prima di richiedere la costruzione, allora
applicheremo il pattern Builder
⋄ Vogliamo rimandare la decisione su quale classe
istanziare, allora applicheremo il pattern Factory Method
Oltre i costruttori Java
» I pattern orientati alla costruzione permettono a un client di
costruire un nuovo oggetto senza chiamare direttamente il
costruttore di una classe, quindi, se:
⋄ Vogliamo costruire una famiglia di oggetti che
condividono qualche caratteristica, allora applicheremo il
pattern Abstract Factory
⋄ Vogliamo specificare l’oggetto da creare fornendo un
esempio, allora applicheremo il pattern Prototype
⋄ Vogliamo ricostruire un oggetto a partire da una versione
inattiva che contiene solo il suo stato interno, allora
applicheremo il pattern Memento
5.
Pattern di operazione
Il polimorfismo: classi differenti che
implementano un’operazione in modi diversi
Oltre le normali operazioni
» Le potenzialità del polimorfismo si manifestano in molti
pattern, quindi, se:
⋄ Vogliamo implementare un algoritmo con un metodo,
rimandano la definizione di alcuni passaggi in modo che
possano essere ridefiniti nelle sottoclassi, allora
applicheremo il pattern Template Method
⋄ Vogliamo distribuire un’operazione in modo che ogni
classe rappresenti uno stato differente, allora
applicheremo il pattern State
Oltre le normali operazioni
» Le potenzialità del polimorfismo si manifestano in molti
pattern, quindi, se:
⋄ Vogliamo incapsulare un’operazione, rendendo diverse le
sue implementazioni intercambiabili, allora applicheremo
il pattern Strategy
⋄ Vogliamo incapsulare la chiamata di un metodo
all’interno di un oggetto, allora applicheremo il pattern
Command
⋄ Vogliamo distribuire un’operazione in modo che ogni sua
implementazione si applichi a un tipo diverso di
composizione, allora applicheremo il pattern Interpreter
6.
Pattern di estensione
Come aggiungere nuovi comportamenti a un
oggetto senza alterare la sua classe
Oltre le normali estensioni
» Le potenzialità del polimorfismo si manifestano in molti
pattern, quindi, se:
⋄ Vogliamo associare dinamicamente responsabilità
aggiuntive a un oggetto, allora applicheremo il pattern
Decorator
⋄ Vogliamo fornire un metodo per accedere a una
collezione di istanze di una classe creata da noi, allora
applicheremo il pattern Iterator
⋄ Vogliamo permettere l’aggiunta di nuove operazioni a una
classe senza doverla cambiare, allora applicheremo il
pattern Visitor
THANKS!
Per qualunque domanda?
Puoi trovarmi
» @antonio_musarra
» antonio.musarra@gmail.com
» https://www.dontesta.it

Contenu connexe

Tendances

Un backend per tutte le stagioni con Spring
Un backend per tutte le stagioni con SpringUn backend per tutte le stagioni con Spring
Un backend per tutte le stagioni con SpringMarcello Teodori
 
Acadevmy - Angular Overview
Acadevmy - Angular OverviewAcadevmy - Angular Overview
Acadevmy - Angular OverviewFrancesco Sciuti
 
SPRING - MAVEN - REST API (ITA - Luglio 2017)
SPRING - MAVEN - REST API (ITA - Luglio 2017)SPRING - MAVEN - REST API (ITA - Luglio 2017)
SPRING - MAVEN - REST API (ITA - Luglio 2017)Valerio Radice
 
Java Spring Basics - Donato Andrisani - Gabriele Manfredi
Java Spring Basics - Donato Andrisani - Gabriele ManfrediJava Spring Basics - Donato Andrisani - Gabriele Manfredi
Java Spring Basics - Donato Andrisani - Gabriele ManfrediGabriele Manfredi
 
Mvc e di spring e angular js
Mvc e di   spring e angular jsMvc e di   spring e angular js
Mvc e di spring e angular jsRiccardo Cardin
 
Struttin' on, novità in casa Struts
Struttin' on, novità in casa StrutsStruttin' on, novità in casa Struts
Struttin' on, novità in casa StrutsMarcello Teodori
 
Acadevmy - Visual Studio Code Overview
Acadevmy - Visual Studio Code OverviewAcadevmy - Visual Studio Code Overview
Acadevmy - Visual Studio Code OverviewFrancesco Sciuti
 

Tendances (13)

Un backend per tutte le stagioni con Spring
Un backend per tutte le stagioni con SpringUn backend per tutte le stagioni con Spring
Un backend per tutte le stagioni con Spring
 
Microservices
MicroservicesMicroservices
Microservices
 
Acadevmy - Angular Overview
Acadevmy - Angular OverviewAcadevmy - Angular Overview
Acadevmy - Angular Overview
 
SPRING - MAVEN - REST API (ITA - Luglio 2017)
SPRING - MAVEN - REST API (ITA - Luglio 2017)SPRING - MAVEN - REST API (ITA - Luglio 2017)
SPRING - MAVEN - REST API (ITA - Luglio 2017)
 
Spring Intro
Spring IntroSpring Intro
Spring Intro
 
Java Spring Basics - Donato Andrisani - Gabriele Manfredi
Java Spring Basics - Donato Andrisani - Gabriele ManfrediJava Spring Basics - Donato Andrisani - Gabriele Manfredi
Java Spring Basics - Donato Andrisani - Gabriele Manfredi
 
Dependency Injection
Dependency InjectionDependency Injection
Dependency Injection
 
Corso Javascript
Corso JavascriptCorso Javascript
Corso Javascript
 
Mvc e di spring e angular js
Mvc e di   spring e angular jsMvc e di   spring e angular js
Mvc e di spring e angular js
 
Struttin' on, novità in casa Struts
Struttin' on, novità in casa StrutsStruttin' on, novità in casa Struts
Struttin' on, novità in casa Struts
 
Corso UML
Corso UMLCorso UML
Corso UML
 
Acadevmy - Visual Studio Code Overview
Acadevmy - Visual Studio Code OverviewAcadevmy - Visual Studio Code Overview
Acadevmy - Visual Studio Code Overview
 
Corso progettazione
Corso progettazioneCorso progettazione
Corso progettazione
 

Similaire à Corso introduttivo di Design Pattern in Java per Elis - 1

Riuso Object Oriented
Riuso Object OrientedRiuso Object Oriented
Riuso Object OrientedStefano Fago
 
Design patterns - parte 1
Design patterns - parte 1Design patterns - parte 1
Design patterns - parte 1Fabio Armani
 
Design pattern template method
Design pattern template methodDesign pattern template method
Design pattern template methodNelson Firmani
 
Detailed Model Capture
Detailed Model CaptureDetailed Model Capture
Detailed Model Capturefcospito
 
Detailed Model Capture
Detailed Model CaptureDetailed Model Capture
Detailed Model Capturefcospito
 
Repository pattern slides v1.1
Repository pattern slides v1.1Repository pattern slides v1.1
Repository pattern slides v1.1Christian Nastasi
 
Slide evento Code Refactoring JavaScript
Slide evento Code Refactoring JavaScriptSlide evento Code Refactoring JavaScript
Slide evento Code Refactoring JavaScriptLuca Pagliaro
 
Usare i Design System - Un approccio Frameworkless per la tua Web Application
Usare i Design System - Un approccio Frameworkless per la tua Web ApplicationUsare i Design System - Un approccio Frameworkless per la tua Web Application
Usare i Design System - Un approccio Frameworkless per la tua Web Applicationextrategy
 
Workshop Ideare e creare Web Applications, Introduzione ad AngularJS
Workshop Ideare e creare Web Applications, Introduzione ad AngularJSWorkshop Ideare e creare Web Applications, Introduzione ad AngularJS
Workshop Ideare e creare Web Applications, Introduzione ad AngularJSGiovanni Buffa
 
Aspect Oriented Programming
Aspect Oriented ProgrammingAspect Oriented Programming
Aspect Oriented ProgrammingAndrea Bozzoni
 
Idiomatic Domain Driven Design
Idiomatic Domain Driven DesignIdiomatic Domain Driven Design
Idiomatic Domain Driven DesignAndrea Saltarello
 
Domain Driven Design e CQRS
Domain Driven Design e CQRSDomain Driven Design e CQRS
Domain Driven Design e CQRSManuel Scapolan
 
Coding, pattern e pensiero computazionale
Coding, pattern e pensiero computazionaleCoding, pattern e pensiero computazionale
Coding, pattern e pensiero computazionaleAlessandri Giuseppe
 
PowerMock TDD User Group Milano
PowerMock TDD User Group MilanoPowerMock TDD User Group Milano
PowerMock TDD User Group MilanoMassimo Groppelli
 
Lettera di presentazione_it
Lettera di presentazione_itLettera di presentazione_it
Lettera di presentazione_itRichard Gennaro
 
Abilitare le organizzazioni e le persone ad adottare con successo il Cloud
Abilitare le organizzazioni e le persone ad adottare con successo il CloudAbilitare le organizzazioni e le persone ad adottare con successo il Cloud
Abilitare le organizzazioni e le persone ad adottare con successo il CloudAmazon Web Services
 
Progetto SOD Davide Sito
Progetto SOD Davide SitoProgetto SOD Davide Sito
Progetto SOD Davide SitoDavide Sito
 

Similaire à Corso introduttivo di Design Pattern in Java per Elis - 1 (20)

Design patterns
Design patternsDesign patterns
Design patterns
 
Riuso Object Oriented
Riuso Object OrientedRiuso Object Oriented
Riuso Object Oriented
 
Design patterns - parte 1
Design patterns - parte 1Design patterns - parte 1
Design patterns - parte 1
 
Design pattern template method
Design pattern template methodDesign pattern template method
Design pattern template method
 
Detailed Model Capture
Detailed Model CaptureDetailed Model Capture
Detailed Model Capture
 
Detailed Model Capture
Detailed Model CaptureDetailed Model Capture
Detailed Model Capture
 
Repository pattern slides v1.1
Repository pattern slides v1.1Repository pattern slides v1.1
Repository pattern slides v1.1
 
Object Oriented Design
Object Oriented DesignObject Oriented Design
Object Oriented Design
 
Slide evento Code Refactoring JavaScript
Slide evento Code Refactoring JavaScriptSlide evento Code Refactoring JavaScript
Slide evento Code Refactoring JavaScript
 
Usare i Design System - Un approccio Frameworkless per la tua Web Application
Usare i Design System - Un approccio Frameworkless per la tua Web ApplicationUsare i Design System - Un approccio Frameworkless per la tua Web Application
Usare i Design System - Un approccio Frameworkless per la tua Web Application
 
Corso GOF Design Pattern
Corso GOF Design PatternCorso GOF Design Pattern
Corso GOF Design Pattern
 
Workshop Ideare e creare Web Applications, Introduzione ad AngularJS
Workshop Ideare e creare Web Applications, Introduzione ad AngularJSWorkshop Ideare e creare Web Applications, Introduzione ad AngularJS
Workshop Ideare e creare Web Applications, Introduzione ad AngularJS
 
Aspect Oriented Programming
Aspect Oriented ProgrammingAspect Oriented Programming
Aspect Oriented Programming
 
Idiomatic Domain Driven Design
Idiomatic Domain Driven DesignIdiomatic Domain Driven Design
Idiomatic Domain Driven Design
 
Domain Driven Design e CQRS
Domain Driven Design e CQRSDomain Driven Design e CQRS
Domain Driven Design e CQRS
 
Coding, pattern e pensiero computazionale
Coding, pattern e pensiero computazionaleCoding, pattern e pensiero computazionale
Coding, pattern e pensiero computazionale
 
PowerMock TDD User Group Milano
PowerMock TDD User Group MilanoPowerMock TDD User Group Milano
PowerMock TDD User Group Milano
 
Lettera di presentazione_it
Lettera di presentazione_itLettera di presentazione_it
Lettera di presentazione_it
 
Abilitare le organizzazioni e le persone ad adottare con successo il Cloud
Abilitare le organizzazioni e le persone ad adottare con successo il CloudAbilitare le organizzazioni e le persone ad adottare con successo il Cloud
Abilitare le organizzazioni e le persone ad adottare con successo il Cloud
 
Progetto SOD Davide Sito
Progetto SOD Davide SitoProgetto SOD Davide Sito
Progetto SOD Davide Sito
 

Plus de Antonio Musarra

Liferay Portal CE 7.4: Come configurare Oracle Database 19c
Liferay Portal CE 7.4: Come configurare Oracle Database 19cLiferay Portal CE 7.4: Come configurare Oracle Database 19c
Liferay Portal CE 7.4: Come configurare Oracle Database 19cAntonio Musarra
 
Come installare TIBCO Jasper Reports Server 7.5 Community Edition su RedHat J...
Come installare TIBCO Jasper Reports Server 7.5 Community Edition su RedHat J...Come installare TIBCO Jasper Reports Server 7.5 Community Edition su RedHat J...
Come installare TIBCO Jasper Reports Server 7.5 Community Edition su RedHat J...Antonio Musarra
 
Come installare Liferay 7.2 GA2 su WildFly 16 + Oracle Database 19c
Come installare Liferay 7.2 GA2 su WildFly 16 + Oracle Database 19cCome installare Liferay 7.2 GA2 su WildFly 16 + Oracle Database 19c
Come installare Liferay 7.2 GA2 su WildFly 16 + Oracle Database 19cAntonio Musarra
 
Liferay SSL/TLS Security. Come configurare il bundle Liferay per abilitare il...
Liferay SSL/TLS Security. Come configurare il bundle Liferay per abilitare il...Liferay SSL/TLS Security. Come configurare il bundle Liferay per abilitare il...
Liferay SSL/TLS Security. Come configurare il bundle Liferay per abilitare il...Antonio Musarra
 
Liferay & Salesforce.com
Liferay & Salesforce.comLiferay & Salesforce.com
Liferay & Salesforce.comAntonio Musarra
 
Come installare Liferay 7 su JBOSS EAP con il supporto​ Oracle Database
Come installare Liferay 7 su JBOSS EAP con il supporto​ Oracle DatabaseCome installare Liferay 7 su JBOSS EAP con il supporto​ Oracle Database
Come installare Liferay 7 su JBOSS EAP con il supporto​ Oracle DatabaseAntonio Musarra
 
Liferay - Quick Start 1° Episodio
Liferay - Quick Start 1° EpisodioLiferay - Quick Start 1° Episodio
Liferay - Quick Start 1° EpisodioAntonio Musarra
 
SugarCRM Enterprise Development Virtual Appliance
SugarCRM Enterprise Development Virtual ApplianceSugarCRM Enterprise Development Virtual Appliance
SugarCRM Enterprise Development Virtual ApplianceAntonio Musarra
 
Liferay: Esporre Web Services Custom
Liferay: Esporre Web Services CustomLiferay: Esporre Web Services Custom
Liferay: Esporre Web Services CustomAntonio Musarra
 
SugarCRM: Come realizzare un Custom Scheduler. Un esempio completo.
SugarCRM: Come realizzare un Custom Scheduler. Un esempio completo.SugarCRM: Come realizzare un Custom Scheduler. Un esempio completo.
SugarCRM: Come realizzare un Custom Scheduler. Un esempio completo.Antonio Musarra
 
SugarCRM REST API: Un’applicazione in appena dieci minuti
SugarCRM REST API: Un’applicazione in appena dieci minutiSugarCRM REST API: Un’applicazione in appena dieci minuti
SugarCRM REST API: Un’applicazione in appena dieci minutiAntonio Musarra
 
How to Build a Java client for SugarCRM
How to Build a Java client for SugarCRMHow to Build a Java client for SugarCRM
How to Build a Java client for SugarCRMAntonio Musarra
 
Liferay Web Services - Come importare utenti da un foglio Excel
Liferay Web Services - Come importare utenti da un foglio ExcelLiferay Web Services - Come importare utenti da un foglio Excel
Liferay Web Services - Come importare utenti da un foglio ExcelAntonio Musarra
 
Introduzione a Liferay Message BUS
Introduzione a Liferay Message BUSIntroduzione a Liferay Message BUS
Introduzione a Liferay Message BUSAntonio Musarra
 
Un CRM dentro un CMS v1.0
Un CRM dentro un CMS v1.0Un CRM dentro un CMS v1.0
Un CRM dentro un CMS v1.0Antonio Musarra
 
Running Kettle Job by API v1.2
Running Kettle Job by API v1.2Running Kettle Job by API v1.2
Running Kettle Job by API v1.2Antonio Musarra
 
SugarCRM Web Services: Build a Apache CXF Client
SugarCRM Web Services: Build a Apache CXF ClientSugarCRM Web Services: Build a Apache CXF Client
SugarCRM Web Services: Build a Apache CXF ClientAntonio Musarra
 
Building a Client .NET for SugarCRM
Building a Client .NET for SugarCRMBuilding a Client .NET for SugarCRM
Building a Client .NET for SugarCRMAntonio Musarra
 
Costruire un client .NET per SugarCRM
Costruire un client .NET per SugarCRMCostruire un client .NET per SugarCRM
Costruire un client .NET per SugarCRMAntonio Musarra
 
Come configurare Liferay 6.0 per Oracle
Come configurare Liferay 6.0 per OracleCome configurare Liferay 6.0 per Oracle
Come configurare Liferay 6.0 per OracleAntonio Musarra
 

Plus de Antonio Musarra (20)

Liferay Portal CE 7.4: Come configurare Oracle Database 19c
Liferay Portal CE 7.4: Come configurare Oracle Database 19cLiferay Portal CE 7.4: Come configurare Oracle Database 19c
Liferay Portal CE 7.4: Come configurare Oracle Database 19c
 
Come installare TIBCO Jasper Reports Server 7.5 Community Edition su RedHat J...
Come installare TIBCO Jasper Reports Server 7.5 Community Edition su RedHat J...Come installare TIBCO Jasper Reports Server 7.5 Community Edition su RedHat J...
Come installare TIBCO Jasper Reports Server 7.5 Community Edition su RedHat J...
 
Come installare Liferay 7.2 GA2 su WildFly 16 + Oracle Database 19c
Come installare Liferay 7.2 GA2 su WildFly 16 + Oracle Database 19cCome installare Liferay 7.2 GA2 su WildFly 16 + Oracle Database 19c
Come installare Liferay 7.2 GA2 su WildFly 16 + Oracle Database 19c
 
Liferay SSL/TLS Security. Come configurare il bundle Liferay per abilitare il...
Liferay SSL/TLS Security. Come configurare il bundle Liferay per abilitare il...Liferay SSL/TLS Security. Come configurare il bundle Liferay per abilitare il...
Liferay SSL/TLS Security. Come configurare il bundle Liferay per abilitare il...
 
Liferay & Salesforce.com
Liferay & Salesforce.comLiferay & Salesforce.com
Liferay & Salesforce.com
 
Come installare Liferay 7 su JBOSS EAP con il supporto​ Oracle Database
Come installare Liferay 7 su JBOSS EAP con il supporto​ Oracle DatabaseCome installare Liferay 7 su JBOSS EAP con il supporto​ Oracle Database
Come installare Liferay 7 su JBOSS EAP con il supporto​ Oracle Database
 
Liferay - Quick Start 1° Episodio
Liferay - Quick Start 1° EpisodioLiferay - Quick Start 1° Episodio
Liferay - Quick Start 1° Episodio
 
SugarCRM Enterprise Development Virtual Appliance
SugarCRM Enterprise Development Virtual ApplianceSugarCRM Enterprise Development Virtual Appliance
SugarCRM Enterprise Development Virtual Appliance
 
Liferay: Esporre Web Services Custom
Liferay: Esporre Web Services CustomLiferay: Esporre Web Services Custom
Liferay: Esporre Web Services Custom
 
SugarCRM: Come realizzare un Custom Scheduler. Un esempio completo.
SugarCRM: Come realizzare un Custom Scheduler. Un esempio completo.SugarCRM: Come realizzare un Custom Scheduler. Un esempio completo.
SugarCRM: Come realizzare un Custom Scheduler. Un esempio completo.
 
SugarCRM REST API: Un’applicazione in appena dieci minuti
SugarCRM REST API: Un’applicazione in appena dieci minutiSugarCRM REST API: Un’applicazione in appena dieci minuti
SugarCRM REST API: Un’applicazione in appena dieci minuti
 
How to Build a Java client for SugarCRM
How to Build a Java client for SugarCRMHow to Build a Java client for SugarCRM
How to Build a Java client for SugarCRM
 
Liferay Web Services - Come importare utenti da un foglio Excel
Liferay Web Services - Come importare utenti da un foglio ExcelLiferay Web Services - Come importare utenti da un foglio Excel
Liferay Web Services - Come importare utenti da un foglio Excel
 
Introduzione a Liferay Message BUS
Introduzione a Liferay Message BUSIntroduzione a Liferay Message BUS
Introduzione a Liferay Message BUS
 
Un CRM dentro un CMS v1.0
Un CRM dentro un CMS v1.0Un CRM dentro un CMS v1.0
Un CRM dentro un CMS v1.0
 
Running Kettle Job by API v1.2
Running Kettle Job by API v1.2Running Kettle Job by API v1.2
Running Kettle Job by API v1.2
 
SugarCRM Web Services: Build a Apache CXF Client
SugarCRM Web Services: Build a Apache CXF ClientSugarCRM Web Services: Build a Apache CXF Client
SugarCRM Web Services: Build a Apache CXF Client
 
Building a Client .NET for SugarCRM
Building a Client .NET for SugarCRMBuilding a Client .NET for SugarCRM
Building a Client .NET for SugarCRM
 
Costruire un client .NET per SugarCRM
Costruire un client .NET per SugarCRMCostruire un client .NET per SugarCRM
Costruire un client .NET per SugarCRM
 
Come configurare Liferay 6.0 per Oracle
Come configurare Liferay 6.0 per OracleCome configurare Liferay 6.0 per Oracle
Come configurare Liferay 6.0 per Oracle
 

Corso introduttivo di Design Pattern in Java per Elis - 1

  • 1. Design Pattern in Java Un modo di fare qualcosa, di perseguire un intento usando la tecnologia a oggetti
  • 2. HELLO! Io sono Antonio Musarra Sono qui per cercare di trasmettere come i design pattern possano diventare i nostri migliori amici. Puoi trovarmi con un tweet a @antonio_musarra
  • 3. Categorie di pattern » Pattern architetturali (stili architetturali): descrivono lo schema organizzativo della struttura che caratterizza un sistema software. ⋄ In genere individuano le parti del sistema a cui sono associate responsabilità omogenee e le relazioni che esistono tra i diversi sottosistemi.
  • 4. Categorie di pattern » Pattern di disegno (design pattern): sono i pattern che si riferiscono alle problematiche legate al disegno object-oriented ⋄ forniscono uno schema per raffinare gli elementi di un sistema software o le relazioni tra di essi ⋄ descrive una struttura che ricorre comunemente di elementi di progetto interconnessi, che risolvono un problema di progettazione generale in un contesto particolare
  • 5. Categorie di pattern » Pattern di implementazione (idiomi): sono pattern di basso livello specifici per una particolare tecnologia (per esempio, il .NET Framework, J2EE). ⋄ descrivono le modalità implementative da utilizzare per risolvere problematiche di sviluppo sfruttando in modo mirato le caratteristiche peculiari di una particolare piattaforma.
  • 6. Categorie di pattern Ciascuna categoria è caratterizzata da un grado di astrazione differente. » I pattern architetturali sono troppo generici per essere orientati a risolvere problematiche di disegno » I pattern idiomatici, molto legati alla tecnologia a cui si riferiscono e all’implementazione vera e propria.
  • 7. Categorie di pattern Ciascuna categoria è caratterizzata da un grado di astrazione differente. » I design pattern descrivono soluzioni che lasciano sempre e comunque un certo grado di libertà nella loro adozione e implementazione ⋄ non descrivono mai soluzioni che sono valide per una piattaforma specifica ⋄ hanno una validità più generale e trasversale rispetto alla tecnologia
  • 8. Introduzione ai design pattern » Pattern di interfaccia » Pattern di responsabilità » Pattern di costruzione » Pattern di operazione » Pattern di estensione La maggior parte delle implementazioni dei design pattern in java sono disponibili sul repository GitHub java-design-patterns all’indirizzo https://github.com/amusarra/java-design-patterns
  • 9. 1. Perchè i design pattern Un modo comune per risolvere problemi ricorrenti
  • 10. A quale scopo usare i pattern? » Un pattern è un metodo ben preciso di svolgere un determinato lavoro, di perseguire un intento. » E’ possibile identificare metodi efficaci d’uso comune per raggiungere obiettivi e risolvere problemi in vari contesti. » Un design pattern, letteralmente “pattern di progettazione”, è un pattern che utilizza le classi e i metodi di un linguaggio orientato agli oggetti.
  • 11. I Design Pattern » Fanno parte dell’ingegneria del software » Introdotti perchè ci si accorse che c’erano problemi ricorrenti e le soluzioni adottate erano pressoché simili » Introdotti per fornire uno schema di partenza dal quale definire poi i propri progetti » L’adozione dei pattern rende più flessibili e robusti i sistemi sw e il tempo dedicato alla ricerca di una soluzione diminuisce.
  • 12. Struttura dei Design Pattern » Nome: deve essere univoco, composto da una o due parole, cercando di rendere chiara la tipologia di pattern » Problema Affrontato: descrizione del contesto in cui applicare il pattern » Soluzione: descrizione delle classi, delle relazioni e implicazioni. La soluzione deve essere espressa in forma generica, visto che si offre come risoluzione di un problema astratto » Conseguenze: sono tutti i vincoli e risultati che derivano dall’applicazione del pattern
  • 13. Problema da risolvere Design Pattern Pattern Prescelto Implementazione
  • 14. 2. Pattern di interfaccia L’importanza del costrutto interface di java
  • 15. Oltre le interfacce Java » Con l’applicazione appropriata delle interfacce Java è possibile semplificare e rendere più robusto il codice. Andare oltre l’uso ordinario delle interfacce se: ⋄ Vogliamo adattare l’interfaccia di una classe per farla corrispondere alle esigenze di un client allora applicheremo il pattern Adapter ⋄ Vogliamo fornire una semplice interfaccia che racchiuda una collezioni di classi allora applicheremo il pattern Facade
  • 16. Oltre le interfacce Java » Con l’applicazione appropriata delle interfacce Java è possibile semplificare e rendere più robusto il codice. Andare oltre l’uso ordinario delle interfacce se: ⋄ Vogliamo definire un’interfaccia che si applichi sia a singoli oggetti che a gruppi di oggetti allora applicheremo il pattern Composite ⋄ Vogliamo rendere indipendente un’astrazione dalla sua implementazione in modo che le due possano variare indipendentemente allora applicheremo il pattern Bridge
  • 17. 3. Pattern di responsabilità Centralizzare, delegare e limitare la responsabilità degli oggetti
  • 18. Oltre la normale distribuzione di responsabilità » In quei contesti in cui bisogna deviare dalla regola normale secondo cui la responsabilità deve essere distribuita il più ampiamente possibile, se: ⋄ Vogliamo centralizzare tutta la responsabilità di una classe in una sua singola istanza, allora applicheremo il pattern Singleton ⋄ Vogliamo permettere ad un oggetto di non tenere conto di quali altri oggetti dipendono dal suo stato, allora applicheremo il pattern Observer
  • 19. Oltre la normale distribuzione di responsabilità » In quei contesti in cui bisogna deviare dalla regola normale secondo cui la responsabilità deve essere distribuita il più ampiamente possibile, se: ⋄ Vogliamo centralizzare la responsabilità in una classe che supervisioni le interazioni di un insiemi di oggetti, allora applicheremo il pattern Mediator ⋄ Vogliamo consentire a un oggetto di agire in vece di un altro oggetto, allora applicheremo il pattern Proxy
  • 20. Oltre la normale distribuzione di responsabilità » In quei contesti in cui bisogna deviare dalla regola normale secondo cui la responsabilità deve essere distribuita il più ampiamente possibile, se: ⋄ Vogliamo permettere a una chiamata di percorrere una catena di oggetti finché non trova quello in grado di gestirla, allora applicheremo il pattern Chain of Responsibility ⋄ Vogliamo centralizzare la responsabilità in oggetti condivisi di granularità fine, allora applicheremo il pattern Flyweight
  • 21. 4. Pattern di costruzione La strada per costruire oggetti in modo adeguato
  • 22. Oltre i costruttori Java » I pattern orientati alla costruzione permettono a un client di costruire un nuovo oggetto senza chiamare direttamente il costruttore di una classe, quindi, se: ⋄ Vogliamo ottenere gradualmente informazione su un oggetto prima di richiedere la costruzione, allora applicheremo il pattern Builder ⋄ Vogliamo rimandare la decisione su quale classe istanziare, allora applicheremo il pattern Factory Method
  • 23. Oltre i costruttori Java » I pattern orientati alla costruzione permettono a un client di costruire un nuovo oggetto senza chiamare direttamente il costruttore di una classe, quindi, se: ⋄ Vogliamo costruire una famiglia di oggetti che condividono qualche caratteristica, allora applicheremo il pattern Abstract Factory ⋄ Vogliamo specificare l’oggetto da creare fornendo un esempio, allora applicheremo il pattern Prototype ⋄ Vogliamo ricostruire un oggetto a partire da una versione inattiva che contiene solo il suo stato interno, allora applicheremo il pattern Memento
  • 24. 5. Pattern di operazione Il polimorfismo: classi differenti che implementano un’operazione in modi diversi
  • 25. Oltre le normali operazioni » Le potenzialità del polimorfismo si manifestano in molti pattern, quindi, se: ⋄ Vogliamo implementare un algoritmo con un metodo, rimandano la definizione di alcuni passaggi in modo che possano essere ridefiniti nelle sottoclassi, allora applicheremo il pattern Template Method ⋄ Vogliamo distribuire un’operazione in modo che ogni classe rappresenti uno stato differente, allora applicheremo il pattern State
  • 26. Oltre le normali operazioni » Le potenzialità del polimorfismo si manifestano in molti pattern, quindi, se: ⋄ Vogliamo incapsulare un’operazione, rendendo diverse le sue implementazioni intercambiabili, allora applicheremo il pattern Strategy ⋄ Vogliamo incapsulare la chiamata di un metodo all’interno di un oggetto, allora applicheremo il pattern Command ⋄ Vogliamo distribuire un’operazione in modo che ogni sua implementazione si applichi a un tipo diverso di composizione, allora applicheremo il pattern Interpreter
  • 27. 6. Pattern di estensione Come aggiungere nuovi comportamenti a un oggetto senza alterare la sua classe
  • 28. Oltre le normali estensioni » Le potenzialità del polimorfismo si manifestano in molti pattern, quindi, se: ⋄ Vogliamo associare dinamicamente responsabilità aggiuntive a un oggetto, allora applicheremo il pattern Decorator ⋄ Vogliamo fornire un metodo per accedere a una collezione di istanze di una classe creata da noi, allora applicheremo il pattern Iterator ⋄ Vogliamo permettere l’aggiunta di nuove operazioni a una classe senza doverla cambiare, allora applicheremo il pattern Visitor
  • 29. THANKS! Per qualunque domanda? Puoi trovarmi » @antonio_musarra » antonio.musarra@gmail.com » https://www.dontesta.it