Զուգավորում ընդդեմ համախմբման
Զուգավորումը և համախմբումը երկու հասկացություններ են, որոնք հայտնաբերված են Java-ում (և օբյեկտ կողմնորոշված մյուս բոլոր լեզուներում): Զուգավորումը չափում է, թե ծրագրի մոդուլներից յուրաքանչյուրը որքանով է կախված մյուս ծրագրի մոդուլներից: Համախմբումը չափում է, թե գործառույթներից յուրաքանչյուրը որքանով է կապված մոդուլի ներսում: Իրականում, ցանկացած օբյեկտ կողմնորոշված լեզու (ներառյալ Java-ն) ունի երկու հիմնական նպատակ՝ ավելացնելու համախմբվածությունը և միաժամանակ նվազեցնել զուգավորումը՝ առավել արդյունավետ ծրագրեր մշակելու համար: Ծրագրային ապահովման ինժեներական այս երկու չափորոշիչները մշակվել են Լարի Կոնստանտինի կողմից՝ նվազեցնելու ծրագրային ապահովման փոփոխման և պահպանման ծախսերը:
Ի՞նչ է համախմբվածությունը:
Համախմբվածությունը չափում է, թե գործառույթներից յուրաքանչյուրը որքանով է կապված ծրագրի մոդուլի շրջանակներում: Լավ կառուցված դասերը հանգեցնում են բարձր համահունչ ծրագրերի: Եթե որոշակի դասը կատարում է խիստ կապված գործառույթների մի շարք, ապա այդ դասը կոչվում է համակցված: Մյուս կողմից, եթե դասը կատարում է մի շարք բոլորովին կապ չունեցող ֆունկցիոնալություններ, դա նշանակում է, որ դասը ընդհանրապես համահունչ չէ: Կարևոր է հասկանալ, որ համախմբվածություն չունենալը չի նշանակում, որ ընդհանուր հավելվածը չունի անհրաժեշտ ֆունկցիոնալությունը: Պարզապես, առանց համախմբվածության, շատ դժվար կլինի կառավարել ֆունկցիոնալությունը, քանի որ դրանք կցրվեն շատ սխալ վայրերում, քանի որ հավելվածի բարդությունը ժամանակի ընթացքում մեծանում է: Կոդով սփռված վարքագծի պահպանումը, փոփոխումը և ընդլայնումը շատ հոգնեցուցիչ է նույնիսկ ամենափորձառու ծրագրավորողների համար:
Ի՞նչ է զուգավորումը.
Զուգավորումը չափում է, թե ծրագրի մոդուլներից յուրաքանչյուրը որքանով է կախված մյուս ծրագրի մոդուլներից:Երկու օբյեկտների միջև փոխազդեցությունը տեղի է ունենում, քանի որ կա միացում: Լայն զուգակցված ծրագրերն ունեն բարձր ճկունություն և ընդարձակելիություն: Ուժեղ զուգավորումը երբեք լավ չէ, քանի որ մի առարկա կարող է մեծապես կախված լինել մեկ այլ օբյեկտից: Սա մղձավանջ է, երբ կոդը փոփոխվում է, քանի որ բարձր զուգավորումը նշանակում է, որ ծրագրավորողները պետք է աշխատեն կոդի մի քանի վայրերում նույնիսկ մեկ վարքագծային փոփոխության համար: Ուժեղ զուգավորումը միշտ հանգեցնում է ցածր ճկունությամբ և ավելի քիչ մասշտաբայնությամբ/ընդլայնելիությամբ ծրագրերի: Այնուամենայնիվ, Java-ի նման ծրագրավորման լեզուներում անհնար է ամբողջովին խուսափել միացումից: Բայց խորհուրդ է տրվում, որ ծրագրավորողները առավելագույն ջանքեր գործադրեն միացումը հնարավորինս նվազեցնելու համար: Հնարավոր է նաև որոշակի զուգավորում, որն օգնում է առարկաներին փոխազդել միմյանց հետ՝ չխոչընդոտելով դրա մասշտաբայնությունն ու ճկունությունը:
Ո՞րն է տարբերությունը միացման և համախմբման միջև:
Թեև կապը և համախմբումը կապված են ծրագրային ապահովման ճարտարագիտության մեջ մոդուլի որակի հետ, դրանք բոլորովին տարբեր հասկացություններ են:Համախմբումը խոսում է այն մասին, թե որքանով են ֆունկցիոնալությունը միմյանց հետ կապված մոդուլի ներսում, մինչդեռ զուգավորումը վերաբերում է նրան, թե որքանով է մեկ մոդուլը կախված ծրագրի մյուս մոդուլներից ամբողջ հավելվածում: Լավագույն որակի ծրագրակազմ ունենալու համար միաձուլումը և միացումը պետք է հասնեն իրենց սպեկտրի երկու հակառակ ծայրերին: Այլ կերպ ասած, չամրացված միացումը և ուժեղ միաձուլումը ապահովում են լավագույն ծրագրակազմը: Մասնավոր դաշտերը, ոչ հրապարակային դասերը և մասնավոր մեթոդները ապահովում են ազատ կապակցում, մինչդեռ բոլոր անդամները տեսանելի են դարձնում դասի ներսում և ունենալով փաթեթը որպես լռելյայն տեսանելիություն, ապահովում են բարձր համախմբվածություն: