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

Practice Exercises: OOP + Collections + LINQ

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

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

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

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

ဒီ exercise set က Intermediate/Advanced chapter တွေက OOP concepts (class, inheritance, polymorphism), collections (List, Dictionary) နဲ့ LINQ တို့ကို ပေါင်းစပ်ပြီး လေ့ကျင့်ဖို့ ရည်ရွယ်ပါတယ်။ Task တွေက Practice Exercises: Fundamentals ထက် ပိုခက်ပြီး, class ကိုယ်တိုင် design လုပ်ရတာ၊ collection ကို LINQ နဲ့ query လုပ်ရတာတွေ ပါဝင်ပါတယ်။ ဒီ level ကို ကျော်နိုင်ရင် mini-project တွေကို ပိုမို confident ဖြစ်စွာ ဆောက်နိုင်ပါပြီ။ Task တစ်ခုချင်းစီကို သီးခြား console app project အသစ်ချင်းစီအနေနဲ့ ဆောက်ပြီး run ကြည့်ပါ။

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

(1) Animal base class ကို Name property နဲ့ virtual MakeSound() method နဲ့ ရေးပြီး, Dog နဲ့ Cat subclasses နှစ်ခုနဲ့ MakeSound() ကို override လုပ်ပါ။ List<Animal> ထဲမှာ Dog/Cat objects တွေ ထည့်ပြီး loop နဲ့ MakeSound() ခေါ်ကာ polymorphism အလုပ်လုပ်ပုံကို confirm ပါ။ (2) Dictionary<string, int> တစ်ခုနဲ့ product name ကို key, stock quantity ကို value အနေနဲ့ ထားပြီး, stock 10 အောက်ရှိတဲ့ products အားလုံးကို LINQ Where() နဲ့ ရှာပြီး print ပါ။ (3) Student class (Name, List<int> Scores) တစ်ခု ရေးပြီး, List<Student> ထဲက student တစ်ယောက်ချင်းစီရဲ့ average score ကို LINQ Average() သုံးပြီး တွက်ကာ, average အများဆုံး student ကို OrderByDescending() နဲ့ ရှာထုတ်ပါ။

Code နမူနာ

csharp
// Task 1 starter
class Animal
{
    public string Name { get; set; }
    public virtual void MakeSound()
    {
        Console.WriteLine($"{Name} makes a sound");
    }
}

class Dog : Animal
{
    public override void MakeSound() => Console.WriteLine($"{Name} says Woof!");
}

class Cat : Animal
{
    public override void MakeSound() => Console.WriteLine($"{Name} says Meow!");
}

// Task 2 starter
Dictionary<string, int> stock = new Dictionary<string, int>
{
    { "Pen", 25 }, { "Notebook", 8 }, { "Eraser", 3 }, { "Ruler", 40 }
};
var lowStock = stock.Where(s => s.Value < 10);
foreach (var item in lowStock)
    Console.WriteLine($"{item.Key}: {item.Value}");

// Task 3 starter
class Student
{
    public string Name { get; set; }
    public List<int> Scores { get; set; }
}

List<Student> students = new List<Student>
{
    new Student { Name = "Aye", Scores = new List<int> { 80, 90, 70 } },
    new Student { Name = "Min", Scores = new List<int> { 60, 75, 65 } }
};
// students.OrderByDescending(s => s.Scores.Average()) သုံးပြီး top student ကို ရှာပါ
You should see
Task သုံးခုစလုံးအတွက် Dog/Cat sound အမှန်ပေါ်ခြင်း၊ low-stock products list ခြင်း၊ average score အများဆုံး student ကို ဖော်ထုတ်ခြင်း ဆိုတဲ့ output များ ရရှိမှာပါ။

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

Task 1 ထဲကို Bird class တစ်ခု ထပ်ဖြည့်ပြီး MakeSound() ကို override လုပ်ကာ, List<Animal> ထဲမှာ Bird object ပါအောင် ထည့်ပြီး loop ပြန်run ကြည့်ပါ (5 minutes).

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

Polymorphism အလုပ်လုပ်ဖို့ base class method ကို virtual, derived class method ကို override နှစ်ခုစလုံး ထားဖို့ လိုအပ်တာကို သတိရပါ။

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

  • Base class method ကို virtual keyword မထည့်ဘဲ subclass ထဲမှာ override ရေးလို့ compiler error တက်တတ်တာ
  • LINQ Average() ကို empty list (Scores.Count == 0) အပေါ်မှာ ခေါ်လိုက်လို့ InvalidOperationException တက်တာကို မထည့်စဉ်းစားတတ်တာ

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

Task 1 ထဲကို Bird class တစ်ခု ထပ်ဖြည့်ပြီး MakeSound() ကို override လုပ်ကာ, List<Animal> ထဲမှာ Bird object ပါအောင် ထည့်ပြီး loop ပြန်run ကြည့်ပါ (5 minutes).

You'll know it worked when: Task သုံးခုစလုံးအတွက် Dog/Cat sound အမှန်ပေါ်ခြင်း၊ low-stock products list ခြင်း၊ average score အများဆုံး student ကို ဖော်ထုတ်ခြင်း ဆိုတဲ့ output များ ရရှိမှာပါ။

Practice Exercises: OOP + Collections + LINQ | Thuta Learning