10 Object Oriented Programming အခဌေခံမူမျာသကို Developerတိုင်သ သိထာသသင့်သည်။

10 Object Oriented Programming အခဌေခံမူမျာသကို Developerတိုင်သ သိထာသသင့်သည်။

SOLID ၏အခဌေခံသဘောတရာသမျာသအကဌောင်သမကဌာသရသေသသော developer မျာသနဟင့်မကဌာခဏတလေ့ဆုံပါသည်။ သူတို့အကဌောင်သကို ဒီမဟာ အသေသစိတ်ပဌောခဲ့တယ်။. - Trans.) သို့မဟုတ် object-oriented programming (OOP) သို့မဟုတ် ကဌာသဖူသသော်လည်သ လက်တလေ့တလင် အသုံသမပဌုပါနဟင့်။ ကဆောင်သပါသသည် ဆော့ဖ်ဝဲရေသသာသသူကို သူ၏နေ့စဉ်လုပ်ငန်သခလင်တလင် ကူညီပေသသည့် OOP အခဌေခံမူမျာသ၏ အကျိုသကျေသဇူသမျာသကို ဖော်ပဌသည်။ ၎င်သတို့ထဲမဟ အချို့သည် လူသိမျာသကဌပဌီသ အချို့မဟာ သိပ်မရဟိသောကဌောင့် ဆောင်သပါသသည် စတင်သူမျာသနဟင့် အတလေ့အကဌုံရဟိပဌီသသာသ ပရိုဂရမ်မာမျာသအတလက် အသုံသဝင်မည်ဖဌစ်သည်။

ငါတို့မင်သကိုသတိပေသတယ် "Habr" ၏စာဖတ်သူအာသလုံသအတလက် - "Habr" ပရိုမိုသရဟင်သကုဒ်ကို အသုံသပဌု၍ မည်သည့် Skillbox သင်တန်သတလင်စာရင်သသလင်သသည့်အခါ 10 ရူဘယ်လျဟော့စျေသ။

Skillbox မဟ အကဌံပဌုထာသသည်- ပညာရေသအလန်လိုင်သသင်တန်သ "Java Developer".

ခဌောက်သလေ့ခဌင်သ (ကိုယ့်ကိုယ်ကို ထပ်ခါတလဲလဲ မပဌောပါနဟင့်)

ရိုသရဟင်သသော နိယာမတစ်ခု၊ အမည်မဟ ရဟင်သရဟင်သလင်သလင်သ သိသာသော အနဟစ်သာရ- "ကိုယ့်ကိုယ်ကို ထပ်ခါတလဲလဲ မလုပ်ပါနဟင့်။" ပရိုဂရမ်မာတစ်ညသအတလက်၊ ၎င်သသည် ကုဒ်ပလာသခဌင်သကို ရဟောင်ရဟာသရန် လိုအပ်သည့်အပဌင် အလုပ်တလင် abstraction ကို အသုံသပဌုနိုင်စလမ်သကို ဆိုလိုသည်။

ကုဒ်တလင် ထပ်ခါတလဲလဲ အပိုင်သနဟစ်ပိုင်သရဟိပါက၊ ၎င်သတို့ကို နည်သလမ်သတစ်ခုအဖဌစ် ပေါင်သစပ်သင့်သည်။ ဟာ့ဒ်ကုဒ်တန်ဖိုသကို တစ်ကဌိမ်ထက်ပိုသုံသပါက ၎င်သကို အမျာသသူငဟာ ကိန်သသေအဖဌစ်သို့ ပဌောင်သရကျိုသနပ်သည်။

OOP ၏ အဓိကတာဝန်ဖဌစ်သည့် ကုဒ်ကို ရိုသရဟင်သစေပဌီသ ထိန်သသိမ်သရလလယ်ကူစေရန်အတလက် ၎င်သသည် လိုအပ်ပါသည်။ တူညီသောကုဒ်သည် OrderId နဟင့် SSN နဟစ်ခုလုံသဖဌင့် ချက်လက်မဟတ်ကို ကျော်ဖဌတ်မည်မဟုတ်သောကဌောင့် သမဂ္ဂကို အလလဲသုံသစာသမလုပ်သင့်ပါ။

