OOP

OOP ကို မပြောခင် နရင်က Program တွေ

Ok bro... OOP ကို į€™į€•į€¼į€±į€¬į€į€„į€ŗįŠ နရင်က program တွေ į€˜į€šį€ŗį€œį€­į€Æ į€›į€±į€øį€€į€¼į€œį€² į€…į€‰į€ŗį€øį€…į€¬į€øį€€į€¼į€Šį€·į€ŗį‹

နရင် style (į€žį€°į€·į€€į€­į€Æ Procedural Programming į€œį€­į€Æį€·į€į€±į€«į€ŗį€į€šį€ŗ) က į€˜į€šį€ŗį€œį€­į€Æį€œį€²į€†į€­į€Æį€į€±į€¬į€·įŠ į€€į€­į€Æį€šį€ŗ į€œį€Æį€•į€ŗį€į€»į€„į€ŗį€į€¬į€į€½į€±į€€į€­į€Æ step-by-step ချရေးတာ။ Function တွေ နများကြီး တစ်နေရာမှာ į€…į€Æį€›į€±į€øįŠ ပြီးတော့ data (variable) တွေ နများကြီး တစ်နေရာမှာ စုထား။ į€”į€€į€Æį€”į€ŗį€œį€Æį€¶į€øį€€ Global ဖြစ်နေတာ။

  • ပြဿနာက į€˜į€¬į€œį€²? Program က į€”į€Šį€ŗį€øį€”į€Šį€ŗį€øį€œį€±į€ø į€€į€¼į€®į€øį€œį€¬į€į€¬į€”į€²į€·... ရှုပ်ပွ į€žį€½į€¬į€øį€į€¬į€•į€²į‹
  • į€˜į€šį€ŗ function က į€˜į€šį€ŗ data ကို į€žį€Æį€¶į€øį€”į€±į€™į€¾į€”į€ŗį€ø į€™į€žį€­į€į€±į€¬į€·į€˜į€°į€øį‹
  • တစ်ခုခု į€•į€¼į€„į€ŗį€į€»į€„į€ŗį€›į€„į€ŗįŠ į€Ÿį€­į€Æį€”į€¬į€øį€œį€­į€Æį€€į€ŗį€•į€¼į€„į€ŗįŠ į€’į€®į€”į€¬į€øį€œį€­į€Æį€€į€ŗį€•į€¼į€„į€ŗ... ကုဒ်တွေ į€•į€į€ŗį€į€»į€¬į€œį€Šį€ŗ (spaghetti code) တွေ ဖြစ်ကုန်ရော။

နဲ့ဒီမှာ OOP က į€į€„į€ŗį€œį€¬į€į€¬

OOP (Object-Oriented Programming) က į€˜į€¬į€•į€¼į€±į€¬į€œį€²į€†į€­į€Æį€į€±į€¬į€·...

į€Ÿį€±į€· bro၊ į€”į€²į€·į€œį€­į€Æį€į€½į€± မရှုပ်နဲ့။ į€”į€žį€Æį€•į€ŗį€™į€žį€Æį€•į€ŗ နဲ့။ ဆိုင်ရာ ဆိုင်ရာ data နဲ့ နဲ့ data ကို į€€į€œį€­ į€™į€šį€·į€ŗ function တွေကို į€į€…į€ŗį€”į€±į€›į€¬į€į€Šį€ŗį€øį€™į€¾į€¬ į€…į€Æį€œį€­į€Æį€€į€ŗį‹

į€”į€²į€·į€œį€­į€Æ data į€›į€±į€¬įŠ function ရော ပေါင်းပြီး စုထားတဲ့ နထုပ် (bundle) į€œį€±į€øį€€į€­į€Æ Object į€œį€­į€Æį€·į€į€±į€«į€ŗį€į€šį€ŗį‹

နဓိက Idea နှစ်ခု: Class နဲ့ Object

