مفاهیم ، مبانی و اصول شی گرایی (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 دسترسی نخواهیم داشت .

شاید این مطالب را هم دوست داشته باشید

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.