Login
Cerca all'interno di JavaPortal
Help
Home Page Documentazione Forum Progetti Partner Pubblica!
Documentazione > Tutorial > GRASP : Pattern Low Coupling
Modifica Impostazioni
Hide
Best Practices
EJB
Frameworks
Howto
J2EE
J2ME and Wireless
J2SE
JSP e Servlet
Java Application Server
Java IDE/Tools
Java Media
Java Security
Java Sys Admin
Java e XML
Java e SQL
OpenSource Java
Patterns
Repository
Tesi
UML
Web Services
Slide
White Paper di jws.it
project management
Eventi
Groovy

Hai una tesi in Java?
Tesine preparate
per esami?
Pubblica tutto su
JavaPortal!

Scrivi al nostro staff


Java Application Server day 2009


Henry Ford
Vero progresso quando i vantaggi di una nuova tecnologia diventano per tutti


Esempi pratici con Spring - La Dependency Injection e il TDD - Seconda Parte


Rss Feed
Home Page
Articoli
News
Forum
Classi

  Visualizza Commenti (0) Aggiungi Commento    
Add to Shortcuts
 
Vota l'articolo
GRASP : Pattern Low Coupling
By Luana Rinaldi
7 aprile 2008

  GRASP : Pattern Low Coupling
Program Problema: Come ridurre l’impatto ai cambiamenti?
Program Soluzione
Program Conseguenze
Program Esempio
Program Pattern Correlati
Program Conclusioni
Program Bibliografia

L'accoppiamento (coupling) è la misura di quanto fortemente un elemento è connesso, conosce e/o dipende da altri elementi: nella progettazione di un sistema di classi, l’accoppiamento si traduce nel numero di relazioni tra di esse.

La presenza massiccia di queste relazioni tra classi può ovviamente presentare numerosi problemi in termini di estensibilità, manutenzione e flessibilità. Infatti, il forte accoppiamento tra classi presenta diversi problemi nel caso in cui una delle classi coinvolte dovesse subire delle modifiche di progettazione.

I problemi più comuni sono i seguenti:

  • Un cambiamento nella classe principale, genera necessariamente cambiamenti nelle classi correlate;
  • Risulta molto difficile isolare e riusare le classi connesse;  

Esistono diverse forme in cui può manifestarsi l’accoppiamento tra classi.
E’ importante sottolineare però che queste condizioni, se verificate, non costituiscono in assoluto un errore di progettazione, ma sono parte della normale implementazione di un sistema; d’altro canto, l’uso eccessivo di questo tipo di correlazioni genera invece il problema affrontato in questo articolo.

Le forme comuni di accoppiamento tra due oggetti A e B:

  • La classe A ha un membro di tipo B o referenzia una istanza di B;
  • A richiama e usa  i servizi di B;
  • A ha un metodo che possiede un elemento di tipo B, o che referenzia una istanza di B;
  • A è una classe derivata direttamente o indirettamente dalla classe base B;
  • A implementa un’interfaccia di tipo B;


Dai punti elencati si evidenzia il fatto che l’accoppiamento si manifesta in diverse situazioni facenti parte della normale progettazione del software, ma l’abuso di esse comporta diversi problemi, analizzati in seguito.

Passiamo ora alla definizione formale del Pattern Low Coupling:

Nome:   Low Coupling
Problema:    Come ridurre l’impatto ai cambiamenti?
Soluzione:    Assegnazione delle responsabilità in modo tale che l’accoppiamento non necessario rimanga basso.

Affrontiamo più nel dettaglio la specifica del pattern.



Problema: Come ridurre l’impatto ai cambiamenti? top

Come già detto, l’obiettivo di questo pattern è la progettazione delle dipendenze tra le varie classi in modo da minimizzare gli impatti alla variazione di una di esse: questo obiettivo può essere raggiunto tramite la riduzione dell’accoppiamento tra classi.

In realtà, è necessario effettuare una precisazione a questo principio: Low Coupling sostiene che sarebbe da evitare l’accoppiamento con classi ( metodi o oggetti) definiti ‘instabili’ , ossia classi la cui implementazione può variare con una certa frequenza, e quindi rendere instabile l’intero codice. 



Soluzione top

