Thuta Learning
ရှာဖွေရန်
ExercisesProgrammingbeginner

Practice Set: OOP နှင့် Collections

စိတ်လျှော့ပါ။ ဒီခန်းကို စာအုပ်လိုမဟုတ်ဘဲ စကားပြောသလိုပဲ၊ နားလည်လွယ်အောင် ရှင်းပါမယ်။

ဒီခန်းပြီးရင် ဘာတတ်သွားမလဲ

  • Practice Set: OOP နှင့် Collections ကို ကိုယ်တိုင် လေ့ကျင့်ကြည့်မယ်
  • သင်ခဲ့ပြီးသား skill တွေကို practice လုပ်ပြီး ခိုင်မာအောင်လုပ်မယ်
  • အမှားရှာ၊ ပြင်တတ်၊ ကိုယ်တိုင် check လုပ်တတ်မယ်

ခဏလေး ဒီလိုပဲ စဉ်းစားကြည့်

ဒီ lesson က Intermediate နဲ့ Advanced chapter မှာ လေ့လာခဲ့တဲ့ class , data class , inheritance , interface , higher-order function , collection processing (map/filter/sortedBy) concept တွေကို ပေါင်းစပ်ပြီး ပိုခက်တဲ့ task 3 ခုနဲ့ ကျင့်ခိုင်းထားတာပါ။ Exercise Set 1 ထက် difficulty ပိုမြင့်ပြီး class design , inheritance hierarchy , real-world data processing logic တွေ ပါဝင်ပါတယ်။ Task တစ်ခုချင်းစီကို ကိုယ်တိုင်ဖြေပြီးမှ code အောက်ကို reference solution အနေနဲ့ ကြည့်ဖို့ အကြံပြုပါတယ်။

လေ့ကျင့်ခန်းများ

Task 1: Animal abstract class တစ်ခုဖန်တီးပြီး abstract fun sound(): String ကို declare ပါ။ Dog နဲ့ Cat class နှစ်ခုကို Animal ကနေ inherit ခိုင်းပြီး sound() ကို override လုပ်ပါ - list<Animal> တစ်ခုထဲမှာ instance နှစ်ခုစလုံး ထည့်ပြီး loop ခါပြီး sound() ခေါ်ပါ။ Task 2: Product ဆိုတဲ့ data class (name: String, price: Double, category: String) ကို ဖန်တီးပြီး Product list တစ်ခု (5 items) manually ဖန်တီးပါ - ပြီးရင် filter နဲ့ price 1000 ကျော်တဲ့ product တွေကိုယူ, map နဲ့ name only list ထုတ်, sortedByDescending နဲ့ price အမြင့်ဆုံးကနေ စီပြပါ။ Task 3: higher-order function applyDiscount(products: List<Product>, discountFn: (Double) -> Double): List<Product> ကို ရေးပြီး caller ကနေ lambda (ဥပမာ { price -> price * 0.9 }) ပေးပြီး discount 10% လျှော့ထားတဲ့ product list အသစ် ပြန်ရအောင် implement လုပ်ပါ။

Code နမူနာ

kotlin
abstract class Animal(val name: String) {
    abstract fun sound(): String
}

class Dog(name: String) : Animal(name) {
    override fun sound() = "Woof"
}

class Cat(name: String) : Animal(name) {
    override fun sound() = "Meow"
}

data class Product(val name: String, val price: Double, val category: String)

fun applyDiscount(products: List<Product>, discountFn: (Double) -> Double): List<Product> =
    products.map { it.copy(price = discountFn(it.price)) }

fun main() {
    // Task 1
    val animals: List<Animal> = listOf(Dog("Rex"), Cat("Mimi"))
    animals.forEach { println("${it.name}: ${it.sound()}") }

    // Task 2
    val products = listOf(
        Product("Laptop", 1500000.0, "Electronics"),
        Product("Mouse", 25000.0, "Electronics"),
        Product("Book", 8000.0, "Stationery"),
        Product("Phone", 1200000.0, "Electronics"),
        Product("Pen", 500.0, "Stationery")
    )
    val expensive = products.filter { it.price > 1000000 }
    val names = expensive.map { it.name }
    val sorted = products.sortedByDescending { it.price }
    println("Expensive: $names")
    println("Sorted: ${sorted.map { it.name }}")

    // Task 3
    val discounted = applyDiscount(products) { price -> price * 0.9 }
    discounted.forEach { println("${it.name}: ${it.price}") }
}
You should see
Dog/Cat ရဲ့ sound output, expensive product name list, price အလိုက်စီထားတဲ့ list, ပြီးတော့ 10% discount ပြီး price ချိုးထားတဲ့ product list တွေကို console မှာ တွေ့ရပါမယ်။

၅ မိနစ် စမ်းကြည့်

Task 1 ထဲကို Bird class အသစ်တစ်ခု ထပ်ထည့်ပြီး sound() ကို override လုပ်ကြည့်ပါ - polymorphism ကြောင့် code အဓိက logic ဘာမှ ပြောင်းစရာမလိုဘဲ list ထဲထည့်ရုံနဲ့ အလုပ်လုပ်တာကို ၅ မိနစ်အတွင်း သက်သေပြပါ။

သတိလေးတစ်ချက်

Data class ရဲ့ property တွေကို val နဲ့ immutable ထားလေ့ရှိတဲ့အတွက် value ပြောင်းချင်ရင် copy() function ကို အမြဲသုံးသင့်ပြီး၊ map { } လိုမျိုး collection function တွေက original list ကို မပြောင်းဘဲ list အသစ်ပဲ ပြန်ပေးတယ်ဆိုတာ သတိရပါ။

ဒီနေရာမှာ လူအများမှားတတ်တယ်

  • data class ရဲ့ copy() function ကို မသိဘဲ product.price = newPrice လို့ တိုက်ရိုက်ပြင်ဖို့ ကြိုးစားမိပြီး val property ဆိုလို့ compile error တက်တတ်ပါတယ်
  • abstract class ကို instance ချက်ချင်း ဖန်တီးလို့ရမယ်လို့ထင်ပြီး Animal("X") လို့ ခေါ်မိတတ်ပါတယ် - abstract class ကို subclass ကနေမှသာ instantiate လုပ်လို့ရပါတယ်

အခု ကိုယ်တိုင် စမ်းကြည့်

Task 1 ထဲကို Bird class အသစ်တစ်ခု ထပ်ထည့်ပြီး sound() ကို override လုပ်ကြည့်ပါ - polymorphism ကြောင့် code အဓိက logic ဘာမှ ပြောင်းစရာမလိုဘဲ list ထဲထည့်ရုံနဲ့ အလုပ်လုပ်တာကို ၅ မိနစ်အတွင်း သက်သေပြပါ။

You'll know it worked when: Dog/Cat ရဲ့ sound output, expensive product name list, price အလိုက်စီထားတဲ့ list, ပြီးတော့ 10% discount ပြီး price ချိုးထားတဲ့ product list တွေကို console မှာ တွေ့ရပါမယ်။

Practice Set: OOP နှင့် Collections | Thuta Learning