Archivio

Archive for settembre 2010

GoF Patterns: Singleton

20 settembre 2010 4 commenti

Translate in English with Google Translate
Il Singleton è un pattern descritto dal celebre libro “Design Pattern” scritto dalla “Gang of Four”. Viene utilizzato quando si ha la necessità di avere una sola istanza di una classe. Ma non sempre ciò avviene. Perchè ? Scopriamolo insieme.

Introduzione ai Design Patterns.

Prima di andare nel dettaglio dell’articolo, faccio una breve introduzione ai Design Patterns presentati in questo libro.

I Pattern vengono divisi in base a 2 criteri: lo scopo e il raggio di azione.

In base allo scopo, i Pattern, si distinguono in 3 gruppi:

  1. Creazionali: pongono attenzione al modo in cui gli oggetti devono essere creati
  2. Strutturali: si riferiscono al modo in cui le classi e gli oggetti vengono composti
  3. Comportamentali: si concentrano sulle interazioni che avvengono tra classi e oggetti

Mentre invece in base al raggio di azione si distinguono in 2 gruppi:

  1. Classi: si concentrano sulla relazione di ereditarietà delle classi, definita a compile-time quindi statica
  2. Oggetti: si focalizzano sulla relazione tra gli oggetti, definita a run-time quindi dinamica

Leggi tutto…

Categorie:GOF Pattern, java

La memoizzazione in Java

8 settembre 2010 1 commento

Translate in English with Google Translate
No, non ho sbagliato a scrivere, volevo proprio dire memoizzazione e non memorizzazione, non mi sono mangiato la “erre” 😉

Definizione
La memoizzazione è una tecnica ereditata dai linguaggi funzionali; significa letteralmente “mettere in memoria” e viene utilizzata per conservare in memoria i dati ottenuti da una elaborazione e velocizzare i tempi di risposta in caso di una successiva invocazione. Il termine fu coniato da Donald Michie nel suo articolo “Memo functions and machine learning” (1968) su Nature.

La memorizzazione invece ha un significato più ampio ed utilizza qualunque supporto di memorizzazione e non solo la memoria dell’elaboratore.

La memoria cache è anch’essa una tecnica utilizzata per accellerare i tempi di risposta mantenendo in memoria i dati ma, a differenza della memoizzazione, il risultato dell’elaborazione dipende anche da variabili esterni alla funzione che, subendo delle modifiche, possono cambiare l’output. Questo comporta che i dati presenti nella cache dovranno essere continuamente sincronizzati nel tempo per poter essere aggiornati in base alle modifiche effettuate. Cio’ non avviene nel caso della memoizzazione in quanto l’elaborazione non è condizionata da fattori esterni quindi il dato in memoria resta valido nel tempo e non subisce alcuna modifica.

Leggi tutto…

Categorie:java