من شروع کردم دارم رفرنس زبان سی شارپ رو میخونم رسیدم به اینجاش دیدم نوشته ظاهرا ارث بری single رو داره. یعنی ارث بری چندگانه نداره سی شارپ؟
اونوقت چرا؟
چیز جالبیه ها بدرد میخوره
من شروع کردم دارم رفرنس زبان سی شارپ رو میخونم رسیدم به اینجاش دیدم نوشته ظاهرا ارث بری single رو داره. یعنی ارث بری چندگانه نداره سی شارپ؟
اونوقت چرا؟
چیز جالبیه ها بدرد میخوره
چون که قاعده ی شی گرایی در جاوا وسی شارپ ارث بری سلسله مراتبی است ...من شروع کردم دارم رفرنس زبان سی شارپ رو میخونم رسیدم به اینجاش دیدم نوشته ظاهرا ارث بری single رو داره. یعنی ارث بری چندگانه نداره سی شارپ؟
اونوقت چرا؟
یکی از دلایلی که من میدونم اینه که همون طور که در سی پلاس شما میتونید ارث بری چند گانه داشته باشین ممکنه یه سری مشکلات مثه شبیه بودن نام فیلد ها و ... به وجود بیاد ولی در سی شارپ شما دیگر با این مشکلات سر کار ندارید و با دردسر کمتری برنامه نویسی می کنید ولی خوب در اینترفیس ها شما میتونید پیاده سازی چند گانه داشته باشین که تو اونجا میتونید هم به صورت مستقیم(explicit) و هم غیرمستقیم(implicit) به اون متود یا property مورد نظر دسترسی داشته باشین که شاید توی مباحث polymorphism براتون مفید واقع بشه ...
امیدوارم مفید واقع شده باشه ...
موفق باشید .
پس دستور multiinheritance چیه؟
دوست عزیز میتونی برای ارث بری چندگانه از Interface استفاده کرد
بنظرم ارث بری چندگانه از Interface ها نمیتونه جایگزین کاملی ارث بری چندگانه از کلاسهای معمولی باشه.
چون Interface که Implementation نداره.
در ارث بری چندگانهء معمولی Implementation ها (هم) منتقل میشن، نه فقط Signature متدها.
من نمیفهمم شما چی میگید.
میشه با مثال توضیح بدید؟
مثلا من دوتا کلاس دارم از پیش که خودم ساختم برای کارهای خاصی، بعد میتونم در یک کلاس جدید براحتی از هردوش ارث بری کنم و متدها و پراپرتی های پیاده سازی شدهء هردو رو (نه فقط اینترفیس رو) با هم در یک کلاس جدید ترکیب شده داشته باشم (بعلاوهء متدها و پراپرتی های تعریف شده در کلاس جدید).
خب اینکار رو چطور میشه در سی شارپ انجام داد؟
خیر
خیالت راحت.
این شد حرف حساب
ظاهرا در جاوا هم همینطوره و ارث بری چندگانه نداره. چون این ویژگی رو ضروری ندیدن و بنظرشون معایبی داره.
البته حتی اورلودینگ عملگرها هم چنین مبحثی هست و توی جاوا تاجایی که میدونم اورلود عملگر هم نداریم (اما سی شارپ تاجایی که دیدم فکر میکنم داره).
دربارهء این موارد از هرکس بپرسی یه نظری داره. یکی میگه خوبه یکی میگه بده.
و هر زبانی از یکی از این دو روش پیروی میکنه (پس حتما بین صاحبنظرها و برنامه نویسان چیره دست هم اختلاف هست).
من خودم هنوز اونقدری صاحب صلاحیت نمی بینم خودم رو که نظر مشخصی در این ارتباط بدم.
بله ... شما در سی شارپ میتونید از overload کردن عملگر ها استفاده کنیدظاهرا در جاوا هم همینطوره و ارث بری چندگانه نداره. چون این ویژگی رو ضروری ندیدن و بنظرشون معایبی داره.
البته حتی اورلودینگ عملگرها هم چنین مبحثی هست و توی جاوا تاجایی که میدونم اورلود عملگر هم نداریم (اما سی شارپ تاجایی که دیدم فکر میکنم داره).
دربارهء این موارد از هرکس بپرسی یه نظری داره. یکی میگه خوبه یکی میگه بده.
و هر زبانی از یکی از این دو روش پیروی میکنه (پس حتما بین صاحبنظرها و برنامه نویسان چیره دست هم اختلاف هست).
من خودم هنوز اونقدری صاحب صلاحیت نمی بینم خودم رو که نظر مشخصی در این ارتباط بدم.
ارث بری سلسله مراتبی هم یه سری معایب داره و هم یه سری مزایا ... ولی خوب به نظر من اینجوری برنامه نویس کمتر دچار سردرگمی میشه ولی خوب راه های زیادی وجود داره که اون طرح خودتون رو به صورت ارث بری چند گانه شبیه سازی کنید ...
به نظرم هیچ زبونی مثه جاوا تو بحث شی گرایی و قواعد اون پیشتاز نیست پس قواعد شی گرایی ایجاب میکنه که شما ارث بری چندگانه نداشته باشید
البته جاوا که زبان جدیدی بحساب نمیاد.
یکی از جالبترین زبانهایی که وجود داره، یعنی Python، ارث بری چندگانه هم داره.
البته جاوا در اصل فقط از پارادایم شیء گرایی پشتیبانی میکنه، اما پایتون مالتی پارادایم هست (مثل خیلی زبانهای دیگه؛ مثلا سی++).
پایتون از جاوا جدیدتر نیست، ولی خیلی ها اون رو بعنوان یکی از بهترین زبانهای موجود میشناسن. کدهای نوشته شده در این زبان اغلب کوتاهتر از زبانهای دیگر هستن و خوانایی برنامه هم بسیار بالاست.
آخرین ویرایش به وسیله eshpilen : جمعه 07 خرداد 1389 در 10:35 صبح
راستی الان یه نگاهی به مقالهء ویکیپدیا دربارهء شیء گرایی کردم ببینم درمورد ارث بری چندگانه چی نوشته.
Multiple inheritance is inheritance from more than one ancestor class, neither of these ancestors being an ancestor of the other. For example, independent classes could define Dogs and Cats, and a Chimera object could be created from these two which inherits all the (multiple) behavior of cats and dogs. This is not always supported, as it can be hard to implement.
میگه دلیل عدم پیاده سازی ارث بری چندگانه سخت بودن پیاده سازیش هست.
البته یه مقالهء دیگه هم هست درمورد خود ارث بری چندگانه که یک بخش دربارهء مشکلات منطقی ارث بری چندگانه داره (اما میگه زبانهایی هستن که این مشکلات رو برطرف کردن).
این سختی در framework چند صد برابر میشه و در بیشتر حالتها به deadlock منجر میشه برای همین معمولا پیاده سازی نشده . دلیل دیگش میتونه پیچیدگی برای برنامه نویس باشه در ضمن الگوهای متداول اکثرا با single inheritance حل میشوند .
مثالی چیزی میتونید بزنید یا بیشتر توضیح بدید؟این سختی در framework چند صد برابر میشه و در بیشتر حالتها به deadlock منجر میشه برای همین معمولا پیاده سازی نشده .
یعنی این سختی و deadlock چرا ایجاد میشه.
http://blogs.msdn.com/b/csharpfaq/ar.../07/85562.aspx
اینم جای دیگه خوندم
I do not know if you will get a concrete answer on this questions as I believe there are many reasons.
The strongest reason I have seen is the added complexity and uncertainty. With multiple inheritance, areas such as reflection, serialization, casting, and encapsulation of members become difficult to manage.
Another reason stems from what .NET is trying to accomplish, a common language. Each language can implement inheritance and more specifically multiple inheritance in different ways. How does that translate to the CLR? Then you add in shared based types between two inherited types and everything starts to get messy.
I believe there has been much consideration given to multiple inheritance, but it is a hard concept to get right.