1. Class (ပုံစံခွက်)

  • ဒါက ပုံစံ ဒီဇိုင်းပဲ။
  • į€„į€•į€™į€¬įŠ ကား (Car) ဆိုတဲ့ ပုံစံခွက် တစ်ခု į€†į€±į€¬į€€į€ŗį€œį€­į€Æį€€į€ŗį€į€šį€ŗį‹
  • နဲ့ဒီ ပုံစံခွက်ထဲ ကား တစ်စီးမှာ į€˜į€¬į€į€½į€± į€›į€¾į€­į€›į€™į€œį€² (Data/Attributes) į€”į€²į€·įŠ į€žį€°į€€ į€˜į€¬į€į€½į€± į€œį€Æį€•į€ŗį€”į€­į€Æį€„į€ŗį€›į€™į€œį€²(Functions/Methods) ဆိုတာတွေ ကြိုရေးထားတာ။
Class Attributes နဲ့ Methods
# Data (Attributes): color, brand, model, current_speed (į€”į€›į€±į€¬į€„į€ŗįŠ į€į€¶į€†į€­į€•į€ŗįŠ į€™į€±į€¬į€ŗį€’į€šį€ŗįŠ į€œį€€į€ŗį€›į€¾į€­į€”į€™į€¼į€”į€ŗį€”į€¾į€Æį€”į€ŗį€ø) # Functions (Methods): start(), stop(), accelerate(), brake() (į€…į€€į€ŗį€”į€¾į€­į€Æį€øįŠ į€…į€€į€ŗį€›į€•į€ŗįŠ į€œį€®į€—į€¬į€į€„į€ŗįŠ į€˜į€›į€­į€į€ŗį€”į€Æį€•į€ŗ)

2. Object (နစစ်နမှန်)

  • ဒါက နဲ့ဒီ ပုံစံခွက် (Class) ကနေ į€į€€į€šį€ŗ ပုံတူ į€‘į€Æį€į€ŗį€œį€­į€Æį€€į€ŗį€į€²į€· နရာ နစစ်။
  • Class က Car ဆိုရင်...
Creating Objects
# Object တစ်ခု my_toyota = Car() (ကျနော့် Toyota ကား) # နောက်ထပ် Object တစ်ခု bros_honda = Car() (bro ရဲ့ Honda ကား)

ကား ပုံစံခွက် (Car class) က į€į€…į€ŗį€į€Æį€į€Šį€ŗį€øįŠ į€’į€«į€•į€±į€™į€šį€·į€ŗ နဲ့ကနေ į€‘į€Æį€į€ŗį€œį€­į€Æį€€į€ŗį€į€²į€· ကား နစစ် (Object) တွေက နများကြီး į€–į€¼į€…į€ŗį€œį€­į€Æį€·į€›į€į€šį€ŗį‹ my_toyota ရဲ့ color က į€”į€”į€®įŠ bros_honda ရဲ့ color က į€”į€™į€Šį€ŗį€ø į€–į€¼į€…į€ŗį€œį€­į€Æį€·į€›į€į€šį€ŗį‹ တစ်စီးနဲ့ တစ်စီး į€™į€›į€±į€¬į€˜į€°į€øį‹

Concept: Class က ကား ဆိုတဲ့ idea (į€™į€Ÿį€Æį€į€ŗį€›į€„į€ŗ ကားစက်ရုံက ပုံစံခွက်)။ Object က į€œį€™į€ŗį€øį€•į€±į€«į€ŗį€™į€¾į€¬ မောင်းနေတဲ့ ကား နစစ် တစ်စီး။

į€˜į€¬į€œį€­į€Æį€· į€žį€Æį€¶į€øį€›į€™į€¾į€¬į€œį€²?

Ok, į€˜į€¬į€œį€² ဆိုတာ į€žį€­į€•į€¼į€®į‹ į€˜į€¬į€œį€­į€Æį€· į€žį€Æį€¶į€øį€™į€¾į€¬į€œį€²į‹

1. į€›į€¾į€„į€ŗį€øį€į€šį€ŗįŠ စနစ်တကျ į€–į€¼į€…į€ŗį€žį€½į€¬į€øį€į€šį€ŗ (Organized)