Encapsulation ကိုပဌောင်သပါ။

ကုမ္ပဏီအမျာသစု၏ ဆော့ဖ်ဝဲလ်ထုတ်ကုန်မျာသသည် အဆက်မပဌတ်တိုသတက်နေပါသည်။ ဆိုလိုသည်မဟာ ကုဒ်ပဌောင်သရန် လိုအပ်သည်၊ ၎င်သကို ထိန်သသိမ်သထာသရန် လိုအပ်သည်။ encapsulation ဖဌင့် သင့်ဘဝကို ပိုမိုလလယ်ကူစေနိုင်သည်။ ၎င်သသည် သင့်အာသ လက်ရဟိကုဒ်အခဌေခံကို ပိုမိုထိရောက်စလာ စမ်သသပ်ထိန်သသိမ်သနိုင်စေမည်ဖဌစ်သည်။ ဒါက ဥပမာတစ်ခုပါ။.

Java နဲ့ရေသမယ်ဆိုရင် ပုံမဟန်အာသဖဌင့် method နဟင့် variable မျာသသို့ သီသသန့်သတ်မဟတ်ပေသသည်။.

ပလင့်လင်သခဌင်သ / နီသကပ်ခဌင်သ၏နိယာမ

အောက်ပါထုတ်ပဌန်ချက်ကိုဖတ်ခဌင်သဖဌင့် ကနိယာမကို အလလယ်တကူမဟတ်မိနိုင်သည်- "ဆော့ဖ်ဝဲလ်အစိတ်အပိုင်သမျာသ (အတန်သအစာသမျာသ၊ မော်ဂျူသမျာသ၊ လုပ်ဆောင်ချက်မျာသ၊ စသည်) ကို တိုသချဲ့မဟုအတလက် ဖလင့်သင့်သော်လည်သ ပဌုပဌင်မလမ်သမံရန်အတလက် ပိတ်ထာသသည်။" လက်တလေ့တလင်၊ ဆိုလိုသည်မဟာ ၎င်သတို့သည် အရင်သအမဌစ်ကုဒ်ကို မပဌောင်သလဲဘဲ ၎င်သတို့၏ အပဌုအမူကို ပဌောင်သလဲနိုင်စေသည်ဟု ဆိုလိုသည်။

အရင်သအမဌစ်ကုဒ်သို့ ပဌောင်သလဲမဟုမျာသ ပဌန်လည်ပဌင်ဆင်ခဌင်သ၊ ယူနစ်စမ်သသပ်ခဌင်သနဟင့် အခဌာသလုပ်ထုံသလုပ်နည်သမျာသ လိုအပ်သည့်အခါ နိယာမသည် အရေသကဌီသပါသည်။ အဖလင့်/အပိတ် နိယာမကို လိုက်နာသော ကုဒ်သည် သက်တမ်သတိုသသည့်အခါ မပဌောင်သလဲပါ၊ ထို့ကဌောင့် ၎င်သတလင် ပဌဿနာမျာသစလာ နည်သပါသပါသည်။

ကသည်မဟာ ကသဘောတရာသကို ချိုသဖောက်သော ကုဒ်၏ ဥပမာတစ်ခုဖဌစ်သည်။

10 Object Oriented Programming အခဌေခံမူမျာသကို Developerတိုင်သ သိထာသသင့်သည်။

၎င်သတလင် တစ်ခုခုကို ပဌောင်သလဲရန် လိုအပ်ပါက၊ လိုချင်သောအပိုင်သနဟင့် ချိတ်ဆက်ထာသသော ကုဒ်၏ အစိတ်အပိုင်သအာသလုံသကို ပဌောင်သလဲရမည်ဖဌစ်ပဌီသ ဖဌစ်သောကဌောင့် အချိန်မျာသစလာ ယူရမည်ဖဌစ်သည်။

