Composite & Visitor ovvero: come i pattern si legano al memory management

Eccoci alla seconda puntata del nostro blog preferito,
il tema che tratteremo nei prossimi giorni è decisamente sfidante
e pretenzioso Composite & Visitor.

La GOF classificò i pattern in famiglie:
- creational
- behavioral
- structural

Composite è un pattern della famiglia structural.
Lo scopo del composite è gestire in maniera organica alberi di oggetti
(ricorda un po' un frattale).





La grande flessibilità di un Composite ne limita l'estensione nel comportamento.

I principi di incapsulamento, propri della programmazione Object Oriented, consigliano di mantenere le interfacce degli oggetti contenute, pochi metodi strettamente collegati al comportamento dell'oggetto da trattare.

Un Composite prevede di raggruppare il più possibile, questo implicherebbe interfacce della classe padre "ingombranti".





Il Visitor ci può venir in aiuto, scopo del visitor è quello di dare comportamento ad oggetti.
Visitor appartiene alla famiglia dei pattern behavioral.
Gli oggetti possono essere tra loro scorrelati, basta che nella loro interfaccia siano capaci
di accettare un "visitatore" ;-)
PS: vedi anche Iterator.


Come in tutte le scelte progettuali ci sono vantaggi e svantaggi:

Composite offre un interfaccia unica per gerarchie di oggetti complessi, ne semplifica la creazione di nuovi, ma è limitante per quel che riguarda l'estensione dell'interfaccia;

Visitor offre la possibilità di aggiungere comportamento, ma non è flessibile per aggiungere nuovi oggetti;

quindi, beh scegliete voi ;-)










Ma come diceva una nota canzone di Ivan Graziani: "tutto questo cosa c'entra con il..."
memory management.

Finora non abbiamo parlato delle strutture dati per contenere gli alberi di oggetti, né
di STL.
STL è un fantastico acronimo per Standard Template Library.
STL è una libreria che sfrutta una feature molto potente del c++: i template.
I template sono un argomento che merita un post a sé, ma tanto per far venire un po' di acquolina cominciamo a trattarne almeno uno: auto_ptr.

auto_ptr è uno strumento estremamente utile per avere un memory management semplice
ed efficiente, il problema è che non può essere usato nelle altre strutture STL, che tipicamente sono utilizzate nei Composite ;-)

A proposito del codice lo potete trovare qui.

Cheers

Commenti

Post popolari in questo blog

Peer reviews catch 60% of the defects...

JNI? there's someone who remembers something?