ကုဒ်တွေ į€›į€¾į€Æį€•į€ŗį€™į€”į€±į€į€±į€¬į€·į€˜į€°į€øį‹ ကား နဲ့ į€•į€į€ŗį€žį€€į€ŗį€į€²į€· data į€›į€±į€¬įŠ function ရော နကုန် Car class ထဲမှာပဲ į€…į€Æį€‘į€¬į€øį€į€šį€ŗį‹ į€œį€° (User) နဲ့ į€•į€į€ŗį€žį€€į€ŗį€į€¬ User class ထဲမှာပဲ။ į€€į€­į€Æį€šį€·į€ŗį€Ÿį€¬į€”į€²į€· į€€į€­į€Æį€šį€ŗ နကန့် (module) į€œį€±į€øį€į€½į€± į€–į€¼į€…į€ŗį€žį€½į€¬į€øį€į€šį€ŗį‹ ရှာရ į€œį€½į€šį€ŗį€į€šį€ŗįŠ ပြင်ရ į€œį€½į€šį€ŗį€į€šį€ŗį‹

2. į€į€…į€ŗį€į€«į€į€Šį€ŗį€øį€”į€²į€· į€•į€¼į€®į€øį€į€šį€ŗ (Reusability)

Car class ကို တစ်ခါပဲ ပင်ပန်းခံ į€›į€±į€øį€œį€­į€Æį€€į€ŗį‹ ပြီးရင်... ကား နစီး ၁၀၀၀ į€œį€­į€Æį€į€»į€„į€ŗį€œį€¬į€ø? Object နခု ၁၀၀၀ တန်း ဆောက် (create) į€œį€­į€Æį€€į€ŗį‹ code တွေ ထပ်ခါထပ်ခါ ပြန်ရေးနေစရာ į€™į€œį€­į€Æį€į€±į€¬į€·į€˜į€°į€øį‹

į€’į€«į€•į€²į€™į€Ÿį€Æį€į€ŗį€žį€±į€øį€˜į€°į€ø... Inheritance (နမွေဆက်ခံခြင်း) ဆိုတာ į€›į€¾į€­į€žį€±į€øį€į€šį€ŗį‹ Car class ကို į€”į€™į€½į€±į€šį€°į€•į€¼į€®į€ø SportsCar class į€†į€±į€¬į€€į€ŗį€œį€­į€Æį€·į€›į€į€šį€ŗį‹ SportsCar မှာ Car ရဲ့ start(), stop() တွေ နကုန် į€•į€«į€œį€¬į€™į€šį€ŗį‹ į€€į€­į€Æį€šį€ŗį€€ turbo() ဆိုတဲ့ function į€”į€žį€…į€ŗį€œį€±į€øį€•į€² į€•į€­į€Æį€‘į€Šį€·į€ŗį€œį€­į€Æį€€į€ŗį€›į€Æį€¶į€•į€²į‹

3. į€–į€½į€€į€ŗį€‘į€¬į€øį€œį€­į€Æį€·į€›į€į€šį€ŗ (Encapsulation)

ကျနော်တို့ ကားမောင်းရင် į€œį€®į€—į€¬ (accelerator) ကို į€”į€„į€ŗį€øį€œį€­į€Æį€€į€ŗį€į€¬į€•į€² į€žį€­į€į€šį€ŗį‹ နထဲက ပစ္စတင် (piston) į€˜į€šį€ŗį€œį€­į€Æį€›į€½į€±į€·į€œį€²įŠ ဆီ į€˜į€šį€ŗį€œį€­į€Æ į€•į€”į€ŗį€øį€œį€²... į€žį€­į€…į€›į€¬į€™į€œį€­į€Æį€˜į€°į€øį‹

OOP į€™į€¾į€¬į€œį€Šį€ŗį€ø į€”į€²į€·į€œį€­į€Æį€•į€²į‹ Object ကို my_car.accelerate() į€œį€­į€Æį€· į€į€±į€«į€ŗį€œį€­į€Æį€€į€ŗį€į€¬į€”į€²į€· į€žį€°į€Ÿį€¬į€žį€° į€”į€œį€Æį€•į€ŗį€œį€Æį€•į€ŗį€žį€½į€¬į€øį€™į€šį€ŗį‹ နထဲက နတွင်းစနစ် (internal details) တွေကို į€œį€­į€Æį€€į€ŗį€žį€­į€”į€±į€…į€›į€¬įŠ į€œį€­į€Æį€€į€ŗį€•į€¼į€„į€ŗį€”į€±į€…į€›į€¬ į€™į€œį€­į€Æį€˜į€°į€øį‹ ဒါကို Encapsulation (į€–į€Æį€¶į€øį€€į€½į€šį€ŗį€‘į€¬į€øį€į€¼į€„į€ŗį€ø) į€œį€­į€Æį€·į€į€±į€«į€ŗį€į€šį€ŗį‹ ဒါကြောင့် į€€į€­į€Æį€šį€·į€ŗ code ကို į€į€į€¼į€¬į€øį€žį€°į€€ မတော်တဆ į€œį€¬ į€€į€œį€­ į€œį€­į€Æį€· į€•į€»į€€į€ŗį€žį€½į€¬į€øį€™į€¾į€¬ į€•į€°į€…į€›į€¬į€™į€œį€­į€Æį€į€±į€¬į€·į€˜į€°į€øį‹

