Sto cercando di imparare GRASP e ho trovato questo spiegato ( qui a pagina 3 ) su Low Coupling e sono rimasto molto sorpreso quando ho trovato questo:
Consider the method
addTrackfor anAlbumclass, two possible methods are:
addTrack( Track t )and
addTrack( int no, String title, double duration )Which method reduces coupling? The second one does, since the class using the Album class does not have to know a Track class. In general, parameters to methods should use base types (int, char ...) and classes from the java.* packages.
 Tendo a diasgree con questo; Credo che   addTrack(Track t)    sia migliore di   addTrack(int no, String title, double duration)    a causa di vari motivi: 
-  È sempre meglio per un metodo avere il minor numero possibile di parametri (secondo il Codice pulito di Uncle Bob nessuno o uno preferibilmente, 2 in alcuni casi e 3 in casi speciali; più di 3 necessita di refactoring - questi sono di Raccomandazioni sui corsi non sulle regole dell'agrifoglio). 
-  Se addTrackè un metodo di un'interfaccia e i requisiti richiedono che unTrackdebba avere più informazioni (ad esempio anno o genere), l'interfaccia deve essere modificata e il metodo deve supportare un altro parametro.
-  L'incapsulamento è rotto; se addTrackè in un'interfaccia, allora non dovrebbe conoscere le parti interne diTrack.
-  In realtà è più accoppiato nel secondo modo, con molti parametri. Supponiamo che il parametro nodebba essere cambiato daintalongperché ci sono più diMAX_INTtracce (o per qualsiasi ragione); quindi sia ilTrackche il metodo devono essere modificati mentre se il metodo sarebbeaddTrack(Track track)solo laTrackverrebbe modificata.
Tutti e 4 gli argomenti sono effettivamente connessi tra loro, e alcuni di essi sono conseguenze di altri.
Quale approccio è migliore?