Encapsulation vs Data hiding
ဒီနှစ်ခုက ဆပ်စပ်နေတယ် တူတော့မတူဘူး။
Encapsulation ဆိုတာ သူ့ data နဲ့ သူ့ Object method စတာတွေတွဲပြီးအလုပ်လုပ်တာပြောတာ။
ဥပမာ Imperative style နဲ့ stack ADT(Abstract Data Type) တည်ဆောက်မယ်ဆိုရင် push ဆိုတဲ့ method အတွက် ဒီလိုရေးရမယ်။
void push(array,top,element)
ဒီနေရာမှာ Stack push အတွက် လိုအပ်တဲ့ array, top, element စတာတွေကိုပေးရမယ်။
push တခါခေါ်တိုင်း သူနဲ့တူတူအလုပ်လုပ်ဖို့ data ပေးနေရတာကပြဿနာတခုပဲ။အဲ့ပြဿနာတွေကိုဖြေရှင်းဖို့ imperative language တွေမှာ structure ကိုသုံးလို့ရတယ်
ဒီလိုဖြစ်သွားမယ်
push(stack, element)
အဲ့မှာလဲ ခုနက element တင်မဟုတ်ပဲ stack structure ကိုပေးရတုန်းပဲ။ ဘာလို့ဆိုတော့ data နဲ့ code တွဲပြီးမလုပ်နိုင်လို့ Encapsulation မရှိလို့။
OO System မှာကျတော့ သူ့ data, code နဲ့သူ လုပ်တော့
class Stack{
//data
push()
}
stack.push(10) ဆိုပြီး ခုနက ဘယ် data နဲ့လုပ်ပါဆိုတာပြောစရာမလိုဘူး သူ့ state နဲ့သူသိပြီးသား
အဲ့တော့ ထိန်းရတာလွယ်သွားတယ်။
နောက်တခုက သူ့ အထဲက implementation ဖြစ်တဲ့ stack data , top စတာတွေကိုသူများက လာမထိအောင်ကာလိုက်လို့ရတယ်။အဲ့တော့ Encapsulation လို့ပြောရင် သူ့ data နဲ့သူ့ code တွဲအလုပ်လုပ်တာနောက်တခုက သူ့ data ကိုပြင်ပကပြင်လို့မရအောင်ထိန်းတာဆိုတဲ့သဘောပဲ။
ပြင်ပက သူ့ internal data ကိုလာသုံးလို့မရအောင် ကာကွယ်ဖို့ , invalid operation တွေလုပ်မရအောင်ကာဖို့ သဘောပဲ၊ Java,C++,C# လိုကောင်တွေမှာ private လိုကောင်တွေပေးထားတယ်။
ဒါသည် data hiding ပဲ။ Data hiding ရဲ့သဘောသည် ပြင်ပကနေ သူ့ data ကို လာသုံးလို့မရအောင်ကာထားပေးတဲ့သဘောပဲ။