Monday, September 5, 2011

Dependency or Coupling


Dependency သို ့မဟုတ္ Coupling ဆိုတာ Software Engineering နယ္ပယ္မွာ
Module ေတြ တခုနဲ ့တခု (ခပ္လြယ္လြယ္ေျပာရင္ဗ်ာ)
Class ေတြ တခု နဲ ့ တခု
ဘယ္ေလာက္အတိုင္းအတာအထိ အျပန္အလွန္ မီွခိုေနၾကသလဲ
ဘယ္ေလာက္အတိုင္းအတာအထိ အျပန္အလွန္ ခိ်တ္ဆက္ထားၾကသလဲ
ဆိုတာကို ေဖၚျပတဲ့အခါမွာ သံုးတဲ့ ေဝါဟာရပါ။

ဥပမာ ကြ်န္ေတာ္တို ့မွာ Class A နဲ ့ Class B ဆိုျပီး ရိွတယ္ဆိုပါစို ့ဗ်ာ

၁။ Class A ဟာ class B ဆီက အေမြယူထားတယ္ဆိုရင္
တနည္းေျပာရရင္ Class A က Class B ကို inherit (extends/implements) လုပ္ထားရင္
ေနာက္တမို်းထပ္ေျပာရရင္ Class A ဟာ Class B ရဲ့  sub class / child class ျဖစ္ေနမယ္ဆိုရင္။

၂။ Class A ထဲမွာ Class B type member (variable/object) ပါေနမယ္ သံုးထားမယ္ ဆိုရင္။

၃။ Class A ထဲကေန Class B ရဲ့ member function တစ္ခုခုကို လွမ္းေခၚထားရင္(သံုးထားရင္)။

၄။ Class A ထဲက method/function တစ္ခုခုဟာ Class B က return ျပန္လာမယ့္ တန္ဘိုး တစ္ခုခုကို လက္ခံထားတယ္ဆိုရင္
ဒါမွမဟုတ္လဲ parameter က တစ္ဆင့္ တန္ဘိုးကို ရယူမယ္ဆိုရင္။
( ဥပမာေျပာရရင္ C# မွာ out / ref စတဲ့  key word ေတြသံုးျပီး ေခၚတဲ့ function/method ရဲ့ parameter ထဲကို ၊ အေခၚခံရတဲ့ function က တန္ဘိုး ျပန္ထည့္ေပးလိုက္သလိုမို်းေပါ့…)။

၅။ class A ဟာ Class B ကို မီွခိုေနရတဲ့ class တခုခုကို မီွခိုေနရတယ္ဆိုရင္..။

စတဲ့ အေျခအေနမို်းေတြရိွေနရင္  ဒီလိုအေျခအေနကို
Class A နဲ ့ Class B ဟာ coupled ျဖစ္ေနတယ္…တနည္းေျပာရရင္
Class A ဟာ Class B အေပၚမွာ  dependent ျဖစ္ေနတယ္ ေခၚတာေပါ့ဗ်ာ။

အတိုင္းအတာ အေနနဲ ့ေျပာရရင္ေတာ့
နဲနဲပဲ မီွခိုရင္ နဲနဲပဲ ခိ်တ္ဆက္ထားတယ္ဆိုရင္  loosely coupled /  low dependency ေပါ့
[Class A is loosely coupled with Class B.] သို ့မဟုတ္
[Class A has low dependency on Class B.]

အမ်ားၾကီး မီွခိုေနရင္၊  အမ်ားၾကီး ခိ်တ္ဆက္ထားတယ္ဆိုရင္
tightly coupled တစ္နည္းေျပာရရင္  high dependency ေပါ့ဗ်ာ။
[Class A is tightly coupled with Class B.] သို ့မဟုတ္
[Class A has high dependency on Class B.]

လူ ့ဘဝမွာ အမီွအခိုကင္းကင္း အေနွာင္အဖဲြ ့ကင္းကင္း၊ လံုးဝမကင္းနိုင္ရင္ေတာင္ တတ္နိုင္သမွ် နဲနဲပဲရိွမယ္ဆိုရင္ အေကာင္းဆံုးေပါ့။ အေနွာင္အဖဲြ ့ေတြဟာ ဘယ္ေလာက္ထိဆိုးဝါးသလဲ၊ သူတစ္ပါးကို မီွခိုေနရတဲ့ ဘဝဟာ ဘယ္ေလာက္ထိ အရည္အေသြး နိမ့္က်ေနသလဲ ဆိုတာ လူတိုင္းသိျပီးသားပါ။

အင္း...လူသားေတြမေျပာနဲ ့  ေဆာဖ့္ဝဲမယ္ေတာင္ ဒီသေဘာတရား အတိုင္းပါပဲဗ်ာ။ အေသးစိပ္ ထပ္ျပီးေဆြးေနြးၾကေသးတာေပါ့။

ရွြင္လန္းခ်မ္းေျမ့ပါေစ...




REF:
၁။ http://en.wikipedia.org/wiki/Coupling_%28computer_science%29
၂။ Microsoft .NET: Architecting Applications for the Enterprise
(2009 Microsoft Press)
By
Dino Esposito and Andrea Saltarello
Page 103, Chapter 3, Design Principles and Patterns

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.