ကလပ်စ်

ကလပ်စ် (class) ရေ၊ ကလပ်စ်ကိုအခြီခံရေ Object Orientedဘာသာရပ် တွင်ဟိရေ Object တိဧ မြေပုံကြမ်း(Blue Print) တစ်ခုဖြစ်ဧ။  တဖန် Object ဆိုစွာမှာ ကွန်ပျူတာပရိုဂရမ်ထဲတွင် အချက်အလက်နန့် လုပ်ဆောင်ချက်တိကို စုစည်းပနာ လက်တွိ့လောကထဲတွင် တည်ဟိရေ ရုပ်ဝတ္တုတစ်ခုကို ကိုယ်စားပြုထားရေ စိတ်ကူးယဉ် အချက်အလက် ပုံစံ တစ်မျိုးဖြစ်ဧ။ Object တွင် ပိုင်ဆိုင်သင့်ရေ အချက်အလက်နန့် လုပ်ဆောင်ချက်တိကို သက်မှတ်ထားရေမှာ ကလပ်စ်ဖြစ်ဧ။ ကလပ်စ်ဧသက်မှတ်ချက်တိ ဖြည့်စည်းပြီး ကွန်ပျူတာ ပရိုဂရမ်ထဲတွင် ပြုလုပ်ထားရေ Object အား အင်းစတန့်စ်ဟုလည်း ခေါ်ဆိုရေ။ 

အထက်ကဖော်ပြခရေ ကလပ်စ်တစ်ခုတွင် အင်းစတန့်စ်ဧ ပိုင်ဆိုင်သင့်ရေ အချက်အလက်တိနန့် လုပ်ဆောင်ချက် မက်သတ် တိကို ရီးသားထားရေ။ အသုံးပြုနိုင်ရေ အချက်အလက်တိကို (public၊ private၊ protected)နန့် ပြောင်းလဲနိုင်ခြင်းကို final၊ constant အစဟိသဖြင့် ဖော်ပြနိုင်ရေ။

ကလပ်စ်ရေ Object Oriented ဧအခြီခံ အတိးအခေါ်တိ ဖြစ်ကတ်ရေ ထုပ်ပိုးထားနိုင်ခြင်း (Encapsulation)၊ အမွေဆက်ခံခြင်း (Inheritance) နန့် အသွင်ပြောင်းလဲနိုင်ခြင်း (Polymorphism) အစဟိရေအတိးအခေါ်တိကို ပုံဖော်နိုင်ရေ နည်းလမ်းကောင်းတစ်ခုဖြစ်ဧ။

## ထုပ်ပိုးထားနိုင်ခြင်း (Encapsulation)
အထက်ကဖော်ပြခရေ ကလပ်စ်တစ်ခုတွင် အင်းစတန်စ်က ပိုင်ဆိုင်သင့်ရေ၊ တနည်း လုပ်ဆောင်နိုင်စွမ်းဟိရေ အချက်အလက်တိနန့် လုပ်ဆောင်ချက်တိကို ရီးသားသက်မှတ်ထားဧ။ ဒေပိုင် အချက်အလက်တိနန့် လုပ်ဆောင်ချက်တိကို တနီရာစီတွင်ရီးသားထားခြင်းမဟုတ်ပဲ ကလပ်စ်တစ်ခုအနိန်နန့် စုစည်းရီးသားထားခြင်း အားဖြင့် အချက်အလက်တိဧ ပတ်သက်မှု့နန့် အင်းစတန်စ်ဧ တာဝန်ကို ပြတ်သားစွာသတ်မှတ်ပီးနိုင်ရေ။ ဒေပိုင် စုစည်းထားခြင်းကို ထုပ်ပိုးထားနိုင်ခြင်း (Encapsulation)ဟုခေါ်ဆိုရေ။

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

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

## အမွေဆက်ခံခြင်း(Inheritance)
ကလက်စ်တစ်ခုအား အခြီခံပနာ အခြားရေကလပ်စ်တစ်ခုအား ပြုလုပ်ခြင်းကို အမွေဆက်ခံခြင်းဟုခေါ်ဆိုဧ။ အမွေဆက်ခံခြင်းကို ဆင့်ပွားပြုပြင်(Extension)ခြင်းဟုလည်း ခေါ်ဆိုလေ့ဟိပြီး၊ UML ဘာသာရပ်တွင် အခြီခံပြုခြင်း (generalization) ဟုလည်း ခေါ်ဆိုရေ။ အမွေဆက်ခံရာတွင် အခြီခံပြုခရေ ကလပ်စ်အား မိဘကလပ်စ်၊ အခြီခံကလပ်စ်၊ စူပါကလပ်စ် ဟုခေါ်ဆိုလေ့ဟိပြီး၊ အမွေဆက်ခံရေ ကလပ်စ်အား သားသမီးကလက်စ်၊ ဆင့်ပွားကလပ်စ် ဒါမှမဟုတ် Sub ကလပ်စ်ဟု ခေါ်ဆိုလေ့ဟိကြဧ။

စူပါကလပ်စ်တိကို အခြီခံကလပ်အဖြစ် အမွေဆက်ခံခြင်းအား အများစုမှ အမွေဆက်ခံခြင်းဟုခေါ်ဆိုပြီး၊ စူပါကလပ်စ်တိဧ နာဖို့တူမက်သတ်တိကြောင့် ဖြစ်လီါ်တက်ရေ ပြဿနာတိ ဟိတတ်ကြဧ။ Java၊ C# နန့် D ဘာသာရပ်တိတွင် အများစုမှ အမွေဆက်ခံခြင်းကို ခွင့်ပြုထားခြင်းမဟိပါ။ သို့ရာတွင် အမျိုးမျိုး တာဝန်တိကို ထမ်းဆောင်နိုင်စီရန် အင်တာဖေစ်တိကို ပံ့ပိုးခြင်းကို ခွင့်ပြုထားရေ။ 

တဖန် Object Oriented ဧ အတိးအမြင်တိကို ထိရောက်စွာအသုံးပြုနိုင်စီရန် အမွေဆက်ခံခြင်းအပြင်၊ အမျိုးဖွဲ့ခြင်း(aggregation)၊ ကိုယ်စားပြုဆောင်ရွက်စီခြင်း(delegation) တိကိုပါ နားလည်ထားရန်လိုအပ်ရေ။

## အသွင်ပြောင်းလဲနိုင်ခြင်း(Polymorphism)
အမွေဆက်ခံခြင်းကို အသုံးပြုရာတွင် အမွေဆက်ခံရေကလပ်စ်တွင် စူပါကလပ်စ်နန့် နာဖို့တူပနာ လုပ်ဆောင်မှု့မတူညီရေ လုပ်ဆောင်ချက်တိကို ပြန်လည်ရီးသားခြင်းကို အိုဗာရိုက်ဟုခေါ်ဆိုရေ။ ဒေနည်းအားဖြင့် အခြီခံအားဖြင့်တူညီကေလည်း မတူညီသည့်လုပ်ဆောင်ချက်တိကို ပီးနိုင်ရေအင်းစတန့်စ်တိကို အသုံးပြုနိုင်ဖို့ဖြစ်ရေ။ ဒေသဘောတရားကို Object Orientedတွင် အသွင်ပြောင်းလဲနိုင်ခြင်းဟု ခေါ်ဆိုရေ။