PDA

View Full Version : سوال: وراثت



javadaskari
چهارشنبه 03 مهر 1387, 20:46 عصر
با سلام
چگونه ميتوانم يک فرم پايه درست کنم و بقيه فرم هاي ديگر از اين فرم پايه چيزهايي را به ارث ببرند.خلاصه هرکي ميتونه يه چيزهايي در مورد ارث و ميراث مثال بزنه که ما هم بفهميم! با تشکر

ali_md110
پنج شنبه 04 مهر 1387, 20:29 عصر
در دات نت شی گرایی به اوج رسیده اصطلاح کلاس و ارث بری یکی ار مباحث پیشرفته دات نت هست

وقتی یک زیر کلاس از یک کلاس دیگه مشتق میکنیم میتوانیم تمام خواص متد و رویدادهای کلاس پدر به کلاس زیر یعنی کلاس پسر بدهیم به این فرایند ارث بری گفته میشه
مثال :اگر دقت کنیم خواص و اعمالی مثل { 2پا دارند 2دست دارند4 پا دارند گوش دارند حرف میزنند پارس میکنند ,قدقد میکنند و غیره }همگی اینها بلافاصله ما را یاد حیوانات می اندازه ولی در بین این موجودات بعضی ها 4 پا دارند بعضی 2 پا بعضی حرف میزنند برخی خصوصیات مشترک بعضی مختص یک موجود خاص میباشد
مثلا شما با توصیف موجودی با 4 پا و مقداری مو و پارس کردن به یاد سگ می افتید
همین تعریفات سگ را متمایز میکنه از بقیه حیوانات

بین حیوانات خواص و رویدادهای مشترکی وجود دارد پس میتوانیم این خصوصیات مشترک را در یک کلاس بنام Animal تعریف کنیم

Public Class Animal
Private _pa As Integer 'پا
Private _dast As Integer ' دست
Private _goosh As Integer ' گوش

Public Property paha() As Integer 'این پروپرتی تعداد پاهای جیوانات را مشخص میکنه
Get
Return _pa
End Get
Set(ByVal value As Integer)
_pa = value
End Set
End Property
Public Property dastan() As String ' این پروپرتی تعداد دستهای جیوانات را مشخص میکنه
Get
Return _dast
End Get
Set(ByVal value As String)
_dast = value
End Set
End Property
Public Property gooshha() As Integer ' این پروپرتی تعداد گوشهای جیوانات را مشخص میکنه
Get
Return _goosh
End Get
Set(ByVal value As Integer)
_goosh = value
End Set
End Property
End Class

اگر حیوانی مثل گربه در نظر بگیریم یک سری خصوصیات خاص خودش ر ا داراست
کلاسهای گربه و انسان از کلاس حیوان یک سری خصوصیت ها ی عمومی را به ارث برده اند ولی ما بیشتر به خواص غیر مشترک آنها علاقمندیم پس یک کلاس بنام گربه میسازیم




برخی از صفات گربه عمومی هست مثل پا داشتن - دست داشتن - مو داشتن و غیره پس نیازی به تعریف دویاره نیست

از کلاس حیوان ارث بری میکنیم

Public Class cat

Inherits Animal

Public Sub New()
paha = 4
End Sub
یک سری خصوصیات مثل تعداد پاهای گربه را در سابروتین New مشخص میکنیم
این مشخص میکنه که گربه دارای 4 پا میباشد که از کلاس حیوان به ارث برده



اگر دقت کنید متغیر paha بدون تعریف در کلاس گربه یا انسان استفاده میشه و ما در اینجا مقدار 4 داده ایم چون گربه 4 پا دارد
چگونه؟ از کلاس پایه یعنی Animal به ارث برده و نیاز به تعریف دوباره نداره

گربه عمل میو میو انجام میده پس میو میو کردن خاص گربه هست یک متد به همین نام میسازیم


Public Function Miaw() As String
Return "mio mio"
End Function
Public Function dom_tekan() As String
گربه دم خود را تکان میده

Return "tekan tekan"
End Function
End Class

یک کلاس دیگه میسازیم
کلاس انسان :

Public Class ensan
Inherits Animal
Public Sub New()
paha = 2
dastan = 2
End Sub
انسان دارای 2 پا و 2 دست هست پس درهمین ابتدا مقدار دهی میکنیم

انسان میتونه حرف بزنه پس یک متد خاص هست و باید در کلاس انسان بکار برده شود

Public Function harf_zadan() As String
Return " من اهل شیراز هستم"
End Function
انسان قادر به راه رفتن بر روی 2 پا دارد
Public Function go() As String
Return " dopa dopa"
End Function
End Class
حالا زمان بکارگیری این کلاسهاست

چنانچه درون یک فرم بدین صورت تعریف کنیم دقت کنید جهت استفاده از کلاسها در برنامه حتما از روی کلاس نمونه سازی کنید
یک نمونه از کلاس انسان تعریف کنیم بدین صورت

Dim ali As New ensan

MsgBox(ali.paha().ToString)
بدون اینکه زکری از تعداد پا در این فرم کرده باشیم مقدار پاهای علی 2 میشود چون خصوصیت تعداد پاهها را در کلاس حیوان تعریف کرده بودیم

یا

MsgBox(ali. dastan ().ToString)

مقدار دستان علی 2 میشود



پس علی از کلاس انسان و حیوان 2 تا پا به ارث برده و 2 تا دست

MsgBox(ali.harf_zadan)

اگر دقت کنید متد صحبت کردن در کلاس حیوان پیاده نشده پس مستقیما از کلاس انسان به ارث میبره

توجه : میتوان به خصوصیتها ی یک کلاس دسترسی داشت و تغییر داد آنهم در روال New یک کلاس یا فرم
همانطور که در ابتدای کلاس انسان مقدار پاها را برابر 2 قرار دادیم
چنانچه درون فرم در روال New
بدین صورت تعریف کنیم

Sub New()
ali.paha = 66

End Sub
علی دارای 66 دست میشود و برنامه 66 دست به علی قرض میدهد


دقت کنید که هر کلاس فقط از یک کلاس دیگر میتواند ارث بری بکنه
شما همزمان نمیتوانید درون یک فرم یا یک کلاس دو یا بیشتر ارث بری کنید
Inherits Animal
Inherits "کلاس دیگه"
فقط یکی از این کلاسها به ارث برده میشه

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

Dim frm As New Form1
موفق باشید

javadaskari
پنج شنبه 04 مهر 1387, 20:43 عصر
خيلي ممنونم از شما