مفاهیم ، مبانی و اصول شی گرایی (OOP) قسمت پنجم : چند ریختی
مفاهیم ، مبانی و اصول شی گرایی (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() + ” Dim MyBird As New Bird Response.Write(“Birds ” + MyBird.Eating() + ” Dim MyDog As New Dog Response.Write(“Dogs ” + MyDog.Eating() + ” End Sub End Class |
خروجی صفحه :
Animals Eats Food |
آخرین دیدگاهها