Acoblament vs cohesió
L'acoblament i la cohesió són dos conceptes que es troben a Java (i a tots els altres llenguatges orientats a objectes). L'acoblament mesura fins a quin punt cadascun dels mòduls del programa depèn dels altres mòduls del programa. La cohesió mesura amb quina força es relacionen cadascuna de les funcions dins d'un mòdul. De fet, qualsevol llenguatge orientat a objectes (inclòs Java) té els dos objectius principals d'augmentar la cohesió i disminuir l'acoblament alhora, per tal de desenvolupar programes més eficients. Aquestes dues mètriques d'enginyeria de programari van ser desenvolupades per Larry Constantine per reduir el cost de modificar i mantenir el programari.
Què és la cohesió?
La cohesió mesura la forta relació de cadascuna de les funcions dins d'un mòdul de programa. Les classes ben estructurades donen lloc a programes molt cohesionats. Si una classe determinada està realitzant un conjunt de funcions molt relacionades, es diu que aquesta classe és cohesionada. D' altra banda, si una classe està realitzant un munt de funcionalitats totalment no relacionades, vol dir que la classe no està gens cohesionada. És important entendre que no tenir cohesió no vol dir que l'aplicació global no tingui la funcionalitat requerida. És que sense cohesió, serà molt difícil gestionar la funcionalitat perquè es dispersaran en molts llocs equivocats a mesura que la complexitat de l'aplicació augmenta amb el temps. Mantenir, modificar i ampliar comportaments repartits per tot el codi és molt tediós fins i tot per als programadors més experimentats.
Què és l'acoblament?
L'acoblament mesura fins a quin punt cadascun dels mòduls del programa depèn dels altres mòduls del programa. Les interaccions entre dos objectes es produeixen perquè hi ha acoblament. Els programes poc acoblats tenen una gran flexibilitat i extensibilitat. Un acoblament fort mai és bo perquè un objecte pot dependre molt d'un altre objecte. Això és un malson quan es modifica el codi, perquè l'acoblament elevat significa que els programadors han de treballar en diversos llocs de codi fins i tot per a una única modificació del comportament. Un acoblament fort sempre condueix a programes amb poca flexibilitat i menys escalabilitat/extensibilitat. Tanmateix, en llenguatges de programació com Java, evitar completament l'acoblament és impossible. Però es recomana que els programadors facin tot el possible per reduir l'acoblament tant com sigui possible. També és possible tenir algun acoblament per ajudar els objectes a interactuar entre ells sense perjudicar la seva escalabilitat i flexibilitat.
Quina diferència hi ha entre l'acoblament i la cohesió?
Tot i que l'acoblament i la cohesió tracten amb la qualitat d'un mòdul en enginyeria del programari, són conceptes completament diferents. La cohesió parla de quant es relacionen les funcionalitats entre si dins del mòdul, mentre que l'acoblament tracta de quant un mòdul depèn dels altres mòduls del programa dins de tota l'aplicació. Per tenir el programari de millor qualitat, la cohesió i l'acoblament haurien d'arribar als dos extrems oposats dels seus espectres. En altres paraules, un acoblament fluix i una forta cohesió ofereixen el millor programari. Tenir camps privats, classes no públiques i mètodes privats proporcionen un acoblament fluix, alhora que fa que tots els membres siguin visibles dins de la classe i tenir el paquet com a visibilitat predeterminada proporciona una gran cohesió.