PDA

View Full Version : چند ریختی و ارث بری



fazel-d
پنج شنبه 20 تیر 1387, 21:25 عصر
با سلام
یه سوال داشتم در مورد کلاس های چند ریختی که چی هستند و لطفا یه مثال بزنید ؟
البته یه چیزایی در مورد چند ریختی ها پیدا کردم.
مثل :

چند ریختی کمیتی است که به یک رابط امکان می دهد تا برای یک کلاس عمومی از عملیات مورد استفاده قرار گیرد . عمل خاص توسط ذات حقیقی شی تعیین می شود . یک مثال ساده از چند ریختی در فرمان اتومبیل است . فرمان اتومبیل برای تمام اتومبیل ها بدون توجه به مکانیزمی که مورد استفاده قرار می دهند یکسان است . فرممان برای اتومبیلی که به صورت دستی کار میکند یا با نیروی برق یا هر چیز دیگری عمل یکسانی را انجام میدهد . بنابراین بعد از اینکه شما چگونگی عمل کردن فرمان را یاد گرفتید میتوانید هر نوع اتومبیلی را برانید . همین هدف نیز می تواند در برنامه نویسی اعمال شود . به عنوان مثال یک پشته ( لیستی که در آن اولین ورودی آخرین خروجی است مثل تعدادی سکه که روی هم قرار می گیرند ) را در نظر بگیرید. ممکن است برنامهای داشته باشید که نیاز به سه نوع مختلف پشته داشته باشد یک پشته برای مقادیر اعداد صحیح . یک پشته برای اعداد اعشاری و یک پشته برای کاراکترها مورد استفاده قرار گیرد . در این صورت الگوریتمی که هر سه پشته را پیاده می کند یکسان است حتی اگر داده هایی که در آنها ذخیره می شود متفاوت باشند . در یک زبان غیر شی گرا نیاز خواهید داشت تا سه نوع مختلف از روال ها ی پشته را ایجاد کرده . به هر کدام نام متفاوتی قرار داده و برای هر کدام از روابط خاص خودش استفاده کنید . به دلیل وجود چند ریختی در C++ می توانید یک مجموعه روال عمومی از پشته ایجاد کرده و آن را برای هر سه نوع به کار ببرید . با این روش بعد از اینکه استفاده از یک پشته را یاد گرفتید می توانید همه انواع آن را به کار ببرید .
به طور کلی مفهوم چند ریختی اغلب توسط عبارت " یک رابط. چندین روش "بیان می شود .این بدین معنی است که امکان طراحی یک رابط عمومی برای گروهی از عملیات مرتبط وجود دارد .
چند ریختی با اعمال رابط یکسانی که برای تعیین یک کلاس عمومی مورد استفاده قرار می گیرد . به کاهش پیچیدگی کمک می کند . این است وظیفه کامپایلر تا فعالیت خاصی ( مثل متد ) را برای اعمال روی آن انتخاب کند . شما به عنوان برنامه نویس نیاز ندارید تا این انتخاب را انجام دهید شما فقط نیاز دارید رابط عمومی را به خاطر سپرده و استفاده کنید .
زبان های برنامه نویسی شی گرای اولیه چون به صورت مفسری بودند از چند ریختی در زمان اجرا پشتیبانی می کردند . ولی چون C++ کامپایلری است پس هم در زمان اجرا و هم زمان کامپایل از چند ریختی پشتیبانی می کند.
دوم اینکه . آیا یه کلاس می تونه از چند کلاس بالاتر (چند پدر ارث بر ی ) داشته باشه ؟
اگه آره یه مثال بزنید
ممنون

vcldeveloper
پنج شنبه 20 تیر 1387, 22:47 عصر
دوم اینکه . آیا یه کلاس می تونه از چند کلاس بالاتر (چند پدر ارث بر ی ) داشته باشه ؟
در ++C یک کلاس میتونه از چند کلاس والد ارث ببره، اما در سایر زبان ها، مثل Java, Delphi، و #C هر کلاس میتونه فقط یک کلاس والد داشته باشه. البته در این زبان ها هر کلاس میتونه چند Interface را پیاده سازی کنه.

درباره چند ریختی هم که خودتون مطلب گذاشتید، حالا مشکلتون در فهم چه بخشی از متن بالا هست؟

fazel-d
شنبه 22 تیر 1387, 13:16 عصر
در ++C یک کلاس میتونه از چند کلاس والد ارث ببره، اما در سایر زبان ها، مثل Java, Delphi، و #C هر کلاس میتونه فقط یک کلاس والد داشته باشه. البته در این زبان ها هر کلاس میتونه چند Interface را پیاده سازی کنه.

حالا اگه میشه یک کمی در مورد همون ارث بری چندگانه که در بالا مطرح شد توضیخ بدید و یه مثال بزنید
و اینکه اون interface یی که بیان کردید چیه ؟

اگه PDF در این زمینه دارید ممنون می شم اگه قرار بدید .

vcldeveloper
یک شنبه 23 تیر 1387, 02:08 صبح
یک کمی در مورد همون ارث بری چندگانه که در بالا مطرح شد توضیخ بدید و یه مثال بزنید
و اینکه اون interface یی که بیان کردید چیه ؟

http://www-plan.cs.colorado.edu/diwan/class-papers/mi.pdf
http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=/com.ibm.xlcpp8a.doc/language/ref/cplr134.htm
http://fa.wikipedia.org/wiki/%D9%88%D8%B1%D8%A7%D8%AB%D8%AA_%DA%86%D9%86%D8%AF% DA%AF%D8%A7%D9%86%D9%87
http://alem.ir/computer/1663
http://barnamenevis.org/forum/showthread.php?t=30800

fazel-d
چهارشنبه 26 تیر 1387, 11:45 صبح
ممنون از لینک هاتون
خود تون می تونید یه مثال در قالب عکس و کد برای ارث بر ی چند گانه بزنید .

vcldeveloper
پنج شنبه 27 تیر 1387, 01:39 صبح
خود تون می تونید یه مثال در قالب عکس و کد برای ارث بر ی چند گانه بزنید .
توی همون لینک هایی که گذاشتم، مثال در قالب دیاگرام و کد بود.