Design Patterns – Introduzione

Cosa sono i Design Patterns e come usarli.

Quello dei Design Patterns è un argomento fondamentale nell’ambito dell’informatica e in particolare dell’ingegneria del software. Conoscere i design pattern è, a mio avviso, essenziale per incrementare notevolmente la qualità dei software e delle compotente di un programmatore.

In questo articolo, e la serie di articoli successivi, cerchiamo di spiegare brevemente che cosa sono i design pattern, quali sono, perché usarli e come usarli.

A chi è rivolto questa serie di articoli?

Questa serie di articoli sui design pattern è rivolta a coloro che hanno già esperienza nello sviluppo software orientato agli oggetti, che abbiano familiarità con i concetti di interfaccia, classe e oggetti. Non è richiesta esperienza specifica in un particolare linguaggio di programmazione per poter comprendere i concetti che verranno illustrati. Gli esempi forniti saranno in C++ e C#. Vi saranno inoltre alcuni diagramma UML per descrivere ciascun Design Pattern. Verranno fornite le basi per poterli interpretare.

Cosa sono i Design Patterns?

Un design pattern è una soluzione generica e ripetibile per risolvere un problema comune. Nascono come soluzione di problemi ricorrenti.

Inutile reinventarsi la ruota quando già migliaia di programmatori si sono trovati di fronte a problematiche simili e un design pattern offre proprio la risposta ai nostri dubbi architetturali.

Perché usarli

Permettono di creare software flessibili, mantenibili ed estensibili. Di implementare soluzioni dove sia facile integrare nuove funzionalità, rimuoverle, sostituirle o utilizzare il programma in situazioni differenti. Questo è da tenere bene in considerazione perché i requisiti software spesso (spessissimo) sono soggetti a cambiamento!

Aiutano a sviluppare software più velocemente creando architetture e componenti facilmente modificabili e facilmente riusabili.

Semplice esempio: potremmo scoprire di aver creato un’archiettettura tale che se un oggetto deve essere modificato, molti altri devono essere al corrente di questa modifica e subire cambiamenti di conseguenza. Questo richiederà più tempo per l’implementazione e introdurrà maggiore rischio di errori poiché dovremo metter mano a più parti di codice. Esiste un modo per strutturare classi e oggetti in modo che siano più indipendenti possibile l’uno dall’altro? I Design Patterns risponderanno a questo quesito.

Permettono inoltre di comunicare più facilmente con altri programmatori che lavorano sul nostro stesso progetto, rispetto a quelle che erano le nostra intenzioni quando abbiamo implementato una parte del software: “ehi, in questa parte ho usato lo Strategy Pattern per risolvere questo problema!”.

Quali sono

Un po’ di storia. Il concetto di design pattern in ambito informatico iniziò ad avere molto successo a partire dal saggio Design Patterns: Elements of Reusable Object-Oriented Software della cosidetta “Gang of four” costituita dai 4 informatici e scrittori: Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides. Il saggio è considerato un must-have da molti informatici. La “Ganf of Four” identificò 23 Design Patterns fondamentali, a cui se ne aggiunsero poi altri.

I Design Patterns si dividono in 3 categorie:

  • Creational patterns: per instanziare oggetti in un modo che nasconda il meccanismo della creazione al resto del programma.
  • Structural patterns: semplificazione le relazioni e le gerarchie tra classi differenti, rendono più facile il loro uso per creare entità più complesse.
  • Behavioral patterns: riguardo il modo in cui oggetti comunicano tra loro e si passano richieste.
design patterns elenco per categoria