Privacy Policy Cookie Policy Design Patterns - Creator ed Expert - Simone Sante Ruffo
You are here
Home > Programmazione > Progettazione software > Design Patterns – Creator ed Expert

Design Patterns – Creator ed Expert

I design patterns

“I design patterns sono soluzioni riutilizzabili a problemi comuni.”

Avrete sentito parecchie volte questa frase, ma cosa significa? Cosa sono questi “patterns” e perché se ne parla tanto?.

Cosa sono questi famigerati design patterns?.

Vorrei iniziare questa serie sui design patterns più comuni con una introduzione generale su questo vasto mondo.
Sapete, in cucina io sono un tipo “creativo” significa che il libro delle ricette mi dice di aggiungere 500 gr di farina io invece vado “a sentimento”. Spesso il risultato non uccide nessuno, anzi molti mi dicono che so cucinare ma…

Ci sono delle procedure in cucina che se non seguite possono creare, a lungo andare, sufficienti danni ad esempio: mettere la carne appena uscita dal frigo direttamente in padella… ehm… me ne sono reso conto quando ho buttai la mia prima padella… bene, vedete i design patterns come quelle procedure di progettazione necessarie per non buttare le padelle dopo avere cucinato. In effetti forse non è ancora chiaro il concetto quindi mi spiegherò meglio con un altro esempio.
Immaginate di essere tornati all’università e di dovere prendere gli appunti che ti serviranno per studiare a casa e, perchè no?, anche per passarli ai colleghi. Immagina di prendere gli appunti utilizzando lo stesso colore, mescolando il testo e… ripetendo concetti già detti… arrivi a casa e… devi rileggere gli appunti per studiare… meglio ripartire da zero rileggendo il libro.

I design patterns sono quindi dei suggerimenti su come “Colorare” e impostare la “grafica” dei tuoi appunti in modo che la rilettura e la manutenzione successiva degli appunti sià più chiara, insomma, appunti che puoi riutilizzare e passare ai colleghi!.
Beh di certo non dovere comprare ogni volta una nuova padella fa risparmiare parecchio denaro (con quello che costano!) e non dovere riscrivere gli appunti a casa fa risparmiare molto tempo vero?. Bene se avete capito questo, avete capito il vero potenziale di questo strumento!.
Una cosa importante sui patterns è che non sono nuovi!.
Come anche molte tecniche utilizzare in cucina per salvaguardare le pentole derivano dalle comprovate e ultra sperimentate conoscenze della nostra nonna, anche i design patters derivano da comprovati e ultra sperimentati principi base della programmazione.
Ampierò il discorso in altri articoli. Per ora proseguiamo con l’argomento di questo articolo.

Quanti ne esistono?

“Uno Nessuno e Centomila”

Luigi Pirandello, 1926

In effetti esistono centinaia, forse migliaia di design patterns e tantissimi libri sull’argomento.
Esistono design pattern ormai per ogni cosa in questo mondo!.

Rimanendo nell’ambito del software esistono diversi gruppi di design patterns e vari studi a riguardo.
Punti di riferimento di questo mondo sono i principi SOLID (di cui parlerò in seguito), i pattern GRASP (basati sulla Responsability-Driven Developement), e i GoF (Gang-of-Four chiamati così perché gli autori del libro nel quale venivano esposti questi concetti erano quattro).

I design pattern possono essere classificati anche in base alla loro funzione o al loro uso e in questo caso abbiamo:

  • Pattern creazionali: Descrivono soluzioni per la creazione di vari oggetti con determinate caratteristiche tra le quali possiamo trovare: Uniche istanze (Singleton), appartenenti a una famiglia di classi (Factory) o utili a determinate funzionalità come ad esempio oggetti per acquisizione e rilascio di una risorsa (Object pool).
  • Pattern strutturali: Descrivono soluzioni a problemi architetturali del codice come l’adattamento, la separabilità, il riutilizzo.
  • Pattern ambientali: Descrivono le soluzione per la realizzazione di classi che interagiscono tra loro cercando di evitare il famoso “spaghetti code”.
  • Pattern concorrenti: Descrivono i pattern per la realizzazione di software con operazioni concorrenti (che utilizzano contemporaneamente una stessa risorsa).
  • Pattern SOA: Descrivono design pattern che vengono utilizzate per applicazioni che chiamato più servizi che devono interagire tra di loro.