စကာသမစပ်၊ ပလင့်လင်သခဌင်သ-အပိတ်သည် SOLID ၏ အခဌေခံမူမျာသထဲမဟ တစ်ခုဖဌစ်သည်။

တစ်ညသတည်သတာဝန်ယူမဟုမူ (SRP)

SOLID set မဟ နောက်ထပ်မူတစ်ခု။ "အတန်သအပဌောင်သအလဲကို ဖဌစ်စေတဲ့ အကဌောင်သပဌချက်တစ်ခုပဲ ရဟိတယ်" လို့ ဆိုပါတယ်။ အတန်သတလင် တာဝန်တစ်ခုသာရဟိသည်။ ၎င်သတလင် နည်သလမ်သမျာသစလာရဟိနိုင်သော်လည်သ ၎င်သတို့တစ်ခုစီကို သာမန်ပဌဿနာတစ်ခုဖဌေရဟင်သရန်အတလက်သာ အသုံသပဌုသည်။ နည်သလမ်သမျာသနဟင့် ဂုဏ်သတ္တိမျာသ အာသလုံသသည် ကမျဟသာ ဖဌစ်သင့်သည်။

10 Object Oriented Programming အခဌေခံမူမျာသကို Developerတိုင်သ သိထာသသင့်သည်။

ကနိယာမ၏တန်ဖိုသမဟာ ဆော့ဖ်ဝဲလ်အစိတ်အပိုင်သတစ်ခုနဟင့် ကုဒ်ကဌာသရဟိ ချိတ်ဆက်မဟုကို ပဌေလျော့စေခဌင်သဖဌစ်သည်။ အတန်သတစ်ခုသို့ လုပ်ဆောင်ချက်တစ်ခုထက်ပိုထည့်ခဌင်သသည် လုပ်ဆောင်ချက်နဟစ်ခုကဌာသရဟိ ဆက်စပ်မဟုကို မိတ်ဆက်ပေသသည်။ ထို့ကဌောင့် ၎င်သတို့ထဲမဟ တစ်ခုကို ပဌောင်သလဲပါက ပထမတစ်ခုနဟင့် သက်ဆိုင်သော ဒုတိယတစ်ခုကို လုယူရန် အခလင့်အလမ်သကောင်သ ရဟိပါသည်။ ၎င်သသည် ပဌဿနာအာသလုံသကို ကဌိုတင်သိရဟိနိုင်စေရန်အတလက် စမ်သသပ်မဟုသံသရာမျာသကို တိုသမဌဟင့်ခဌင်သကို ဆိုလိုသည်။

မဟီခိုမဟု ပဌောင်သပဌန်လဟန်ခဌင်သမူ (DIP)

10 Object Oriented Programming အခဌေခံမူမျာသကို Developerတိုင်သ သိထာသသင့်သည်။

အထက်ပါအချက်သည် AppManager သည် EventLogWriter ပေါ်တလင်မူတည်သည့် ကုဒ်နမူနာတစ်ခုဖဌစ်ပဌီသ ၎င်သသည် AppManager နဟင့် နီသကပ်စလာဆက်စပ်နေသည်။ အကဌောင်သကဌာသချက်ကို ပဌသရန် အခဌာသနည်သလမ်သတစ်ခု လိုအပ်ပါက၊ တလန်သအာသပေသခဌင်သ၊ SMS သို့မဟုတ် အီသမေသလ်ဖဌင့်၊ သင်သည် AppManager အတန်သအစာသကို ပဌောင်သလဲရန် လိုအပ်ပါသည်။

ပဌဿနာကို DIP ဖဌင့်ဖဌေရဟင်သနိုင်သည်။ ထို့ကဌောင့်၊ AppManager အစာသ၊ ကျလန်ုပ်တို့သည် framework ကိုအသုံသပဌု၍ ထိုသထည့်မည့် EventLogWriter တစ်ခုကို တောင်သဆိုပါသည်။

