مفاهیم ، مبانی و اصول شی گرایی (OOP) قسمت چهارم : inheritance
مفاهیم ، مبانی و اصول شی گرایی (OOP) قسمت چهارم : inheritance
در بخش های قبل با کپسوله سازی برنامه توسط کلاس ها آشنا شدیم و برای این کار از متد ها ، خواص و متغیر ها بهره گرفتیم ، اکنون به مهمترین بخش شی گرایی رسیدیم که در حقیقت اصول شی گرایی را تشکیل می دهند ، این اصول عبارتند از :
۱- ارث بری : Inheritance
۲- چند ریختی Polymorphism :
۳- واسط Interface :
۴- تجرد : Abstraction
در این قسمت به مقوله ارث بری ( Inheritance ) می پردازیم و همچنین با متغیر ها و متدهای Protected آشنا می شویم .
برای این منظور ابتدا به سراغ یک مثال شهودی می رویم ، کلاس حیوانات را در ذهن خود مجسم کنید ( رفتار ها و خواص مشترک حیوانات) این کلاس شامل رفتار (متد) هایی مانند راه رفتن ، خوردن ، آشامیدن و همچنین خواصی مانند وزن ، رنگ ، و… می باشد .
اکنون کلاس سگ را در نظر بگیرید این کلاس علاوه بر داشتن رفتار حیوانات رفتارها و خصیصه های منحصر به فرد دیگری نیز دارد ، مثلا سگ ها پارس می کنند می کنند .
این مثال را به این شکل عنوان می کنم که علاوه بر اینکه سگ از کلاس حیوانات ارث بری می کند رفتار و خصیصه های منحصر به فردی نیز دارند .
فرض کنید کلاس زیر کلاس حیوانات باشد :
Imports Microsoft.VisualBasic
Public Class Animal
Private _Weight As Integer = 50
Public Property Weight() As Integer Get Return _Weight End Get Set(ByVal value As Integer)
_Weight = value
End Set End Property
Public Sub Walk() _Weight -= 1
End Sub Public Sub Eat() _Weight += 1 End Sub End Class
|
این کلاس شامل دو متد راه رفتن (Walk) و خوردن (Eat) و همچنین خصیصه وزن (Weight) می باشد .
با هر بار انجام عمل خوردن یک واحد به وزن اضافه و با هر بار راه رفتن یک واحد از وزن کاسته می شود ، مقدار پیشفرض وزن را هم ۵۰ در نظر گرفته ایم .
حال کلاس سگ را می سازیم ، دقت کنید که کلاس سگ از کلاس حیوانات ارث بری می کند .
Imports Microsoft.VisualBasic
Public Class Dog Inherits Animal
End Class |
همانطور که ملاحظه می کنید به وسیله کلیدواژه Inherits کلاس Dog را از کلاس Animal مشتق کردیم .
کلاس Animal را کلاس Base یا پایه و کلاس Dog را کلاس Derived یا مشتق شده می نامند .
کلاس مشتق شده علاوه بر دارا بودن تمامی رفتار و خصیصه های کلاس پایه می تواند رفتار و خصیصه های منحصر به فردی نیز داشته باشد .
برای مثال یک شی جدید از کلاس Dog ایجاد می کنیم :
Dim Popy As New Dog Popy.Walk() Response.Write(Popy.Weight) |
همانطور که ملاحظه می کنید متد Walk و خصیصه Weight در کلاس Dog نیز موجود می باشد بدون اینکه این متد در کلاس Dog نوشته شده باشد چرا که کلاس Dog از کلاس Animal مشتق شده و دارای خواص و رفتار آن می باشد .
همچنین می توانید برای کلاس Dog یک متد برای پارس کردن بنویسید :
Imports Microsoft.VisualBasic
Public Class Dog Inherits Animal
Public Function Bark() As String Return “Hap Hap !!” End Function
End Class |
و مثال :
Dim Popy As New Dog Popy.Walk() Popy.Bark() |
در کد فوق پاپی پس از راه رفتن ، پارس می کند !!!
واضح است که متد Bark فقط داخل کلاس Dog موجود می باشد و به کلاس Animal ارتباطی ندارد چرا که همه حیوانات پارس نمی کنند !!
نکته دیگری که باید به آن توجه کرد این است که در هنگام ارث بری ، کلاس مشتق شده به متغیر ها و متد های Private دسترسی ندارد .
نوع دیگری که در ارث بری کاربرد پیدا می کند متغیر ها و متدهای Protected هستند ، این متغیرها و متد ها فقط در هنگام ارث بری مفهوم پیدا می کنند . به این معنی که متغیر های Protected تا قبل از ارث بری دقیقا مانند متغیر ها Private عمل می کنند ولی در کلاس مشتق شده مانند متغیر های Public قابل دسترسی هستند .
فرض کنید که یک متغیر خصوصی یا Protected به نام Name از نوع String در کلاس Animal داشته باشیم . این متغیر در خارج از کلاس Animal قابل دسترسی نیست (مثلا در کلاس صفحه Default.aspx) ولی این متغیر در کلاس Dog قابل دسترسی می باشد .
ابتدا متغیر زیر را به کلاس Animal اضافه می کنیم ، سپس در کلاس Dog و در Constructor توسط یک ورودی به این متغیر مقدار دهی می کنیم :
Protected Name As String = “” |
Imports Microsoft.VisualBasic
Public Class Dog Inherits Animal
Public Sub New()
End Sub Public Sub New(ByVal IName As String) Name = IName End Sub
Public Function Bark() As String Return “Hap Hap !!” End Function
End Class
|
در کد فوق Name همان متغیر Protected ای است که در کلاس پایه یعنی Animal اضافه کردیم و IName مقدار ورودی Constructor دوم ماست .
خوب واضح است که ما خارج از کلاس هایی که از کلاس Animal ارث بری نمی کنند به متغیر Name دسترسی نخواهیم داشت .
آخرین دیدگاهها