La coesione riduce veramente l'accoppiamento?

5

' Le classi coesive riducono l'accoppiamento '

Quindi, se le classi coesive o le classi connesse riducono l'accoppiamento (unione), quale parte del puzzle mi manca?

A proposito, ho preso questa frase da un articolo sull'identificazione delle classi prima di qualsiasi sviluppo, che sto cercando di capire il senso del perché, quando, come usare "quella" particolare classe, il polimorfismo, l'astrazione, ecc.

Di sicuro sono nella fase iniziale per OOD. Ho letto alcuni libri ma non capisco la relazione tra coesione e accoppiamento.

    
posta John Smith Optional 06.08.2013 - 06:25
fonte

2 risposte

6

Non è contraddittorio; in realtà è un'idea piuttosto semplice in OOD. La maggior parte dei principi OOD si relazionano l'una con l'altra.

La coesione si riferisce al modo in cui una determinata funzionalità è modellata in un sistema; se quella funzionalità è implementata solo in un singolo modulo, allora quel modulo è altamente coesivo. D'altra parte, se una certa funzionalità è dispersa tra molti moduli, allora quei moduli hanno una coesione debole. Come esempio concreto sulla misurazione della coesione di una classe, si consideri una classe coesiva massima che utilizza tutti i suoi campi di istanza in tutti i metodi. Tuttavia nella pratica ciò non è sempre realizzabile o desiderabile.

L'accoppiamento deriva dal numero di interconnessioni tra i moduli e dalla forza di tali interconnessioni. Se i moduli si affidano molto l'un l'altro, un cambiamento in un modulo porta a cambiare in più moduli.

Come relazione tra di loro se una funzionalità è rappresentata da più moduli (coesione), allora quei moduli sono strettamente accoppiati al fine di ottenere quella funzionalità. Questo riguarda anche il Principio di Responsabilità Unica (e molti altri principi) che afferma che solo un modulo dovrebbe avere una sola ragione per cambiare, portando all'idea che un modulo dovrebbe avere una funzionalità.

Come libro di riferimento OOD raccomando Analisi e progettazione orientata agli oggetti di Grady Booch et al.

    
risposta data 06.08.2013 - 08:51
fonte
6

Non è affatto contraddittorio.

La Cohesion riguarda la concentrazione delle responsabilità di un dato modulo (o classe). Il più mirato, il più coeso. Una classe che fa solo una cosa è la più coesa di tutte. Ed è probabile che sia abbinato a (dipende da) pochissime altre classi, se ce ne sono.

Una classe che è meno coesa (in altre parole, ha più e varie responsabilità) è probabile che sia accoppiata a molte altre classi. Meno coesione, più accoppiamento.

Il nocciolo della frase "classi coesive riducono l'accoppiamento" è che se si costruiscono moduli più piccoli e focalizzati, ognuno di essi sarà probabilmente meno accoppiato rispetto a moduli più grandi e meno mirati. Una maggiore coesione consente una maggiore flessibilità durante la composizione dei moduli.

    
risposta data 06.08.2013 - 06:42
fonte

Leggi altre domande sui tag