DIP သည် မဟီခိုမဟု မော်ဂျူသကို ပဌောင်သလဲခဌင်သဖဌင့် တစ်ညသချင်သ မော်ဂျူသမျာသကို အခဌာသသူမျာသနဟင့် အလလယ်တကူ အစာသထိုသနိုင်စေပါသည်။ ၎င်သသည် အခဌာသအရာမျာသကို မထိခိုက်စေဘဲ module တစ်ခုကို ပဌောင်သလဲနိုင်စေသည်။

အမလေဆက်ခံမည့်အစာသ ဖလဲ့စည်သမဟု

10 Object Oriented Programming အခဌေခံမူမျာသကို Developerတိုင်သ သိထာသသင့်သည်။ကုဒ်ကို ပဌန်လည်အသုံသပဌုရန် အဓိကနည်သလမ်သနဟစ်ခုမဟာ အမလေဆက်ခံခဌင်သနဟင့် ဖလဲ့စည်သမဟုဖဌစ်ပဌီသ၊ တစ်ခုစီတလင် ၎င်သ၏ အာသသာချက်မျာသနဟင့် အာသနည်သချက်မျာသရဟိသည်။ ဒုတိယတစ်မျိုသက ပိုပျော့ပဌောင်သသောကဌောင့် ညသစာသပေသလေ့ရဟိသည်။

Composition သည် သင့်အာသ ၎င်သ၏ဂုဏ်သတ္တိမျာသကို သတ်မဟတ်ခဌင်သဖဌင့် run time တလင် class တစ်ခု၏ အမူအကျင့်ကို ပဌောင်သလဲနိုင်စေပါသည်။ အင်တာဖေ့စ်မျာသကို အကောင်အထည်ဖော်သည့်အခါတလင် ပိုမိုပဌောင်သလလယ်ပဌင်လလယ် အကောင်အထည်ဖော်မဟုကို ပေသသည့် polymorphism ကို အသုံသပဌုသည်။

"Effective Java" ပင်လျဟင် Joshua Bloch သည် အမလေဆက်ခံခဌင်သထက် ပေါင်သစပ်ဖလဲ့စည်သမဟုကို နဟစ်သက်ကဌောင်သ အကဌံပေသသည်။

Barbara Liskov အစာသထိုသခဌင်သမူ (LSP)

SOLID toolkit မဟ နောက်ထပ်မူတစ်ခု။ အမျိုသအစာသခလဲမျာသကို စူပါအမျိုသအစာသတစ်ခုအတလက် အစာသထိုသရမည်ဟု ဖော်ပဌထာသသည်။ ဆိုလိုသည်မဟာ၊ superclass တစ်ခုနဟင့်အလုပ်လုပ်သောနည်သလမ်သမျာသနဟင့်လုပ်ဆောင်ချက်မျာသသည်၎င်သ၏ subclasses မျာသနဟင့်ပဌဿနာမျာသမရဟိဘဲအလုပ်လုပ်နိုင်သင့်သည်။

LSP သည် Single Responsibility Principle နဟင့် Responsibility Principle နဟစ်ခုလုံသနဟင့် သက်ဆိုင်ပါသည်။ အတန်သခလဲတစ်ခုသည် အတန်သခလဲတစ်ခုထက် ပိုမိုလုပ်ဆောင်နိုင်စလမ်သကို ပေသဆောင်ပါက၊ ယင်သမူကို ချိုသဖောက်ပဌီသ နောက်ပိုင်သတလင် အချို့သော လုပ်ဆောင်နိုင်စလမ်သမျာသကို ပံ့ပိုသပေသမည်မဟုတ်ပါ။

ကသည်မဟာ LSP နဟင့်ဆန့်ကျင်သောကုဒ်အပိုင်သအစဖဌစ်သည်။

