مفاهیم ، مبانی و اصول شی گرایی (OOP) قسمت پنجم : Polymorphism
در
بخش قبل با مفهوم بسیار مهم ارث بری اشنا شدید و آموختید که کلاس ها قادرند از یکدیگر ارث بری کنند . در این مقاله قصد داریم با مفهوم پرکاربرد چند ریختی یا Polymorphism آشنا شویم .
در مثال قبل یک کلاس برای حیوانات ایجاد کردیم و کلاسی برای سگ ها که این کلاس از کلاس حیوانات مشتق شده بود ، به عبارتی رفتار و خواصی مانند حیوانات داشت ولی رفتار و خواص منحصر به فردی نیز داشت (به عنوان مثال پارس کردن) .
حال فرض کنید که تمامی حیوانات یک عمل را انجام می دهند اما هر یک به شکلی متفاوت ، به عنوان مثال عمل خوردن را در نظر بگیرید ، هر حیوانی غدای متفاوی می خورد .
به عبارت دیگر کلاس های مشتق شده قادرند رفتاری از کلاس مادر را به اشکال گوناگون انجام دهند ، به این مفهوم چند ریختی یا PolyMorphism می گویند .
فرض کنید کلاس زیر کلاس حیوانات باشد :
|
Imports Microsoft.VisualBasic
Public Class Animal
Public Overridable Function Eating()
Return "Eats Food"
End Function
End Class
|
به متد Eating دقت نمایید ، کلیدواژه Overridable به آن اضافه شده است ، این کلیدواژه باعث می شود که این متد قابل باز نویسی به ریخت های گوناگون شود ، در صورتی که این کلیدواژه را به کار نبرید در کلاس مشتق شده قادر نخواهید بود متد را بازنویسی کنید .
حال دو کلاس سگ ها و پرندگان را در نظر بگیرید که از کلاس حیوانات مشتق شده اند :
|
Imports Microsoft.VisualBasic
Public Class Dog
Inherits Animal
End Class
|
|
Imports Microsoft.VisualBasic
Public Class Bird
Inherits Animal
End Class
|
همانطور که ملاحظه می کنید هر دو کلاس فوق از کلاس مادرشان یعنی Animal ارث بری می کنند .
حال میخواهیم متد Eating را برای هر یک از این کلاس ها به شکل منحصر به فردی بازنویسی کنیم :
|
Imports Microsoft.VisualBasic
Public Class Dog
Inherits Animal
Public Overrides Function Eating()
Return "Eats Meet"
End Function
End Class
|
|
Imports Microsoft.VisualBasic
Public Class Bird
Inherits Animal
Public Overrides Function Eating()
Return "Eats Seed"
End Function
End Class
|
همانطور که ملاحظه می کنید در کلاس Dog و Bird عمل خوردن بازنویسی شده است و مشخص شده که پرنده ها دانه و سگ ها گوشت می خورند .
برای بازنویسی (Overrides) کلاس های قابل بازنویسی (Overridable) از کلیدواژه Overrides استفاده می شود .
حال یک شی جدید از هر یک از این کلاس ها در صفحه Default.aspx ایجاد کنید و متد Eating را فراخوانی نمایید و نتیجه را ملاحظه کنید :
|
Partial Class _Default
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim MyAnimal As New Animal
Response.Write("Animals " + MyAnimal.Eating() + "<br>")
Dim MyBird As New Bird
Response.Write("Birds " + MyBird.Eating() + "<br>")
Dim MyDog As New Dog
Response.Write("Dogs " + MyDog.Eating() + "<br>")
End Sub
End Class
|
خروجی صفحه :
|
Animals Eats Food Birds Eats Seed Dogs Eats Meet
|
فایل پروژه را از اینجا دانلود کنید . در قسمت بعد با مفهوم واسط یا Interface آشنا خواهیم شد .