Design Patterns con Netbeans
Abbiamo già visto qualche esempio di UML con Netbeans. Finora però abbiamo creato i diagrammi a mano, inserendo le classi, gli attributi e i metodi più adatti alla nostra situazione. Ora vogliamo rilassarci un po’ e lasciare che sia Netbeans a scrivere un po’ di diagrammi per noi. Come è possibile? Netbeans ha una collezione di Design Pattern che si possono utilizzare nei nostri progetti. I Design Pattern sono come schemi o “template” comunemente utilizzati nella progettazioni di applicazioni. Avere questi pattern a disposizione all’interno di Netbeans vuol dire poterli utilizzare e riutilizzare in continuazione, con conseguente risparmio di tempo.
Vediamo un esempio. Immaginiamo un’applicazione di networking. Vogliamo che esistano delle connessioni e che attraverso queste connessioni sia possibile trasmettere dati. Un tipo semplice di connessione è la connessione fisica, come p.e., una connessione punto-punto su doppino telefonico. Un altro tipo di connessione richiesta è la connessione crittata, cioè una connessione che nasconde i dati trasmessi.
Ora, ragionando in termini object-oriented, sarebbe possibile fare una classe ConnessioneFisica ed una classe ConnessioneCrittata completamente distinte, ma sarebbe uno spreco per due motivi.
Primo, con due classi non è possibile rendere una ConnessioneFisica e una ConnessioneCrittata intercambiabili. Dovrebbero avere qualcosa in comune – in termini object-oriented, un’interfaccia comune, che chiameremo Connessione.
Secondo, una ConnessioneCrittata è in realtà una specie di ConnessioneFisica ma con qualche funzionalità in più (la crittografia appunto). Si potrebbe rendere ConnessioneCrittata sottoclasse di ConnessioneFisica ma questo renderebbe statica la relazione fra le due. Piuttosto vorremmo che ConnessioneCrittata funga da “guscio” per ConnessioneFisica – un guscio che, data una ConnessioneFisica le aggiunga la funzione di crittografia in modo trasparente per l’utilizzatore.
Tutto quello che ho detto (e non andrò oltre nel nettaglio) non è altro che una situazione tipica gestibile con un Proxy Pattern. Ai nostri fini è importante sapere che c’è un’interfaccia comune (Connessione), un’implementazione di base (ConnessioneFisica) e un guscio/proxy con funzioni avanzate (ConnessioneCrittata). Sapendo solo questo, siamo già in grado di creare un diagramma elementare in Netbeans.

Semplice? meno di così non si poteva mettere…
Ora facciamo lavorare un po’ Netbeans. Selezioniamo con il mouse le tre classi – è sufficiente con lo strumento di selezione disegnare un rettangolo che le contenga. Dai menu del tasto destro del mouse selezioniamo “Apply Design Pattern…”. Comparirà un wizard. Clickiamo su “next” e sulla schermata successiva selezioniamo “GoF Design Patterns” e “Structural::Proxy” rispettivamente come “project” e “design pattern”.

Nella pagina successiva, che non mostro, è sufficiente selezionare il package che contiene le classi e clickare “next”. A questo punto arriva il bello. Compare una schermata in cui è necessario mappare i “ruoli” del design pattern ai “partecipanti”, cioè alle classi/interfacce java che realizzano il pattern. I ruoli offerti sono “Subject”, “RealSubject” e “Proxy” che noi mapperemo a “Connessione”, “ConnessioneFisica” e “ConnessioneCrittata”, come mostrato nella seguente figura.

Nella schermata ancora successiva selezionare che si vuole generare un diagramma e dargli un nome. Premere “Next” e quindi “Finish”.
Il risultato si può vedere nella seguente figura. Netbeans ha applicato il pattern creando gli attributi, le relazioni fra classi, e i metodi come richiesto dal Proxy Pattern.

Giampiero Granatella ha detto,
21 novembre 2006 a 10:15
Veramente interessante. Mi sembra che NB 5.5 dia molto peso ai pattern. Nel mio articoletto su XML Schema e Netbeans si vede come è possibile basarsi su un pattern per creare la struttura di uno schema.
Designs Patterns… più forte spinta su XML… più interfaccie grafiche per il Design di classi. NetBeans si sta muovendo verso il Model Driven Architecture?
E un’ultima domanda su NB 5.5 che conosco ancora poco. Lo strumento sta diventado interessante hanno messo dentro i framework struts e Java ServerFaces e hanno amplato le sezioni sul SOA. L’unico tassello che ancora non trovo è la mappatura fra DB relazionali e classi, è possibile farla tramite wizard o qualche framework?
paolo.predonzani ha detto,
21 novembre 2006 a 21:38
E’ vero, NB 5.5 permette di scrivere programmi molto più strutturati di quanto si potesse fare prima. Permette di legare la struttura object-oriented di Java a vari “mondi” esterni quali l’EAI (Enterprise Application Integration), i DB, le interfacce web.
Lo fa in una direzione MDA? Se intendiamo l’MDA di OMG non so risponedere. Bisognerebbe vedere se è nei “piani”. Se parliamo di model-driven in generale, sicuramente sì, con XML che svolge un ruolo di primo piano.
Il nuovo tool va sempre più d’accordo con JSF che ormai è in giro da qualche anno e stenta a decollare come diffusione. Questa potrebbe essere la volta buona. AJAX e altre mode a parte, mi sembra che JSF sia la vera linea strategica della Sun.
Mappatura OO-relazionale. Sì c’è qualcosa in Java EE 5, ripreso da NB 5.5. Non ho visto ancora molto. Ti rimando a questa pagina. Argomento da blog…
Giampiero Granatella ha detto,
15 febbraio 2007 a 15:46
Alla fine ho studiato la persistenza in J2EE e NetBeans sul mio blog.
Riporto il link http://www.giampierogranatella.com/blog/?p=133
Alla prossima feature di NB…