Object-Oriented Programming (object တွေကို အခြေခံပြီး program ရေးနည်း)
B3.1: OOP for a single class (SL+HL), B3.2: OOP for multiple classes (HL only)
မြန်မာလို: B3.1: class တစ်ခုတည်းအတွက် OOP (SL နဲ့ HL နှစ်ဆင့်လုံး)၊ B3.2: class အများအတွက် OOP (HL အတွက်သာ)
Object-oriented programming (OOP၊ object တွေကို အခြေခံပြီး program ရေးနည်း) ဆိုတာ code ကို object (class တစ်ခုကနေ ဖန်တီးထားတဲ့ instance) တွေကို အခြေခံပြီး စီစဉ်ရေးတဲ့ နည်းလမ်းပါ။ Object တစ်ခုဆိုတာ ဒေတာနဲ့ အဲဒီ ဒေတာပေါ်မှာ လုပ်တဲ့ operation (ဒေတာပေါ်မှာ လုပ်တဲ့ လုပ်ဆောင်ချက်) တွေကို တစ်စုတည်း ပေါင်းထားတဲ့ ကိုယ့်ဘာသာ ပြည့်စုံတဲ့ အစိတ်အပိုင်း တစ်ခုပါ။ Variable (တန်ဖိုး သိမ်းထားတဲ့ နာမည်ပေးထားတဲ့ နေရာ) တွေ နေရာအနှံ့ ပြန့်ကျဲနေတဲ့ program ရှည်ကြီး တစ်ခုကို ရေးမယ့်အစား ပြဿနာကို အချင်းချင်း ဆက်သွယ်ပြီး အလုပ်လုပ်တဲ့ object တွေအဖြစ် ပုံဖော်ပါတယ်။ Object တစ်ခုစီက ကိုယ့်ရဲ့ state (object ရဲ့ attribute တွေမှာ လက်ရှိ ရှိနေတဲ့ တန်ဖိုးများ) နဲ့ behaviour (object က လုပ်နိုင်တာတွေ) ကို ကိုယ်တိုင် တာဝန်ယူပါတယ်။
ဒါ အရေးကြီးတာက လက်တွေ့ ကမ္ဘာက စနစ်တွေဟာ ရှုပ်ထွေးလို့ပါ။ ကျောင်းတစ်ကျောင်းမှာ ကျောင်းသားတွေ၊ ဆရာတွေ၊ ဘာသာရပ် သင်တန်းတွေနဲ့ အမှတ်တွေ ရှိပါတယ်။ ဆေးရုံတစ်ရုံမှာ လူနာတွေ၊ ဆရာဝန်တွေ၊ ချိန်းဆိုမှုတွေနဲ့ မှတ်တမ်းတွေ ရှိပါတယ်။ OOP မှာ ဒါတွေ တစ်ခုချင်းစီကို သီးခြား class (object တွေ ဖန်တီးဖို့ ပုံစံခွက်) တစ်ခုအဖြစ် ပုံဖော်နိုင်ပါတယ်၊ သူတို့ရဲ့ ဒေတာကို private (class ပြင်ပကနေ တိုက်ရိုက် သုံးလို့ မရ) အဖြစ် ထားနိုင်ပါတယ်၊ ပြီးတော့ သူတို့ အချင်းချင်း ဘယ်လို ဆက်သွယ်မလဲ ဆိုတာအတွက် ရှင်းလင်းတဲ့ interface (တခြား code က သုံးလို့ရတဲ့ public method များ) တွေကို သတ်မှတ်နိုင်ပါတယ်။
SL အခြေခံ အပိုင်း (B3.1)
| # | ခေါင်းစဉ် | Syllabus | အဓိက အယူအဆများ | Level |
|---|---|---|---|---|
| 1 | What is OOP? (OOP ဆိုတာ ဘာလဲ) | B3.1 | Procedural programming (ဒေတာနဲ့ function တွေကို သီးခြားစီ ထားပြီး အဆင့်ဆင့် ရေးတဲ့ program ရေးနည်း) နဲ့ OOP နှိုင်းယှဉ်ချက်၊ OOP ရဲ့ အခြေခံ သဘောတရား လေးခု၊ အဓိက ဝေါဟာရများ | SL + HL |
| 2 | Classes and Objects (class နဲ့ object များ) | B3.1 | Class ကို သတ်မှတ်ခြင်း၊ attribute (object ရဲ့ ဒေတာကို သိမ်းတဲ့ variable)၊ method (သီးခြား အလုပ်တစ်ခု လုပ်ပေးတဲ့ code အပိုင်း)၊ instantiation (class ကနေ object အသစ် ဖန်တီးခြင်း)၊ object တွေရဲ့ array (အရွယ်အစား ပုံသေ၊ အမျိုးအစားတူ ဒေတာစု) | SL + HL |
| 3 | Constructors (object ဖန်တီးချိန် attribute တွေကို စတင် သတ်မှတ်ပေးတဲ့ method များ) | B3.1 | Default constructor (parameter မယူဘဲ default တန်ဖိုးတွေ ထည့်ပေးတဲ့ constructor)၊ parameterised constructor (parameter တွေ လက်ခံတဲ့ constructor) နဲ့ overloaded constructor (parameter list မတူတဲ့ constructor အများ) | SL + HL |
| 4 | The this Keyword (လက်ရှိ object ကို ညွှန်းတဲ့ this keyword) | B3.1 | Parameter shadowing (နာမည်တူ parameter က instance variable ကို ဖုံးထားခြင်း)၊ this ကို မဖြစ်မနေ သုံးရမယ့် အခါ | SL + HL |
| 5 | Encapsulation (ဒေတာနဲ့ method ကို တစ်စုတည်း ထုပ်ပိုးခြင်း) | B3.1 | Private field (class ပြင်ပကနေ တိုက်ရိုက် သုံးလို့ မရတဲ့ field)၊ getter (private attribute ရဲ့ တန်ဖိုးကို ပြန်ပေးတဲ့ method) နဲ့ setter (private attribute ရဲ့ တန်ဖိုးကို ပြောင်းတဲ့ method)၊ validation (တန်ဖိုး မှန်မမှန် စစ်ခြင်း)၊ data hiding (object ရဲ့ အတွင်း ဒေတာကို ဖုံးထားခြင်း) | SL + HL |
| 6 | Access Modifiers (ဘယ်ကနေ သုံးခွင့်ရလဲ သတ်မှတ်တဲ့ keyword များ) | B3.1 | private, public, protected၊ ဘယ်အချိန်မှာ ဘယ်ဟာကို သုံးရမလဲ | SL + HL |
| 7 | Static Members (class ကိုယ်တိုင် ပိုင်တဲ့ variable နဲ့ method များ) | B3.1 | Static member နဲ့ object တစ်ခုချင်း ပိုင်တဲ့ instance member ကွာခြားချက်၊ object အားလုံး မျှသုံးတဲ့ counter (အရေအတွက် မှတ်တဲ့ variable) များ၊ main ဘာကြောင့် static ဖြစ်ရလဲ | SL + HL |
| 8 | Object References (object ကို ညွှန်းတဲ့ reference များ) | B3.1 | Aliasing (variable နှစ်ခုက object တစ်ခုတည်းကို ညွှန်းနေခြင်း)၊ null (ဘာ object ကိုမှ မညွှန်းတဲ့ တန်ဖိုး)၊ == နဲ့ .equals() ကွာခြားချက် | SL + HL |
| 9 | UML Class Diagrams (class တစ်ခုကို အကွက် သုံးကွက်နဲ့ ပြတဲ့ ပုံများ) | B3.1 | အပိုင်း သုံးပိုင်းပါတဲ့ အကွက်၊ access modifier သင်္ကေတများ၊ class တွေကြား ဆက်နွယ်မှုများ | SL + HL |
Syllabus နဲ့ Level ကော်လံတွေက IB Computer Science (နိုင်ငံတကာ ကျောင်းတွေမှာ သင်တဲ့ ကွန်ပျူတာသိပ္ပံ သင်ရိုး) သင်တန်းအတွက်ပါ။ SL (Standard Level) နဲ့ HL (Higher Level) ဆိုတာ IB သင်တန်းရဲ့ အဆင့်နှစ်ဆင့်ဖြစ်ပြီး HL အပိုင်းတွေက ပိုနက်နက်ရှိုင်းရှိုင်း လေ့လာရတဲ့ အပိုင်းတွေပါ။ SL + HL ဆိုတာ အဆင့် နှစ်ဆင့်လုံးမှာ လေ့လာရတယ်လို့ ဆိုလိုပါတယ်။
HL အတွက်သာ (B3.2)
| # | ခေါင်းစဉ် | Syllabus | အဓိက အယူအဆများ | Level |
|---|---|---|---|---|
| 10 | Aggregation (သီးခြား ရှိနေနိုင်တဲ့ has-a ဆက်နွယ်မှု) | B3.2.4 | Has-a ဆက်နွယ်မှု (object တစ်ခုထဲမှာ နောက် object တစ်ခု ပါဝင်တဲ့ ဆက်နွယ်မှု)၊ object တွေကို attribute အဖြစ် သုံးခြင်း၊ delegation (အလုပ်ကို တခြား object ဆီ လွှဲပေးခြင်း) | HL |
| 11 | Inheritance (parent class ကနေ အမွေဆက်ခံခြင်း) | B3.2 | extends, super(), constructor chaining (constructor တစ်ခုက နောက် constructor တစ်ခုကို ဆက်ခေါ်ခြင်း)၊ is-a ဆက်နွယ်မှု (class တစ်ခုက နောက် class တစ်ခုရဲ့ အမျိုးအစားခွဲ ဖြစ်တဲ့ ဆက်နွယ်မှု) | HL |
| 12 | Method Overriding (parent ရဲ့ method ကို child က အစားထိုး ရေးခြင်း) | B3.2 | @Override၊ parent ရဲ့ behaviour ကို အစားထိုးခြင်း | HL |
| 13 | Polymorphism (ပုံစံ အမျိုးမျိုး ယူနိုင်ခြင်း) | B3.2 | Polymorphic array (မတူတဲ့ subclass တွေရဲ့ object တွေကို အတူ သိမ်းထားတဲ့ array)၊ runtime method dispatch (program run နေစဉ် ဘယ် method ကို run မလဲ ဆုံးဖြတ်ခြင်း) | HL |
| 14 | Abstract Classes (object တိုက်ရိုက် မဖန်တီးနိုင်တဲ့ class များ) | B3.2 | abstract keyword၊ subclass (အမွေဆက်ခံတဲ့ child class) တွေက method တွေကို မဖြစ်မနေ ရေးပေးရအောင် လုပ်ခြင်း | HL |
| 15 | Interfaces (class တစ်ခု implement လုပ်ရမယ့် method စာရင်းများ) | B3.2 | interface, implements၊ contract (လိုက်နာရမယ့် သဘောတူချက်) များ | HL |
| 16 | Composition vs Inheritance (ပိုခိုင်မာတဲ့ has-a ဆက်နွယ်မှုနဲ့ inheritance နှိုင်းယှဉ်ချက်) | B3.2.4 | Composition ကို ရွေးမလား inheritance ကို ရွေးမလား ဆိုတဲ့ ဒီဇိုင်း ဆုံးဖြတ်ချက်များ၊ tight coupling (class တွေ အချင်းချင်း အလွန် မှီခိုနေခြင်း) | HL |
စာမေးပွဲအတွက် ကျွမ်းကျင်မှုများ
| # | ခေါင်းစဉ် | Syllabus | အဓိက အယူအဆများ | Level |
|---|---|---|---|---|
| 17 | OOP Method Patterns (OOP မှာ မကြာခဏ ရေးရတဲ့ method ပုံစံများ) | B3.1, B3.2 | Filter (condition နဲ့ ကိုက်တာတွေကိုပဲ ရွေးထုတ်ခြင်း)၊ accumulate (တန်ဖိုးတွေကို တဖြည်းဖြည်း စုပေါင်းခြင်း)၊ find-by-ID (ID နဲ့ ရှာခြင်း)၊ null check (null ဟုတ်မဟုတ် စစ်ခြင်း) | SL + HL |
| 18 | Selection Sort on Objects (object တွေကို selection sort နဲ့ စီခြင်း) | B2.4.3, B3.1 | Selection sort (အငယ်ဆုံးကို ရှာပြီး နေရာချ စီခြင်း) ကို attribute တစ်ခုအလိုက် သုံးခြင်း၊ .compareTo() | SL + HL |
| 19 | OOP Terminology Reference (OOP ဝေါဟာရ ကိုးကားစာရင်း) | B3.1, B3.2 | အဓိက term တိုင်းနဲ့ စာမေးပွဲမှာ အသင့် ဖြေလို့ရတဲ့ အဓိပ္ပာယ်ဖွင့်ဆိုချက်များ | SL + HL |
IA အတွက် ပြင်ဆင်ခြင်း
IA (IB သင်တန်းမှာ ကျောင်းသားတစ်ယောက်ချင်း ကိုယ်တိုင် တည်ဆောက်ရပြီး ကျောင်းက ဆရာက အမှတ်ပေးတဲ့ အပိုင်း) အတွက် app တစ်ခု တည်ဆောက်ဖို့ လိုတဲ့ tool တွေကို ဒီစာမျက်နှာတွေမှာ လေ့လာနိုင်ပါတယ်။ Syllabus ထဲက ခေါင်းစဉ်တွေ မဟုတ်ပါဘူး။
| # | ခေါင်းစဉ် | Syllabus | အဓိက အယူအဆများ | Level |
|---|---|---|---|---|
| 20 | JavaFX Basics (JavaFX အခြေခံများ) | syllabus ပြင်ပ | JavaFX (Java နဲ့ desktop app တည်ဆောက်တဲ့ library) ရဲ့ Stage (window)၊ Scene (window ထဲက မြင်ကွင်း)၊ FXML (screen ပုံစံကို ဖော်ပြတဲ့ file)၊ event handler (button နှိပ်တာလို event ဖြစ်တဲ့အခါ run တဲ့ code) | IA အတွက် tool |
| 21 | MVC Architecture (MVC ဖွဲ့စည်းပုံ) | syllabus ပြင်ပ | Model-View-Controller ပုံစံ (app ကို Model၊ View၊ Controller ဆိုပြီး အပိုင်းသုံးပိုင်း ခွဲရေးတဲ့ ပုံစံ) | IA အတွက် tool |
| 22 | FXML and Controllers (FXML နဲ့ controller များ) | syllabus ပြင်ပ | .fxml file များ၊ FXMLLoader၊ @FXML binding (FXML ထဲက control တွေကို controller ထဲက variable တွေနဲ့ ချိတ်ခြင်း) | IA အတွက် tool |
| 23 | Multi-Window Apps (window အများပါတဲ့ app များ) | syllabus ပြင်ပ | Stage တွေကို စီမံခြင်း၊ Singleton (instance တစ်ခုတည်းပဲ ရှိတဲ့ class ပုံစံ)၊ window တွေကြား ဒေတာ မျှသုံးခြင်း | IA အတွက် tool |
| 24 | File I/O in Apps (app တွေထဲမှာ file ဖတ်ခြင်း၊ ရေးခြင်း) | syllabus ပြင်ပ | Persistence (program ပိတ်သွားပြီးနောက်မှာလည်း ဒေတာ ဆက်ရှိနေအောင် သိမ်းထားခြင်း)၊ CSV (comma နဲ့ ခြားထားတဲ့ စာသား file)၊ load/save ပုံစံများ | IA အတွက် tool |
| 25 | Structuring Your IA (ကိုယ့် IA ကို စနစ်တကျ ဖွဲ့စည်းခြင်း) | syllabus ပြင်ပ | Class တွေကို စီစဉ်ခြင်း၊ project ဖွဲ့စည်းပုံ | IA အတွက် tool |
ကိုယ့် IA ကို Python နဲ့ tkinter (Python နဲ့ desktop app တည်ဆောက်တဲ့ library) သုံးပြီး တည်ဆောက်နေသလား။ ဒီစာမျက်နှာတွေက အတူတူ အကြောင်းအရာတွေကို Python နဲ့ ရှင်းပြပါတယ်:
| ခေါင်းစဉ် | Java ဗားရှင်း | အဓိက အယူအဆများ | Level |
|---|---|---|---|
| tkinter Basics (tkinter အခြေခံများ) | JavaFX Basics | Main window၊ widget (button၊ text box စတဲ့ screen ပေါ်က အစိတ်အပိုင်း) များ၊ pack နဲ့ grid (widget တွေကို window ထဲမှာ နေရာချတဲ့ နည်း နှစ်မျိုး)၊ event handling (event ဖြစ်တဲ့အခါ တုံ့ပြန်ခြင်း)၊ message box (စာတို တစ်ခု ပြတဲ့ window အသေး) များ | IA အတွက် tool |
| MVC with tkinter (tkinter နဲ့ MVC) | MVC Architecture | Model-View-Controller၊ မျှသုံးတဲ့ controller တစ်ခုတည်း (singleton) | IA အတွက် tool |
| Multi-Window Apps with tkinter (tkinter နဲ့ window အများပါတဲ့ app များ) | Multi-Window Apps | Toplevel window (main window ကနေ ဖွင့်တဲ့ နောက်ထပ် window) များ၊ modal popup (မပိတ်မချင်း နောက်က window ကို သုံးလို့ မရတဲ့ popup) များ၊ မျှသုံးတဲ့ model၊ window တွေကြား ဒေတာ ပေးပို့ခြင်း | IA အတွက် tool |
File I/O in Apps မှာ Java နဲ့ Python ဥပမာ နှစ်မျိုးလုံး ပါပါတယ်။ Structuring Your IA က language နှစ်မျိုးလုံးအတွက် သုံးလို့ရပြီး ဥပမာတွေကို Java နဲ့ ပြထားပါတယ်။ Python မှာ file တွေကို ဘယ်လို ကိုင်တွယ်လဲ ဆိုတာကို Reading Files နဲ့ Writing Files မှာ ပြထားပါတယ်။
Table of contents
- What is OOP?
- Classes and Objects
- Constructors
- The this Keyword
- Encapsulation
- Access Modifiers
- Static Members
- Object References
- UML Class Diagrams
- Aggregation
- Inheritance
- Method Overriding
- Polymorphism
- Abstract Classes
- Interfaces
- Composition vs Inheritance
- OOP Method Patterns
- Selection Sort on Objects
- OOP Terminology Reference
- JavaFX Basics
- tkinter Basics
- MVC Architecture
- MVC with tkinter
- FXML and Controllers
- Multi-Window Apps
- Multi-Window Apps with tkinter
- File I/O in Apps
- Structuring Your IA