1. مهمان گرامی، جهت ارسال پست، دانلود و سایر امکانات ویژه کاربران عضو، ثبت نام کنید.
    بستن اطلاعیه

برنامه نویسی شیئ گرا در vb.net

شروع موضوع توسط minaaa ‏22/10/11 در انجمن .Net

  1. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,773
    تشکر شده:
    6,457
    امتیاز دستاورد:
    113
    پاسخ : برنامه نویسی شیئ گرا در vb.net

    اینترفیس‌ها

    اینترفیس یک قرارداد است. هر شیئ که پیاده سازی می‌شود، برای تامین پیاده سازی اعضای تعیین شده در آن اینترفیس یک ضمانت نامه اینترفیس می‌گیرد. اگر یک شیئ نیاز به تعامل با اینترفیسی داشته باشد، می‌تواند با هر شیئ که آن اینترفیس را پیاده سازی می‌کند تعامل داشته باشد. یک اینترفیس فقط اعضایی را تعریف می‌کند که بوسیله شیئ که بعدا پیاده سازی خواهد شد ساخته می‌شود. تعریف اینترفیس هیچ اطلاعاتی درباره پیاده سازی اعضاء جز پارامترهایی که می‌گیرند و نوع مقادیری که آنها برخواهند گرداند، نمی‌دهد و پیاده سازی اینترفیس‌ها کاملا به پیاده سازی کلاس واگذار می‌شود.
    بنابراین این امکان دارد که در اشیاء مختلف پیاده سازی‌های مختلفی از اعضای مشابه داشته باشیم. به عنوان مثال، اینترفیسی به نام IShape که یک متد CalculateArea تعریف می‌کند. کلاس Circle این اینترفیس را برای محاسبه مساحت خود، به طریق متفاوتی با کلاس Square پیاده سازی می‌کند. هر چند که یک شیئ که نیاز به تعامل با IShapeدارد می‌تواند متد CalculateArea را فراخوانی کند و هر دوی Circle یا Square نتایج درستی می‌دهند
     
  2. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,773
    تشکر شده:
    6,457
    امتیاز دستاورد:
    113
    پاسخ : برنامه نویسی شیئ گرا در vb.net

    تعریف اینترفیس‌ها



    اینترفیس‌ها با کلمه کلیدی Interface تعریف می‌شوند.

    Public Interface IDrivable

    End Interface

    این اعلان اینترفیس IDrivable را تعریف می‌کند اما هیچ عضوی برای آن تعریف
    نمی‌کند. متدهای یک عضو باید با امضای متد تعریف شود، اما بدون بدون
    تعریف سطح دسترسی مثل Public و Private. سطح دسترسی یک اینترفیسس سطح
    دسترسی اعضای آن اینترفیس را نیز تعیین می‌کند. پس اگر یک اینترفیس Public
    داشته باشید، همه اعضایش هم باید Public باشند. مثال زیر نشان می‌دهد که
    چطور متدها را به اینترفیس اضافه کنید:



    کد:

    Public Interface IDrivable
    Sub GoForward(ByVal Speed As Integer)
    Sub Halt()
    Function DistanceTraveled() As Integer
    End Interface</pre>



    همچنین شما می‌توانید خصوصیات را نیز به اینترفیس‌ها اضافه کنید. خصوصیت
    باید ReadOnly یا WriteOnly تعریف شوند. مثال زیر را ببینید:



    کد:

    Public Interface IDrivable
    ‘ This defines a read-only property.
    ReadOnly Property FuelLevel() As Integer
    End Interface</pre>



    اگرچه شما می‌توانید خصوصیات را در اینترفیس‌ها تعریف کنید، اما
    نمی‌توانید فیلدها را در آنها تعریف کنید. این شرط تضمین می‌کند که
    کلاسهایی که از طریق اینترفیس‌ها تعامل دارند به دادهای درونی یک شیئ
    دسترسی نداشته باشند.

    اینترفیس‌ها همچنین می‌توانند رویدادها را تعریف کنند:

    کد:

    Public Interface IDrivable
    Event OutOfFuel(ByVal sender As Object, e As System.EventArgs)
     
  3. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,773
    تشکر شده:
    6,457
    امتیاز دستاورد:
    113
    پاسخ : برنامه نویسی شیئ گرا در vb.net

    چند شکلی با اینترفیس‌ها (Polymorphism with Interfaces)



    هر شیئ که یک اینترفیس خاص را پیاده سازی می‌کند، می‌تواند با هر یک از اشیاء دیگری که به آن اینترفیس نیاز دارند، تعامل کند.



    کد:

    Public Sub GoSomewhere(ByVal v As IDrivable)
    ‘ Implementation omitted
    End Sub</pre>



    این متد نیاز به یک پیاده سازی از اینترفیس IDrivable دارد. هر شیئ که این
    اینترفیس را پیاده سازی می‌کند می‌تواند به عنوان یک پارامتر به این متد
    پاس داده شود. وقتی یک شیئ توسط اینترفیسش تعامل می‌کند، فقط اعضاء آن
    اینترفیس در دسترس هستند.

    شما همچنین می‌توانید به طور ضمنی اشیایی که اینترفیس خاصی را پیاده سازی
    می‍کنند درست کنید. (توجه کنید در این مثال Truck باید IDrivable را پیاده
    سازی کند)



    کد:

    Dim myTruck As New Truck()
    Dim myVehicle As IDrivable ​
    ‘ Casts myTruck to the IDrivable interface
    myVehicle = CType(myTruck, IDrivable)​
    </pre>

     
  4. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,773
    تشکر شده:
    6,457
    امتیاز دستاورد:
    113
    پاسخ : برنامه نویسی شیئ گرا در vb.net

    پیاده سازی اینترفیس‌ها



    در VB</acronym>.Net اینترفیس‌ها بوسیله کلاس‌ها و ساختارها (Structures) با کلمه کلیدی Implements پیاده سازی می‌شوند:



    کد:

    Public Class Truck
    Implements IDrivable
    ‘ Additional implementation code omitted
    End Class</pre>



    کلاس‌ها می‌توانند چندین اینترفیس را پیاده سازی کنند. اگر بخواهید کلاسی
    تعریف کنید که چندین اینترفیس را پیاده سازی کند، می‌توانید نام
    اینترفیس‌ها را با کاما از هم جدا کنید. مثال زیر را ببینید:



    کد:

    Public Class Truck
    Implements IDrivable, IFuelBurning, ICargoCarrying
    ‘ Additional implementation code omitted
    End Class</pre>



    وقتی یک کلاس یا ساختاری یک اینترفیس را پیاده سازی می‌کند، شما باید برای
    هر یک از اعضای آن اینترفیس پیاده سازی جداگانه‌ای انجام دهید. اگر
    اینترفیس‌های چندگانه پیاده سازی شوند، باید یک پیاده سازی برای هر عضو هر
    اینترفیسی انجام دهید.
     
  5. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,773
    تشکر شده:
    6,457
    امتیاز دستاورد:
    113
    پاسخ : برنامه نویسی شیئ گرا در vb.net

    پیاده سازی اعضای اینترفیس‌ها



    در VB</acronym>.NET، یک عضو کلاس با کلمه
    کلیدی Implements یک عضو اینترفیس را پیاده سازی می‌کند. عضو کلاسی که عضو
    اینترفیس را پیاده سازی می‌کند باید امضایی مشابه آن چه در اینترفیس
    تعریف شده، داشته باشد. اما نیاز نیست که سطح دسترسی مشابهی با آن داشته
    باشد. مثال بعد نشان می‌دهد چگونه یک عضو اینترفیس تعریف می‌شود.



    کد:

    Public Interface IDrivable
    Sub GoForward(ByVal Speed As Integer)
    End Interface ​
    Public Class Truck
    Implements IDrivable​
    Public Sub GoForward(ByVal Speed As Integer)
    Implements IDrivable.GoForward
    ‘ Implementation omitted
    End Sub
    End Class​
    </pre>



    عضو کلاسی که یک عضو اینترفیس را پیاده سازی می‌کند مجبور نیست که نامی
    مشابه نام عضو اینترفیس داشته باشد. مثال بعد یک پیاده سازی کاملا معتبر
    متد GoForward از اینترفیس IDrivable را نشان می‌دهد:

    کد:

    Public Sub Move(ByVal Speed As Integer)
    Implements IDrivable.GoForward
    ‘ Implementation omitted
    End Sub​
    </pre>



    هر فراخوانی متد GoForward از اینترفیس IDrivable در مثال قبل، متد Move
    را از کلاس Truck اجرا می‌کند. همچنین شما می‌توانید سطح دسترسی متفاوتی
    را برای متد کلاسی که متد اینترفیس را پیاده سازی می‌کند در نظر بگیرید.
    به عنوان مثال می‌توانید متد Public اینترفیس را متد Private کلاس پیاده
    سازی کنید. اگر این روش را انجام دهید، وقتی که دسترسی درون اینترفیس است
    متد Public می‌شود، اما وقتی دسترسی به عنوان عضوی از کلاس است Private
    می‌ماند.
     
  6. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,773
    تشکر شده:
    6,457
    امتیاز دستاورد:
    113
    پاسخ : برنامه نویسی شیئ گرا در vb.net

    وراثت چند شکلی



    وراثت اجازه می‌دهد که کلاس جدیدی تعریف کنید که تمام اعضاء و اعمال یک
    کلاس که قبلا تعریف شده را در خود داشته باشد. به این ترتیب می‌توانید
    کلاس‌هایی درست کنید که اعمال پایه و مشترکی را انجام دهند و سپس زیر
    کلاسهای خاصی تولید کنید که خدمات متفاوت اما مرتبطی ارائه دهند.

    در این بخش یاد می‌گیرید که چگونه از وراثت برای مشتق کردن کلاسهای جدید
    از کلاسهای پایه استفاده کنید، چطور پیاده سازی جدیدی از اعضای یک کلاس
    پایه انجام دهید و چطور کلاسهای پایه مجرد درست کنید.

    وراثت



    وراثت این امکان را به شما می‌دهد که چندین کلاس تولید کنید که از هم
    متمایزند اما در برخی از اعمال با هم شریک‌اند. کلاسهای ویژه‌ای که کلاس
    “مشتق شده ” (Derived Classes) نامیده می‌شوند، از کلاس مشترک که “کلاس
    پایه” (Base Class) نامیده می‌شود ارث می‌برند. کلاسDerived را همچنین
    کلاس تعمیم یافته (Extended) یک کلاس پایه نیز می‌نامند. کلاس پایه اعمال
    مشترکی که به هر کلاس مشتق عرضه می‌شود را کپسوله سازی می‌کند. برای مثال
    فرض کنید کلاسی به نام کامیون داریم، کلاس کامیون تمامی اعمال اولیه که یک
    ماشین نیاز دارد را داراست. متدهایی برای به جلو رفتن، برگشتن و روشن شدن
    دارد و تمام متدهای لازم برای برای انجام این اعمال را کپسوله می‌کند.
    شاید شما یک کلاس مشتق که PickupTruck نام دارد تعریف کنید که از کلاس
    کامیون ارث می‌برد. چون این از کامیون ارث می برد همه اعمال و قابلیت‌هایی
    که کامیون تامین می‌کند را دارد. سپس شما می‌توانید قابلیت‌های اضافه‌ای
    را برای کلاس جدید پیاده سازی کنید، مانند خصوصیت “بار”. کلاس PickupTruck
    می‌تواند به عنوان یک کلاس پایه برای کلاس مشتق دیگر “کامیون چهار دنده”
    ایفای نقش کند.

    چند رفتاری در کلاس‌های وارث



    عموما” کلاس‌های وارث یک رابطه “یک … است” با کلاس پایه دارند. یک “کامیون
    کشاورزی چهاردنده” یک “کامیون کشاورزی” است و یک کامیون “کشاورزی” یک
    “کامیون” است. هر نمونه از کلاس مشتق می‌تواند رفتار متفاوتی به عنوان
    نمونه‌ای از کلاس پایه‌اش داشته باشد. پس، اگر متدی نیاز به شیئ کامیون
    داشته باشد شما می‌توانید شیئ کامیون کشاورزی را عرضه کنید. هر کلاس مشتق
    ممکن است به طور ضمنی به کلاس پایه خود تبدیل شود. وقتی یک کلاس به کلاس
    پایه خودش تبدیل می‌شود، هر عضوی که به وسیله کلاس مشتق پیاده سازی شده
    غیر قابل دسترس خواهند شد و تنها اعضای کلاس پایه در دسترس خواند بود.

    ساختن کلاس‌های وارث



    یک کلاس وارث به وسیله کلمه کلیدی Inherits در VB</acronym>.NET تعریف می‌شود. در مثال زیر کلاس PickupTruckکه از کلاس Truck ارث برده را تعریف نمودیم:



    کد:

    Public Class PickupTruck
    Inherits Truck ​
    ‘ Additional implementation omitted
    End Class​
    </pre>



    کلاس ها فقط می‌توانند از یک کلاس پایه ارث ببرند اما میتوانند چندین
    اینترفیس را پیاده سازی کنند. اگر کلاس شما چندین اینترفیس را پیاده سازی
    کند و همچنین از یک کلاس ارث ببرد، باید از کلمه کلیدی Implements را
    بلافاصله بعد از کلمه کلیدی Inherits استفاده کنید:



    کد:

    Public Class FourWheelDrivePickupTruck
    Inherits PickupTruck
    Implements IFourWheelDrive ​
    ‘ Additional implementation omitted
    End Class​
    </pre>



    وقتی که کلاس وارث تعریف شد، می‌توانید اعضای اضافی را پیاده سازی کنید که باعث اضافه شدن اعمال اختیاری به کلاستان می‌شود.

    کلاس‌های بدون وارث



    گاهی شاید بخواهید کلاسی درست کنید که نتواند به عنوان کلاس پایه برای
    دیگر کلاس‌ها عمل کند. به عنوان مثال شاید کلاس خاصی تعریف کنید که از آن
    در کامپوننت‌هایتان استفاده می‌کنید و نمی‌خواهید قابل استفاده به عنوان
    کلاس پایه برای دیگر برنامه نویسان باشد. در این موارد می‌توانید کلاستان
    را با NotInheritabel برچسب بزنید.



    کد:

    Public NotInheritable Class AClass
    ‘ Implementation omitted
    End Class</pre>



    اعضاء وارث



    وقتی یک کلاس وارث درست می‌کنیم، کلاس جدید همه اعمال موجود در کلاس پایه
    را حفظ می‌کند. علاوه بر این اعضا جدیدی را اضافه می‌کند، شما می‌توانید
    اعضای وارث را آن طور که می‌خواهید پیاده سازی کنید. Overriding اعضای
    پایه این امکان را به شما می‌دهد که یک عضو موجود در کلاس پایه را پیاده
    سازی جدیدی کنید. در VB</acronym>.NET همچنین
    می‌توانید اعضای پایه را سایه بزنید (Shadow). سایه زنی اعضای پایه این
    امکان را می‌دهد که عضو پایه را پنهان کنیم و یک عضو جدید با همان نام،
    اما با خصوصیات کاملا” متفاوت شامل امضاء، و سطح دسترسی جدید اضافه کنیم.
     
  7. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,773
    تشکر شده:
    6,457
    امتیاز دستاورد:
    113
    پاسخ : برنامه نویسی شیئ گرا در vb.net

    Overriding اعضاء کلاس پایه



    وقتی از یک کلاس پایه ارث می‌برید، می‌توانید پیاده سازی متفاوتی برای
    اعضای کلاس پایه بوسیله Override کردن آنها داشته باشید. برای مثال، کلاس
    Car ممکن است متدی با نام GoForward داشته باشد. اگر کلاس SportCar از
    کلاس Car به ارث ببرد، شاید بخواهد پیاده سازی متفاوتی از متد GoForward
    داشته باشد. فقط متدها و خصوصیات کلاس پایه می‌توانند Override شوند.
    متغییرها و رویدادهای اعضاء نمی‌توانند Override شوند.

    با استفاده از کلمه کلیدی Overrides می‌توانید پیاده سازی متفاوتی از یک
    عضو ارایه کنید. پیاده سازی جدید باید امضا و نوع برگشتی یکسانی با عضوی
    که Override می‌شود داشته باشد و باید سطح دسترسی مشابهی هم داشته باشد.



    کد:

    ‘ This example assumes the existence of a GoForward method in the base class
    Public Class SportsCar
    Inherits Car ​
    ‘ This line declares the overridden method
    Public Overrides Sub GoForward(ByVal Speed As Integer)
    ‘ Implementation omitted
    End Sub
    End Class​
    </pre>



    وقتی که یک عضو Override می‌شود، عضو جدید “جایگزین عضو کلاس پایه” نامیده
    می‌شود. به عنوان مثال، اگر نمونه‌ای از یک کلاس وارث از کلاس پایه خودش
    ساخته شود و یک متد Override شده فراخوانی شود، پیاده سازی جدید اجرا
    خواهد شد. برای Override عضو کلاس پایه، اعضا باید با Overridable برچسب
    زده شوند:



    کد:

    Public Overridable Sub OverrideMe()
    ‘ Implementation omitted
    End Sub</pre>

     
  8. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,773
    تشکر شده:
    6,457
    امتیاز دستاورد:
    113
    پاسخ : برنامه نویسی شیئ گرا در vb.net

    سایه زنی (Shadowing) اعضای کلاس پایه



    در بخش قبل آموختید که چطور پیاده سازی عضوی در کلاس پایه را با پیاده
    سازی متفاوتی از عضو مشابهی، جایگزین کنید. در NET. همچنین امکان پذیر است
    که پیاده سازی عضو کلاس پایه را پنهان کرد و با عضو کاملا” جدیدی جایگزین
    کرد، که سطح دسترسی و امضای متفاوتی داشته باشد یا حتی نوع متفاوتی داشته
    باشد. این کار Shadowing نامیده می‌شود. در VB</acronym>.NET از کلمه کلیدی Shadows برای جایگزینی پیاده سازی جدید برای عضو کلاس پایه استفاده می‌کنیم.



    کد:

    ‘ This is the base class
    Public Class MyBaseClass
    Public Function MyMethod(ByVal I As Integer) As String
    ‘ Implementation omitted
    End Function
    End Class ​
    ‘ This class inherits the base class
    Public Class MyInheritedClass
    Inherits MyBaseClass​
    ‘ This function shadows the MyMethod sub defined in the base class.
    ‘ Note that this member has a completely different signature, access
    ‘ level and returns a different type of value.
    Friend Shadows Function MyMethod(ByVal S As String) As Integer
    ‘ Implementation omitted
    End Function
    End Class​
    </pre>

     
  9. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,773
    تشکر شده:
    6,457
    امتیاز دستاورد:
    113
    پاسخ : برنامه نویسی شیئ گرا در vb.net

    حفظ سازگاری با اعضای سایه زده شده



    وقتی عضو کلاسی را سایه می‌زنید یا پنهان می‌کنید، پیاده سازی کلاس پایه
    را پنهان می‌کنید و پیاده سازی جدیدی می‌سازید که نیاز به مشخصات مشابه با
    عضو کلاس پایه ندارد. این می‌تواند موجب مشکلاتی شود. اگر شیئی تابع
    MyMethod را از مثال قبل صدا بزند، این انتظار دارد که نوع String برگشت
    داده شود و وقتی یک Interger از نمونه عضو سایه زده شده برمی‌گردد، یک خطا
    ایجاد می‌شود. بنابراین باید وقتی عضوی را سایه می‌زنید یا پنهان می‌کنید
    دقت زیادی داشته باشید. این باید در مواردی انجام شود که شما یقین دارید
    که سازگاری از بین نمی‌رود.



    کد:

    ‘ This example uses the MyBaseClass and MyInheritedClass classes
    ‘ defined in the previous code example.
    Dim X As New MyInheritedClass()
    Dim Y As MyBaseClass ​
    ‘ X and Y now refer to the same object, but the variables have

     
  10. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,773
    تشکر شده:
    6,457
    امتیاز دستاورد:
    113
    پاسخ : برنامه نویسی شیئ گرا در vb.net

    دسترسی به اعضاء کلاس پایه



    وقتی اعضاء را Override یا پنهان می‌سازید، شاید بخواهید به پیاده سازی
    اعضاء در کلاس پایه دسترسی داشته باشید. بوسیله کلمه کلیدی MyBase
    می‌توانید به اعضای کلاس پایه دسترسی داشته باشید. این کلمه اشاره‌ای به
    پیاده سازی کلاس پایه دارد و اجازه می‌دهد که پیاده سازی اعضای کلاس پایه
    را در اختیار داشته باشید. مثال زیر نشان می‌دهد که چگونه یک عضو کلاس
    پایه احضار می‌شود:



    کد:

    ‘ This example demonstrates calling the base class implementation of
    ‘ MyMethod from within an override of that method
    Public Overrides Function MyMethod(ByVal I As Integer) As String
    MyBase.MyMethod(I)
    ‘ Additional implementation omitted
    End Function</pre>