Questi sono solo alcuni delle classificazioni esistenti, le più comuni nell’ambito lavorativo.

Creator e Information Expert

Ma arriviamo al nocciolo della questione… vi siete mai chiesti chi è il vero responsabile del vostro software? niente paura, a questo risponde GRASP!.

Iniziamo vedendo in particolare due dei design pattern appartenenti a questa famiglia
ovvero Creator ed Infomation Expert.

Creator risponde al problema: Date una serie di classi in un software, chi è la più adatta a creare un determinato oggetto?
In parole semplici: Dove devo mettere il new ClasseA()?.
La soluzione sembra logica ma non è cosi (altrimenti non esisterebbe lo spaghetti code) che la classe piu adatta a creare A deve soddisfare almeno una di queste caratteristiche:

“Contiene o aggrega una composizione di oggetti di tipo A.
Registra A
Utilizza strettamente A
Possiede i dati per inizializzare A”

Applicare UML e i Pattern, Analisi e Progettazione Orientata agli Oggetti, Pearson Italia febbraio 2016

La cosa non può essere vista genericamente, va decisa sul modello di dominio del progetto ma per portare alcuni semplici esempi (fatemi giocare con voi e suggerite nei commenti eventuali ipotesi se volete 😉 ) :

Io ho una scuola, questa contiene delle classi e ogni classe ha degli studenti.
Io creo pure un registro della scuola, lo studente lo devo associare al registro della scuola.
Beh sicuramente una scelta iniziale potrebbe essere (ed il bello è che non esiste per forza una sola soluzione corretta) le classi come composizione della scuola ma… quale è la migliore relazione con le classi registro e le classi studenti dal punto di vista del pattern creator?

Soluzione al problema utilizzando il pattern Creator

Chi la le informazioni per creare l’alunno, ad esempio potrebbe essere in questo caso il registro di classe nel quale possiamo associare anche voti, assenze, presenze o addirittura note ai singoli studenti. Quella nell’immagine in alto potrebbe essere una buona soluzione al problema proposto.

Informazion Expert invece risponde la problema: Chi è che conosce la classe A a partire da un suo identificatore?
Tradotto chi deve avere la responsabilità di gestiore e quindi restituire le informazioni di A a partire da un suo identificatore?. In pratica: Dove scrivereste metodi come getAlunno(“Pippo”)?.

Domanda: Chi affiderebbe questo compito alla classe Registro? chi a Classe?. Il suggerimento per la scelta è:

“Assegnare il compito alla classe che ha le informazioni necessarie per soddisfare la richiesta.”

Applicare UML e i Pattern, Analisi e Progettazione Orientata agli Oggetti, Pearson Italia febbraio 2016

Il che sembra anche logico.
In questo caso, la scelta migliore è quindi Registro, in quanto è lui che conosce le informazioni sugli alunni presenti in quella classe.

Spero che l’articolo vi sia piaciuto, questa è una prima versione. Vi invito a commentare e lasciare like in basso

Ciao
Simone R.

Fonti:

Simone Sante Ruffo
Diplomato al liceo scientifico, si è laureato in ingegneria informatica e delle telecomunicazioni e sta proseguendo ora gli studi in Ingegneria Elettronica per prendersi la laurea magistrale. Appassionato di informatica, telecomunicazioni ed elettronica gli piace studiare, conoscere, progettare e risolvere problemi
http://simonesanteruffo.it

Lascia una recensione

Please Login to comment

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.

  Subscribe  
Notificami
Top