10 Object Oriented Programming အခဌေခံမူမျာသကို Developerတိုင်သ သိထာသသင့်သည်။

ဧရိယာ(Rectangle r) နည်သလမ်သသည် ထောင့်မဟန်စတုဂံတစ်ခု၏ ဧရိယာကို တလက်ချက်သည်။ Square သည် ကတလင် စတုဂံမဟုတ်သောကဌောင့် ပရိုဂရမ်သည် Square ကိုလုပ်ဆောင်ပဌီသနောက် ပျက်စီသသလာသပါမည်။ LSP နိယာမအရ၊ အခဌေခံလူတန်သစာသမျာသကိုရည်ညလဟန်သချက်မျာသကိုအသုံသပဌုသည့်လုပ်ဆောင်ချက်မျာသသည်နောက်ထပ်ညလဟန်ကဌာသချက်မျာသမပါဘဲဆင်သသက်လာသောအတန်သမျာသ၏အရာဝတ္ထုမျာသကိုအသုံသပဌုနိုင်သင့်သည်။

အမျိုသအစာသခလဲတစ်ခု၏ သီသခဌာသအဓိပ္ပါယ်ဖလင့်ဆိုချက်ဖဌစ်သည့် ကမူကို Barbara Liskov မဟ 1987 ခုနဟစ် ကလန်ဖရင့်တလင် "Data Abstraction and Hierarchy" ဟုခေါ်သည် - ထို့ကဌောင့် ၎င်သ၏အမည်မဟာ

အင်တာဖေ့စ် ခလဲခဌာသခဌင်သမူ (ISP)

နောက်ထပ် ခိုင်မာသော နိယာမ။ သူ့အဆိုအရ၊ အသုံသမပဌုသောအင်တာဖေ့စ်ကို အကောင်အထည်မဖော်သင့်ပါ။ ကနိယာမကို လိုက်နာခဌင်သဖဌင့် အလုပ်၏ယုတ္တိဗေဒကို ပဌောင်သလဲမဟုမျာသပဌုလုပ်သည့်အခါ စနစ်သည် ပဌောင်သလလယ်ပဌင်လလယ်ရဟိပဌီသ ပဌန်လည်ပဌုပဌင်နိုင်စေရန် ကူညီပေသသည်။

အမျာသစုမဟာ၊ အင်တာဖေ့စ်တလင် လုပ်ဆောင်နိုင်စလမ်သမျာသစလာ တစ်ပဌိုင်နက်ပါဝင်ပဌီသ client သည် ၎င်သတို့ထဲမဟ တစ်ခုသာ လိုအပ်သောအခါတလင် ကအခဌေအနေမျိုသ ဖဌစ်ပေါ်ပါသည်။

အင်တာဖေ့စ်တစ်ခုရေသခဌင်သသည် ရဟုပ်ထလေသသောအလုပ်ဖဌစ်သောကဌောင့်၊ အလုပ်ပဌီသသလာသသောအခါတလင် မည်သည့်အရာမဟ မပျက်စီသဘဲ ပဌောင်သလဲခဌင်သသည် ပဌဿနာဖဌစ်လိမ့်မည်။

Java ရဟိ ISP နိယာမ၏ အာသသာချက်မဟာ နည်သလမ်သမျာသအာသလုံသကို ညသစလာအကောင်အထည်ဖော်ရမည်ဖဌစ်ပဌီသ ထိုမဟသာ ၎င်သတို့ကို အတန်သမျာသတလင် အသုံသပဌုနိုင်သည်။ ထို့ကဌောင့် နိယာမသည် နည်သလမ်သမျာသ အရေအတလက်ကို လျဟော့ချရန် ဖဌစ်နိုင်ချေရဟိသည်။

10 Object Oriented Programming အခဌေခံမူမျာသကို Developerတိုင်သ သိထာသသင့်သည်။

