Polymorphism #3 :  Reuse Method

    วุ่นวายหน่อยนะครับ Syntax ของมัน แต่ไม่ต้องกังวลครับ เวลาเอาไปใช้มันจะธรรมชาติมาก เรามาลองดูตัวอย่างของการประยุกต์ใช้ Polymorphism กัน

    การประยุกต์ที่เราจะเรียนในบทนี้คือการสร้าง function/method ครอบจักรวาล สามารถรองรับ code ในอนาคตได้โดยไม่้ต้องเปลี่ยนแปลงเนื้อหาใน method นี้เลย เรามาดูตัวอย่างกัน

showwage.cs

using System;
abstract class Employee
{
	protected int rate_per_hour = 0;
	protected string name = "";
	protected int hours = 0;
	abstract public int pay();
	abstract public string showname();
}
class Manager : Employee
{
	public Manager(string name, int hours)
	{
		base.rate_per_hour = 300;
		base.hours = hours;
		this.name = name;
	}
	override public int pay()
	{
		return rate_per_hour * hours;
	}
	
	override public string showname()
	{
		return "Manager Name " + name;
	}
}
class Start
{
	public static void Main()
	{
		Manager supoj = new Manager("Supoj", 50); 		
		ShowWage(supoj);
	}
	public static void ShowWage(Employee e)
	{ 		
		Console.WriteLine("{0} gains {1} baht this period", e.showname(), e.pay());
	}
}

 

DOS Prompt

C:\CS>showwage
Manager Supoj gains 15000 baht this period

C:\CS>_

 

    จาก code นี้ เราสร้าง abstract class ขึ้นมาก่อน เป็น class Employee คือพนักงานบริษัท ข้างในจะเก็บชื่อ, อัตราเงินเดือนต่อชั่วโมง และก็ชั่วโมงทำงาน มี method อยู่สองตัว pay() คำนวณเงินที่เขาจะได้รับงวดนี้ และ showname() จะ return ชื่อพร้อมตำแหน่งของเขาออกมา  และ 2 methods นี้เองที่เราจะทำ polymorphism

    จากนั้นเราก็ inherit class Employee มาเป็น Manager ระบุไปเลยว่า เงินเดือน 300 บาทต่อหนึ่งชั่วโมง โดยใช้ constructor จากนั้นก็ implement 2 methods ดังกล่าว

    คราวนี้เรามาดูการประยุกต์ใช้นะครับ เราสร้าง Re-use Method ตามหลักการ Polymorphism ที่ชื่อว่า ShowWage(Employee e) Method นี้จะสามารถรองรับพนักงานบริษัททุกคน ไม่ว่าจะเป็นตำแหน่งไหนก็ตาม Method นี้ก็ง่ายๆ ครับ รับ Employee มาหนึ่งคน แล้วพิมพ์ว่า เป็นใคร ตำแหน่งอะไร ได้เงินงวดนี้เท่าไหร่ สังเกตนะครับ ว่า Method นี้มองทุกสิ่งทุกอย่าง เป็น Employee อย่างเดียว เราสามารถ จะ plug-in class อะไรก็ได้ ตราบที่มี Inherit แบบ IS-A จาก Employee

    ถ้าผมอยากสร้าง Class คนทำความสะอาด ผมก็ทำได้ดังนี้ครับ

class Cleaner : Employee
{
	public Cleaner(string name, int hours)
	{
		base.rate_per_hour = 30;
		base.hours = hours;
		this.name = name;
	}
	override public int pay()
	{
		return rate_per_hour * hours;
	}
	override public string showname()
	{
		return "Cleaner Name " + name;
	}
}

    จากนั้นถ้าเราเขียน Main() ดังนี้

public static void Main()
{
	Cleaner suthep = new Cleaner("Suthep", 50); 			
	ShowWage(suthep);
}

DOS Prompt

C:\CS>showwage
Cleaner Suthep gains 1500 baht this period

C:\CS>_

   เห็นไหมครับว่า เราสร้าง class Cleaner มาใช้, ตัว ShowWage() ก็ไม่จำเป็นต้องแก้ไขอะไร re-use code ได้ครับ นี่คือ Application ของ polymorphism ครับเรื่อง re-use functions.