Class(ကွန်ပျူတာ)

ကလပ်စ် (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တွင် အသွင်ပြောင်းလဲနိုင်ခြင်းဟု ခေါ်ဆိုသည်။