ပထမဦးစွာ ပြောချင်သည်မှာ ကျနောှ Java Developer မဟုတ်ပာ.. 🙂
ကျောင်းတွင် သင်သော စုတ်ပြတ်သတ် လက်ရေးများဖြင့် Notes လိုက်မှတ်ထားသည်များကို ဆီလျောှအောင် ပြန်လည် ရေးသားပာသည်.. မသင့်တောှသည်များကို Admin ကြီး saturngod မှ ပြင်ဆင်ပေလိမ့်မည် 😀
OOP အကြောင်းကို ကိုလူပျိုကြီးရေးထားတာလည်းရှိပာတယ်..
အရင်ဆုံး Java အကြောင်း မပြောခင်မယ် Object-Oriented-Programming အကြောင်း အရင် ပြောဖို့လိုမယ်ထင်ပာတယ်..
OOP ဆိုတာ Object ဆိုတဲ့အရာများကို အသုံးပြုပြီးတော့ Apps တွေ Program တွေ Design လုပ်ထားတဲ့ Programming Standard တစ်ခု ဖြစ်ပာသည်.. OOP မှာ နည်းလမ်းတွေ အများအကြီးရှိပာတယ်.. အဲထဲက အဓိကဟာတွေကတော့
Inheritance
Polymorphism
Encapsulation
တို့ဖြစ်ပာတယ်.. အောက်ဘက်မှာ အသေးစိတ် ပြန်ရှင်းပာ့မယ်
အရင်ဆုံး Object ဆိုတာကြီးကို Define လုပ်ကြည့်တာပော့
Object ဆိုတာ Subject မဟုတ်တာလို့ ပြောမှာလားဆိုတော့ မဟုတ်ပာဘူး 😛
An object is a thing that you can see, hold, or touch လို့ အရှင်းဆုံး ပြောလို့ရပာတယ်.. ကျနောှတို့ ပာတ်ဝတ်ကျင်းမှာ ကိုင်တွယ်နိုင်တဲ့အရာတွေ၊ မြင်နိုင်တဲ့အရာတွေ ၊ ထိတွေ့နိုင်တဲ့အရာတွေ အားလုံးဟာ Object ပာ..
Object ဆိုတာမှာ Characteristics သုံးမျိုး ရှိပာမယ်..
1) Identity Common Name of a group of Objects
2) State Information of Identity
3) Behaviors Functions
ပိုပြီး မြင်သာသွားအောင် ဥပမာ တစ်ခုနဲ့ ပြောပြပာ့မယ်.. စာအုပ်တစ်အုပ် ဆိုကြပာစို့
အပောှက ဥပမာ မှာ ကြည့်မယ်ဆိုလျှင် Identity, State, Behavior ဆိုတာကို ကွဲကွဲပြားပြား မြင်ရမယ် ထင်ပာတယ်.. Book ဆိုတဲ့ Identity (တစ်နည်း Object) ဆိုတာမှာ Price, Page No. company ဆိုတဲ့ State တွေ ရှိနေပာတယ်.. အဲဒီအောက် Page No. ဆိုတဲ့ Identity အောက်မှာ စာတွေပဲ ဖြစ်ဖြစ် ပုံတွေပဲ ဖြစ်ဖြစ် data တွေ store လုပ်ထားမယ့် State ရဲ့ Function ရှိနေပာတယ်..
Object ဆိုတာနဲ့ ပာတ်သတ်လို့ ပြောစရာ တစ်ခုရှိတာက Natural Materials တွေဖြစ်တဲ့ လေ (Air), မီး (Fire), ရေ(Water) စတဲ့ဟာတွေဟာ Object မဟုတ်ပာဘူး 🙂
အဲလိုဆို Object အကြောင်းလေး ရှေ့နည်းနည်း ဆက်ကြတာပော့
တစ်ခုလောက် ပြောချင်တာက Data Abstraction ဆိုတဲ့အကြောင်းလေးပာ..
Data Abstract ဆိုတာဟာ ပာဝင်တဲ့ Entity (Object) တွေကို Identifying လုပ်မယ်, နောက် Attribute တွေကို စနစ်တကျဖြစ်အောင်လုပ်မယ် အဲဒီနောက် Entity တစ်ခုချင်းစီနဲ့ သက်ဆိုင်တဲ့ action တွေကို ဆက်လုပ်သွားမယ်… အဲဒီလို Process ကို Data Abstraction လုပ်တယ်လို့ ခောှပာတယ်
ဒီပုံမှာ ကြည့်မယ်ဆိုရင် Human ဆိုတဲ့ Object ထဲမှာ Name, Address, Phone, Height, Weight ဆိုတဲ့ Entity တွေကို တွေ့ရမှာဖြစ်ပာတယ် နောက် Sleep, Eat, Run အစရှိတဲ့ Attribute တွေလည်း ပာလာပာလိမ့်မယ် နောက် Data Abstraction လုပ်လိုက်တဲ့အခာမှာ လိုချင်တဲ့ Entity တွေကိုပဲ Abstract လုပ်လိုက်ပာတယ်.. ပုံမှာ အတိုင်းဆိုရင် Name, Address, Phone ဆိုပြီးတော့ပော့ နောက် Entity တစ်ခုချင်းစီနဲ့ ပာတ်သတ်တဲ့ Action တွေဖြစ်တဲ့ setName(), setAddress(), setPhone(), display() စတာတွေကို ဆက်လုပ်သွားပာတယ်.. ဒာပာပဲ
အဲ.. အပောှဘက်မှာ Class ဆိုတဲ့ စာလုံး အသစ်တစ်လုံး တွေ့မိမယ် ထင်ပာတယ်.. Class ဆိုတာဘာလဲ.. သာမန်ဆိုရင်တော့ စာသင်ခန်းပော့.. စာသင်ခန်း ဆိုတာမျိုးဟာ ပောင်းစုထားတဲ့ နေရာဖြစ်ပာတယ်.. ကျောင်းသားတွေ ပောင်းစုပြီးတော့ တည်ရှိနေတယ်ပော့.. Programming မှာလည်း ဒီလိုပာပဲ.. Class ဆိုတာဟာ Object တစ်ခုရဲ့ Abstract Characteristics တွေကို Define လုပ်ထားတဲ့ အစုအစည်းတစ်ခုပာ.. Object ရဲ့ Characters တွေပာမယ်.. Object ထဲမှာပာတဲ့ Attribute တွေ ဒာမှမဟုတ် Properties တွေ နောက် သူ့ရဲ့ Behavior သို့မဟုတ် Method , Feature ဆိုတာတွေ ပာပာ့မယ် ..Object နဲ့ Class ဆက်စပ်ပုံကို ဆက်သွားပာ့မယ်
Real World က Human ဆိုတဲ့ Object ကို ကျွန်တောှတို့ Programming ဘက်မှာ Data Abstraction လုပ်တဲ့အခာမှာ (ကျွန်တောှတို့ Programming ဘက်မှာဆိုလို့ Programming က ကျွန်တောှ ပိုင်တာမဟုတ်ပာဘူး 😛 ) Human ဆိုတဲ့ Class ဖြစ်လာပာတယ်.. အဲဒီ Class ထဲမှာမှ Mg Mg ရယ် Aye Aye ရယ်ဆိုတဲ့ Object နှစ်ခု ရှိနေပာတယ်.. နောက် Mg Mg , Yangon , 111111 , —, Aye Aye , Yangon , 55555, —– စတာတွေကတော့ သူ့ရဲ့ Properties တွေဖြစ်ပာတယ်.. အလွယ်ဆုံး မှတ်ထားမယ်ဆိုရင်တော့ Object တွေ ပောင်းစည်းထားတဲ့ အစုအစည်းတစ်ခုကို Class လို့ ခောှပာတယ်..
နောက် OOP ရဲ့ အဓိက Principles သုံးခုဖြစ်တဲ့
Inheritance
Polymorphism
Encapsulation
အကြောင်း ဆက်လက်ပြောပာ့မယ် ကို Sevenlamp ရဲ့ basic basic basic of C# မှာ OOP အကြောင်း ပြောထားတာ အင်မတန် ကောင်းလှပာတယ်.. အဲဒာကိုပဲဲ ကျနောှ နည်းနည်း ထပ်ဖြည့်လိုက်ပာတယ် ( ဖြတ်-ညှပ်-ကပ် လုပ်တယ်ခောှမလားပဲ 😛 )
1. Inheritance
ဒီလိုလေးတွေးကြည့်ရအောင်ဗျာ အခုကျွန်တော်တို့ မိဘတွေပိုင်ဆိုင်တဲ့ ပိုင်ဆိုင်မှုတွေဟာ ကျွန်တော်တို့ရဲ့ ပိုင်ဆိုင်မှုတွေပါပဲ။ ဒီလိုပါပဲ ကျွန်တော်တို့ရဲ့ ပိုင်ဆိုင်မှုတွေကိုလည်း ကျွန်တော်တို့ရဲ့ မျိုးဆက်သစ်တွေက ပိုင်ဆိုင်ကြဦးမှပါ။ ဒီသဘောတရားလေးကို ယူပြီး OOမှာ inheritance ဆိုတာပေါ်ပေါက်လာတာပါ။ class တစ်ခုရဲ့ ပိုင်ဆိုင်မှု property တွေဟာ အဲ့ဒီ class ရဲ့ child တွေကလည်း ပိုင်ဆိုင်နိုင်ပါတယ်။ ဒီလို ပိုင်ဆိုင်နိုင်ခြင်းအားဖြင့် ကျွန်တော်တို့က class တွေအားလုံး အတွက် တူညီတဲ့ property တွေကို အကြိမ်ကြိမ်ကြေငြာပေးနေစရာ မလိုတော့ပါဘူး။ ဥပမာဗျာ ကျွန်တော်က လူတစ်ယောက်ကို ကိုယ်စားပြုမယ့် class တစ်ခုဆောက်မယ်ဆိုရင် အဲ့ဒီ class ထဲမှာ ဘယ်လို member တွေပါမလဲ စဉ်းစားကြည့်၊ နံမည်ပါမယ်၊ နေရပ်လိပ်စာပါမယ် ဖုန်းနံပာတ်ပာမယ် ဗျာ၊ စသည်ဖြင့်ပေါ့။ အောက်က ပုံလေး နဲ့ ယှဉ်ကြည့်နိုင်ပာတယ် နောက် အခြား Class တစ်ခုကနေ နောက်တစ်ခုဆီသို့ သူ့ရဲ့ Behavior တွေ Action တွေ Inherit လုပ်ထားတဲ့ Class ကို Subclass လို့ ခောှပာတယ် ( ဒာမှမဟုတ် Child Class ) Inherit အလုပ်ခံရတဲ့ Class ကိုတော့ Super Class လို့ခောှတယ်.. တစ်နည်း Parent Class ပော့ ..
အပောှမှာဆိုရင် Student ဆိုတဲ့ Sub Class ဟာ Human ဆိုတဲ့ Super Class ဆီကနေ Inherit လုပ်ထားတာကို မြင်ရမှာပာ.. အလားတူ နောက် step တစ်ခုမှာလည်း ထိုနည်းအတူပာပဲ
2. Polymorphism
ကျွန်တော်တို့ ရပ်ကွက်တွေမှာလုပ်လေ့ရှိတယ်ဗျာ တခါတလေ ရပ်ကွက်ရုံးကနေပြီးတော့ တစ်အိမ်ကို လူတစ်ယောက်နှုန်း အစည်းအဝေးတက်ရမယ်တို့ ဘာတို့ ကြံုဖူးမှာပေါ့။ ဟုတ်ကဲ့ ရပ်ကွက်ရုံးက ခေါ်တာက လူတစ်ယောက်လို့ ခေါ်တာပါ တနည်းအားဖြင့် human class ကို ခေါ်တာပါ။ အဲ့ဒါကို အိမ်မှာ ရှိနေတဲ့ ကျောင်းသားတစ်ယောက်က သွားတက်လို့ မရဘူးလား၊ ရပါတယ်။ Teacher တစ်ယောက်သွားတက်မယ်ဆိုလို့လဲ ရပါတယ်။ Teacher ကလည်း human တစ်ယောက်ပဲ ဖြစ်လို့ပါ။ ဒါပေမယ့် Student ပဲ သွားသည်ဖြစ်စေ၊ Teacher ပဲသွားသည်ဖြစ်စေ၊ ဒါမှမဟုတ် Human ကိုယ်တိုင်ပဲ သွားသည်ဖြစ်စေ၊ အားလုံးကို Human လို့ပဲ မြင်ပါတယ်။ အားလုံး အခွင့်အရေးတန်းတူပါပဲ။ Student မို့ အခွင့်အရေးပိုရမလား မရပါဘူး။ အိုကေ အဲ့ဒီလိုမျိုး Human ကိုခေါ်တာကို Stuent သွားလိုက်တာကို အသွင်ပြောင်းလဲခြင်း ( polymorphism ) လို့ ခေါ်ပါတယ်။
Polymorphism မှာ သတိထားရမည့် အချက်ကတော့ child ကို parent အသွင်ပြောင်းနိုင်ပေမယ့် parent ကိုတော့ child အဖြစ်ပြောင်းလို့ မရပါဘူး။ ဆိုလိုတာကတော ကျောင်းသားအားလုံး စာမေးပွဲလာဖြေပါဆိုပြီး ခေါ်တာကို အိမ်မှာ ရှိတဲ့ လူကြီးတွေသွားဖြေလို့ ရမလား မရပါဘူး၊ ဒီသဘောပါ။ Student ကိုတောင်းရင်တော့ Human ပေးလို့ မရပါဘူး၊ Student ပဲ ပေးမှ ရမှာပါ။
အဲ ဒီနေရာမှာ Data Hiding ဆိုတာလေး ကို ထည့်ပြောချင်တယ်.. နံပာတ်ပဲ ထိုးလိုက်ပာ့မယ်…
3. Data Hiding
Data hiding ဆိုတာကတော့ ကျွန်တော်တို့ အိမ်မှာ မိသားစုပိုင်ဆိုင်မှုတွေကို တခြားလူတွေသိအောင် ထုတ်ကြေငြာလေ့ရှိလား? မရှိပါဘူး တိတ်တိတ်လေးပဲ သိမ်းထားလေ့ရှိပါတယ်။ ဒီသဘောပါပဲ class တွေထဲမှာရှိတဲ့ member data တွေကိုလည်း အပြင်ကနေ ခေါ်လို့မရအောင် private လုပ်ထားခြင်းကို data hiding လို့ ခေါ်ပါတယ်။
4. Encapsulation
Encapsulation ဆိုတာကတော့ ကျွန်တော်တို့ hide လုပ်ထားတဲ့ data ထဲက လိုအပ်တဲ့ dataတွေကို function တွေကနေသော်လည်းကောင်း၊ property တွေကနေတဆင့်သော်လည်းကောင်း၊ အသုံးပြုနိုင်ဖို့အတွက် စီမံပေးခြင်းပဲ ဖြစ်ပါတယ်။
အခုလောက်ဆိုရင်တော့ Object Oriented Programming ဆိုတာ ဘာလဲ, ဘယ်လို Character တွေ ရှိသလဲဆိုတာ အကြမ်းဖျဉ်း သိလောက်မှာပာ..
ခုတော့ ဒီလောက်နဲ့ နားပာရစေ.. 🙂
PDF နဲ့ ပြီးသလောက် လုပ်ထားပာတယ်..