4. ပြင်ရ į€œį€½į€šį€ŗį€į€šį€ŗ (Maintainability)

Project į€€į€¼į€®į€øį€œį€¬į€į€²į€·į€”į€į€«... ကား į€˜į€›į€­į€į€ŗį€”į€Æį€•į€ŗį€į€²į€· ပုံစံကို į€•į€¼į€„į€ŗį€į€»į€„į€ŗį€į€šį€ŗ ဆိုပါစို့။

  • နရင် style (Procedural) မှာ: code တွေ နများကြီးထဲမှာ į€˜į€šį€ŗį€”į€¬į€øį€€ į€˜į€›į€­į€į€ŗį€”į€Æį€•į€ŗį€į€²į€· function į€œį€² į€œį€­į€Æį€€į€ŗį€›į€¾į€¬į€›į€™į€šį€ŗį‹ နေရာနနှံ့မှာ į€•į€į€ŗį€žį€€į€ŗį€”į€±į€į€¬į€į€½į€± į€œį€­į€Æį€€į€ŗį€•į€¼į€„į€ŗį€›į€™į€šį€ŗį‹
  • OOP မှာ: Car class ထဲက brake() method į€į€…į€ŗį€į€Æį€į€Šį€ŗį€øį€€į€­į€Æį€•į€² į€į€„į€ŗį€•į€¼į€„į€ŗį€œį€­į€Æį€€į€ŗį‹ ပြီးပြီ။ ကျန်တဲ့ į€˜į€šį€ŗį€”į€±į€›į€¬į€€į€­į€Æį€™į€¾ į€žį€½į€¬į€øį€™į€‘į€­į€˜į€°į€øį‹

နနှစ်ချုပ်

į€į€€į€šį€ŗį€į€±į€¬į€· OOP ဆိုတာ code တွေကို စနစ်တကျ နဲ့ į€›į€¾į€Æį€•į€ŗį€™į€žį€½į€¬į€øį€”į€±į€¬į€„į€ŗ ရေးတဲ့ vibe တစ်ခုပါပဲ။

Program į€žį€±į€øį€žį€±į€øį€œį€±į€øį€į€½į€± ရေးရင်တော့ OOP က နပို į€œį€­į€Æį€· į€‘į€„į€ŗį€›į€į€šį€ŗį‹ į€’į€«į€•į€±į€™į€šį€·į€ŗ bro တို့ project တွေ į€€į€¼į€®į€øį€œį€¬į€œį€±... (ငပမာ į€‚į€­į€™į€ŗį€øį€į€½į€±įŠ app ကြီးတွေ) OOP į€™į€žį€Æį€¶į€øį€›į€„į€ŗ į€”į€®į€øį€”į€šį€ŗ į€”į€­į€Æį€„į€ŗį€œį€±į€œį€±į€•į€²į‹

Common: ပထမတော့ į€”į€Šį€ŗį€øį€”į€Šį€ŗį€ø į€”į€¬į€›į€Æį€¶į€”į€±į€¬į€€į€ŗį€į€šį€ŗ į€œį€­į€Æį€· į€‘į€„į€ŗį€›į€•į€±į€™į€šį€·į€ŗįŠ į€žį€˜į€±į€¬į€•į€±į€«į€€į€ŗį€žį€½į€¬į€øį€›į€„į€ŗ... OOP က į€”į€į€ŗį€˜į€Æį€›į€¬į€ø į€–į€¼į€…į€ŗį€œį€¬į€œį€­į€™į€·į€ŗį€™į€šį€ŗ į€˜į€›į€­į€Æį‹