Part1 -> Section2 -> Classes -> 007. Inheritance

     หนึ่งในผู้เล่นคนสำคัญของ Object Oriented Programming (OOP) ก็คือ Inheritance หรือ การสืบทอด นั่นเอง มดูกันว่ามันจะมีประโยชน์อย่างไร ใช้งานกันอย่างไร ลองดูจากตัวอย่างแรก

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            Animal animal = new Animal();
            animal.Greet();

            Dog dog = new Dog();
            dog.Greet();

            Animal dogAnimal = new Dog();
            dogAnimal.Greet();
        }

    }

    public class Animal
    {
        public void Greet()
        {
            Console.WriteLine("Hello, I am Animal");
        }
    }

    public class Dog : Animal
    {
    }

    public class Cat : Animal
    {
    }

}

จากตัวอย่าง อธิบายเป็นส่วนๆ เพื่อความเข้าใจง่ายๆ
- class Animal มี method Greet ทำหน้าที่เขียน output สวัสดี ข้าคือสัตว์
- class Dog : Animal คลาส dog สืบทอดมาจากคลาส animal ใช้ : (colon) เป็นเครื่องหมายของการสืบทอด
- class Cat : Animal คลาส cat ก็สืบทอดคลาส animal เช่นเดียวกัน
- ใน method Main
     - สร้าง object ของ class Animal และเรียกใช้งาน method Greet
     - สร้าง object ของ class Dog และเรียกใช้งาน method Greet
     - สร้าง object class Animal แต่เรียกจาก class Dog และเรียกใช้งาน method Greet

ได้ผลลัพธ์ ดังนี้
จากผลลัพธ์จะเห็นได้ว่า class ที่เป็น class ลูก(Dog) สามารถที่จะเรียกใช้งาน method ของ class แม่ได้ (ขึ้นอยู่กับ visibility ด้วย จากตัวอย่าง ประกาศ method เป็น public จึงเข้าใช้ได้สบายบรื๋อ) รวมถึงเราสามารถสร้าง object ในแบบ Animal dogAnimal = new Dog(); ได้อีกด้วย (แต่สำหรับกระผมนั้น ไม่ค่อยได้ใช้แบบนี้หรอกคับ อ่านโค้ดยากด้วย ต้องแปลหลายขั้น)

     ลองดูการใช้งานในตัวอย่างต่อไปนี้ เป็นแนวทางการใช้งานจริง

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            Animal animal = new Animal();
            animal.Greet();

            Dog dog = new Dog();
            dog.Greet();

            Animal dogAnimal = new Dog();
            dogAnimal.Greet();

            Cat cat = new Cat();
            cat.Greet();
        }

    }

    public class Animal
    {
        public virtual void Greet()
        {
            Console.WriteLine("Hello, I am Animal");
        }
    }

    public class Dog : Animal
    {
        public override void Greet()
        {
            Console.WriteLine("Hi, I am Dog");
            base.Greet();
        }
    }

    public class Cat : Animal
    {
        public override void Greet()
        {
            Console.WriteLine("Hi, I am Cat");
            base.Greet();
        }
    }

}

ได้ผลลัพธ์ดังนี้
- ใน class Animal มีการเพิ่ม virtual ให้กับ method Greet
- ใน class Dog และ Cat เพิ่ม method Greet โดยใช้ override เพื่อระบุว่าถ้ามีการเรียก method Greet นั้นให้ทำใน method override นี้นะ (แทนที่จะไปทำ method Greet ใน class Animal) ซึ่งทำหน้าที่เขียน output หวัดดี ข้าคือหมา/แมว และเรียกใช้ method Greet ของ class Animal โดยใช้ base (เสมือนเป็น object ของ class แม่ (Animal) เรียกใช้ได้เลยโดยไม่ต้องสร้าง สะดวกมากๆ)

     สรุป นะคับ key สำคัญของ inheritance คือ : (colon), vitrual และ override ส่วนประโยชน์ของมันคือ

1. สามารถเรียกใช้งานคำสั่งต่างๆจาก class แม่ได้ทันที ไม่ต้องสร้าง object ให้เสียเวลา
2. ไม่ต้องเขียนโค้ดแบบเดิมซ้ำๆ เพราะเรียกใช้งานจาก class แม่ได้เบรยยยย
3. เป็นการจัดกลุ่ม class ทำให้โปรแกรมเป็นระเบียบ ง่ายต่อการ maintenance code

     สุดท้ายอย่าลืมนำการสืบทอดไปใช้งานกันนะคับ แต่ที่สำคัญคือต้องตีโจทย์ให้แตกว่าโปรแกรมเราจะต้องมี class แม่เป็นอะไร class ลูกเป็นอะไรบ้าง ซึ่งก็มีวิธีการออกแบบ class diagram ก่อนที่จะนำมาเขียนโค้ดด้วยนะคับ แต่ในที่นี้ผมจะขอไม่กล่าวถึงนะ ลองดูในลิงค์ครับ ไม่ยาก ตัวอย่างของ class diagram ในบทความนี้จะแสดงด้านล่างคับ ถ้าอยากลองสร้างเล่นๆ ก็ลองเข้า ที่นี่ เลยคับ ใช้งานออนไลน์ได้เลย


สอบถามหรือติดตามได้ที่ https://www.facebook.com/learnaspnetmvcjquery

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

Part2 -> Section1 The Basic -> 003. MVC Folder Structure

Part2 -> Section1 The Basic -> 001. Introduction

Part2 -> Section1 The Basic -> 005. Controller