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.