Estoy tratando de aprender GRASP y encontré esto explicado ( aquí en la página 3 ) sobre Acoplamiento bajo y me sorprendió mucho cuando encontré esto:
Considere el método
addTrack
para unaAlbum
clase, dos métodos posibles son:
addTrack( Track t )
y
addTrack( int no, String title, double duration )
¿Qué método reduce el acoplamiento? El segundo sí, ya que la clase que usa la clase Álbum no tiene que conocer una clase Track. En general, los parámetros de los métodos deben usar tipos base (int, char ...) y clases de los paquetes java. *.
Tiendo a estar de acuerdo con esto; Creo que addTrack(Track t)
es mejor que addTrack(int no, String title, double duration)
por varias razones:
Siempre es mejor que un método tenga la menor cantidad de parámetros posible (de acuerdo con el Código de limpieza del tío Bob, ninguno o uno preferiblemente, 2 en algunos casos y 3 en casos especiales; más de 3 necesitan refactorización; estas son, por supuesto, recomendaciones, no reglas de acebo) .
Si se
addTrack
trata de un método de una interfaz, y los requisitos necesitan queTrack
se tenga más información (por ejemplo, año o género), entonces la interfaz debe cambiarse y el método debe admitir otro parámetro.La encapsulación está rota; si
addTrack
está en una interfaz, entonces no debe conocer los elementos internos deTrack
.En realidad, está más acoplado en la segunda forma, con muchos parámetros. Supongamos que el
no
parámetro necesita ser cambiado deint
along
porque hay más deMAX_INT
pistas (o por cualquier razón); entonces, tanto elTrack
método como el método deben cambiarse, mientras que si el método fueraaddTrack(Track track)
solo elTrack
, se cambiaría.
Los 4 argumentos están realmente conectados entre sí, y algunos de ellos son consecuencias de otros.
¿Qué enfoque es mejor?