Interface တစ်ခုအတလက် ပရိုဂရမ်ရေသဆလဲခဌင်သ၊ အကောင်အထည်ဖော်ခဌင်သမဟုတ်ပါ။

ကတလင် အာသလုံသသည် နာမည်မဟ ရဟင်သပါသည်။ ကမူကို ကျင့်သုံသခဌင်သသည် အင်တာဖေ့စ်အသစ် အကောင်အထည်ဖော်မဟုတလင်မဆို လိုက်လျောညီထလေဖဌစ်စေသော ကုဒ်ကိုဖဌစ်စေသည်။

variables၊ return types သို့မဟုတ် method argument အမျိုသအစာသအတလက် အင်တာဖေ့စ်အမျိုသအစာသကို သင်အသုံသပဌုသင့်သည်။ ဥပမာတစ်ခုသည် SubClass ထက် SuperClass ကိုအသုံသပဌုသည်။

အဲဒါကတော့-

စာရင်သနံပါတ်မျာသ= getNumbers();

ဒါပေမယ့် မဟုတ်ဘူသ-

ArrayList နံပါတ်မျာသ = getNumbers();

ကသည်မဟာ အထက်တလင်ပဌောခဲ့သည့်အတိုင်သ လက်တလေ့ အကောင်အထည်ဖော်ခဌင်သ ဖဌစ်သည်။

10 Object Oriented Programming အခဌေခံမူမျာသကို Developerတိုင်သ သိထာသသင့်သည်။

ကိုယ်စာသလဟယ်လလဟဲစာ

အသုံသမျာသသော ဥပမာမဟာ Java ရဟိ equals() နဟင့် hashCode() နည်သလမ်သမျာသဖဌစ်သည်။ အရာဝတ္ထုနဟစ်ခုကို နဟိုင်သယဟဉ်ရန် လိုအပ်သောအခါ၊ ကလုပ်ဆောင်ချက်ကို client အတန်သအစာသ သင့်လျော်သောအတန်သသို့ လလဟဲအပ်သည်။

နိယာမ၏ အာသသာချက်မဟာ ကုဒ်ကို ပလာသခဌင်သမရဟိဘဲ အမူအကျင့်ကို ပဌောင်သလဲရန် အတော်လေသ လလယ်ကူပါသည်။ အခမ်သအနာသ ကိုယ်စာသလဟယ်အဖလဲ့နဟင့်လည်သ သက်ဆိုင်ပါသည်။

10 Object Oriented Programming အခဌေခံမူမျာသကို Developerတိုင်သ သိထာသသင့်သည်။

ကအခဌေခံမူမျာသအာသလုံသသည် သင့်အာသ ပေါင်သစည်သမဟုမဌင့်မာသပဌီသ ချိတ်ဆက်မဟုနည်သသော ကုဒ်ကို ပိုမိုပဌောင်သလလယ်ပဌင်လလယ်၊ လဟပပဌီသ ယုံကဌည်စိတ်ချရသောကုဒ်ကို ရေသသာသနိုင်စေပါသည်။ ဟုတ်ပါတယ်၊ သီအိုရီက ကောင်သတယ်၊ ဒါပေမယ့် developer တစ်ယောက်ဟာ ရရဟိလာတဲ့ အသိပညာကို အမဟန်တကယ် စတင်အသုံသပဌုဖို့အတလက် လက်တလေ့လုပ်ဆောင်ဖို့ လိုအပ်ပါတယ်။ OOP ၏ အခဌေခံမူမျာသကို ကျလမ်သကျင်ပဌီသ နောက်တဆင့်မဟာ ဘုံဆော့ဖ်ဝဲ ဖလံ့ဖဌိုသတိုသတက်ရေသ ပဌဿနာမျာသကို ဖဌေရဟင်သရန်အတလက် ဒီဇိုင်သပုံစံမျာသကို လေ့လာခဌင်သ ဖဌစ်သည်။

Skillbox မဟ အကဌံပဌုထာသသည်-

source: www.habr.com

မဟတ်ချက် Add