Coupling vs Cohesion
Ang coupling at cohesion ay dalawang konsepto na matatagpuan sa Java (at lahat ng iba pang object oriented na wika). Sinusukat ng coupling kung gaano nakadepende ang bawat isa sa mga module ng programa sa iba pang mga module ng programa. Sinusukat ng cohesion kung gaano kalakas ang pagkakaugnay ng bawat isa sa mga function sa loob ng isang module. Sa totoo lang, anumang object oriented na wika (kabilang ang Java) ay may dalawang pangunahing layunin ng pagtaas ng cohesiveness at pagpapababa ng coupling sa parehong oras, upang makabuo ng pinaka mahusay na mga programa. Ang dalawang sukatan ng software engineering na ito ay binuo ni Larry Constantine upang bawasan ang gastos sa pagbabago at pagpapanatili ng software.
Ano ang Cohesion?
Ang Cohesion ay sumusukat kung gaano kalakas ang kaugnayan ng bawat isa sa mga function sa loob ng isang module ng programa. Ang maayos na mga klase ay humahantong sa lubos na magkakaugnay na mga programa. Kung ang isang partikular na klase ay gumaganap ng isang hanay ng mga lubos na nauugnay na pag-andar, ang klase na iyon ay sinasabing cohesive. Sa kabilang banda, kung ang isang klase ay gumaganap ng isang grupo ng mga ganap na hindi nauugnay na pag-andar na nangangahulugan na ang klase ay hindi magkakaugnay. Mahalagang maunawaan na ang hindi pagkakaroon ng cohesiveness ay hindi nangangahulugan na ang pangkalahatang aplikasyon ay walang kinakailangang functionality. Kaya lang kung walang cohesion, napakahirap na ayusin ang functionality dahil magkakalat sila sa maraming maling lugar habang lumalaki ang pagiging kumplikado ng application sa paglipas ng panahon. Ang pagpapanatili, pagbabago, at pagpapalawak ng mga gawi na nakakalat sa buong code ay nakakapagod kahit para sa mga programmer na may pinakamaraming karanasan.
Ano ang Coupling?
Sinusukat ng coupling kung gaano nakadepende ang bawat isa sa mga module ng program sa iba pang mga module ng program. Ang mga pakikipag-ugnayan sa pagitan ng dalawang bagay ay nangyayari dahil may pagkabit. Ang mga maluwag na pinagsamang programa ay mataas sa flexibility at extensibility. Ang malakas na pagkakabit ay hindi kailanman mabuti dahil ang isang bagay ay maaaring lubos na nakadepende sa ibang bagay. Ito ay isang bangungot kapag ang code ay binago, dahil ang mataas na pagkabit ay nangangahulugan na ang mga programmer ay kailangang magtrabaho sa ilang mga lugar ng code para sa kahit isang pagbabago sa pag-uugali. Ang malakas na pagkakabit ay palaging humahantong sa mga programang may mababang flexibility at mas kaunting scalability/extensibility. Gayunpaman, sa mga programming language tulad ng Java, ang ganap na pag-iwas sa pagkabit ay imposible. Ngunit inirerekomenda na ang mga programmer ay magbigay ng kanilang pinakamahusay na pagsisikap upang mabawasan ang pagkabit hangga't maaari. Posible ring magkaroon ng ilang coupling upang matulungan ang mga bagay na makipag-ugnayan sa isa't isa nang hindi napipigilan ang scalability at flexibility nito.
Ano ang pagkakaiba ng Coupling at Cohesion?
Kahit na ang coupling at cohesion ay tumatalakay sa kalidad ng isang module sa software engineering, ang mga ito ay ganap na magkakaibang mga konsepto. Pinag-uusapan ng Cohesion kung gaano kaugnay ang functionality sa isa't isa sa loob ng module, habang ang coupling ay tumatalakay sa kung gaano nakadepende ang isang module sa iba pang mga module ng program sa loob ng buong application. Upang magkaroon ng pinakamahusay na kalidad ng software, dapat maabot ng cohesion at coupling ang dalawang magkabilang dulo ng kanilang spectrum. Sa madaling salita, ang maluwag na pagkakabit at malakas na pagkakaisa ay nagbibigay ng pinakamahusay na software. Ang pagkakaroon ng mga pribadong field, hindi pampublikong klase at pribadong pamamaraan ay nagbibigay ng maluwag na pagkakabit, habang ginagawang nakikita ang lahat ng miyembro sa loob ng klase at ang pagkakaroon ng package bilang default na visibility ay nagbibigay ng mataas na pagkakaisa.