Low Coupling riflette un obiettivo che viene spesso considerato dai designer come un parametro fondamentale di valutazione della qualità di progettazione del software: esso infatti incoraggia a scegliere una distribuzione di responsabilità che non faccia crescere il grado di accoppiamento nell’applicazione, in funzione dell’indipendenza e del riuso.

E’ da sottolineare che questo principio, comunque, non risulta essenziale se non si ha come obiettivo il riuso, anche se un forte disaccoppiamento fra classi comporta sicuramente dei deficit in termini di complessità del design e di efficienza del codice.
Si potrebbe infatti pensare alla situazione limite, in cui non esiste alcun accoppiamento fra classi: in teoria, questo potrebbe essere una condizione ottima per l’applicazione di questo principio, ma, d’altro canto, risulta irrealizzabile, e indesiderabile, in quanto non sussisterebbe la collaborazione tra gli oggetti, quindi ognuno di essi svolgerà il proprio compito in maniera del tutto isolata dal resto.



Conseguenze top

Una considerazione molto importante da sottolineare è la correlazione esistente tra il pattern Information Expert e il patter Low Coupling.

Information Expert, infatti, guida verso una scelta che sostiene Low Coupling, chiedendo di trovare l’oggetto che possiede la maggior parte delle informazioni richieste per la responsabilità in oggetto d’esame, e di assegnare quindi a quest’ultimo la responsabilità d svolgere quel determinato compito. Infatti, se si delega altrove questo compito, si aumenta l’accoppiamento complessivo, in quanto saranno presenti più oggetti o informazioni che devono essere condividi lontano dalla loro sorgente originale.



Esempio top

Supponiamo di dover implementare un client ftp. Una sbagliata progettazione sarebbe quella di includere la logica per la gestione delle connessioni client ftp all’interno dello strato che modella l’interfaccia utente. Questa situazione, infatti, comporterebbe numerosi problemi nel caso in cui si abbia la necessità di variare l’implementazione dell’interfaccia stessa, ad esempio fornire un’interfaccia testuale.

Low Coupling, insieme al pattern MVC ( Model-View-Controller) suggerisce invece di separare la logica di business dall’interfaccia grafica, quindi, di conseguenza, ridurre l’accoppiamento tra questi due strati, in modo da limitare al minimo gli interventi in caso di sostituzione, parziale o totale, di uno di essi. L’applicazione di Low Copuling in questo genere di situazioni è anche supportata dal fatto che l’interfaccia grafica, come anche gli strati di persistenza, viene  generalmente considerata come una componente instabile del sistema, che può subire spesso variazioni.



Pattern Correlati top

Patern High Coesion (GRASP)
Pattern Protected Variations (GRASP)
Pattern Adapter (GOF)
Pattern Command (GOF)
Pattern Strategy (GOF)

Conclusioni top


Come abbiamo visto, Low Copuling non è un vero e proprio pattern, ma piuttosto un principio da applicare per una corretta progettazione, soprattutto in casi in cui il riuso rappresenta una caratteristica importante per il sistema che si sta implementando.

Nel prossimo articolo analizzeremo un altro principio strettamente correlato a questo: High Coesion.



Bibliografia top
[1] LowCouplingPattern di Ugo Landini

[2] Applying GRASP to Object Design - Creator GRASP Pattern - Who is responsible for creating a class? - Applying UML and Patterns

[3] Gamma, Erich. “Object Oriented Software Development based on ET++: Design Patterns, Classe Library, Tools.”  Tesi di Dottorato, University of Zurich, Institut Fur Informatik, 1991.

[4] Gamma, Helm, Johnson, Vlissides. “Design Patterns: Elements of Reusable Object-Oriented Software”, Pearson Education Inc., 1995.

[5] Larman, Craig. “Applying UML and Patterns :An Introduction to Object-Oriented Analysis and Design and the Unified Process”, Pearson Education Inc., 2005.

[6] Object Management Group, 2003. UML 2.0 Superstructure Specification. www.uml.org.  




Username:
Password:
To sign up for an account, click register... Register
Hide





Powered By



Campagna Anti-IF


Skin


PARTNER
Zio Budda
HostingJava


LICENZA



Eccetto dove diversamente specificato, i contenuti di questo sito sono rilasciati sotto licenza Creative Commons

Sitemap  © 2002-2004 Copyright Information. Privacy . Today is domenica 1 agosto 2010