چندریختی (برنامهنویسی): تفاوت میان نسخهها
محتوای حذفشده محتوای افزودهشده
جز افزودن منبع |
اصلاح نگارشی، برچسب: ویرایش مبدأ ۲۰۱۷ |
||
خط ۱۲:
در برنامههای شیء گرا مانند جاوا، این امکان فراهم شده تا دو و یا بیش از دو متد همنام در یک کلاس تعریف نمود،
مشروط بر اینکه تعریف پارامترهای آن متفاوت باشد. در این موارد متدها Overload میشوند.
از چندریختی به
:چنانچه نام و امضای متدی از یک زیر کلاس (در ساختار سلسله مراتبی کلاسها) با نام و نوع امضای متدی از فوق کلاسش یکسان باشد، در آن صورت متد موجود در زیر کلاس، متد موجود در فوق کلاسش را Override میکند.
مفاهیم Overload وOverride کردن متدها از جمله مفاهیمی هستند که چندریختی بر پایهٔ آنها بنا میشود.
خط ۲۵:
به عنوان مثال حس بویایی سگها نمونهای از چندریختی میباشد. چنانچه بوی گربهای به مشام سگی برسد، درآن صورت واق واق میکند وبه دنبال گربه خواهد رفت. اما اگر بوی غذا به مشامش برسد، بزاق آن ترشح خواهد کرد و به طرف ظرف غذا خواهد رفت. در هر دو شرایط مزبور، یک نوع حس بویایی کار میکند. تفاوت این دو حالت، بویی است که به مشام سگ میرسد. یعنی، نوع دادهای که بینی سگ بر روی آن کار انجام میدهد!
=== چندریختی، نهان سازی و وراثت با هم کار میکنند ===
:چنانچه سه اصل چندریختی، نهان سازی و وراثت به درستی به کار برده شوند، به خوبی با هم ترکیب شده و محیط برنامه سازیی را فراهم میسازند که بهتر از مدل
از طریق کاربرد اصول شیءگرا، بخشهای گوناگون یک برنامهٔ پیچیده را میتوان ترکیب نمود و موجودیتی یکپارچه، با استحکام و قابل مدیریت تشکیل داد.
== Overload کردن متدها ==
=== تعریف و چگونگی انجام آن ===
:در زبانهای برنامه نویسی شیءگرا مانند جاوا میتوانیم دو ویا بیشتر از دو متد همنام را در یک کلاس تعریف نماییم (با شرط آنکه
:وقتی متد Overload شدهای فعال میشود، جاوا از نوع و یا تعداد آرگومانها برای تعیین اینکه کدام نگارش از متدها ی Overload شده فراخوانده شدهاست، استفاده میکند. از این رو متدهای Overload شده از جهت نوع و تعداد پارامترها با یکدیگر تفاوت دارند.
:اگرچه نوع مقادیری که این متدها برمی گردانند ممکن است متفاوت باشد، اما نوع مقادیر به تنهایی برای تمایز بین آنها کفایت نمیکند. وقتی که جاوا با عبارت فراخوانی این گونه متدها مواجه میشود، متدی را اجرا میکند که پارامترهای آن با آرگومانهای مورد استفاده در عبارت فراخوانی مطابقت داشته باشد.
خط ۴۲:
:وقتی متد Override شدهای از یک زیر کلاس فراخوانده میشود، همیشه از نگارش تعریف شده در زیر کلاس استفاده خواهد شد. نگارش تعریف شده در فوق کلاس پنهان خواهد شد.
=== تعیین پویای متدها ===
:مکانیزم Override کردن متدها، پایه و اساس یکی
:اینک کار خود را با بیان مجدد یک اصل مهم آغاز میکنیم: متغیرهای ارجاع فوق کلاسها میتوانند به شیءهای زیرکلاسها ارجاع داشته باشند. جاوا با استفاده از این امر، مسئلهٔ تعیین متدهای Override شده را در زمان اجرا حل میکند. چگونگی انجام این کار به این شرح است. وقتی متد Override شدهای از طریق ارجاع یک فوق کلاس فراخوانده میشود، جاوا بر اساس نوع شیئی که در زمان فراخوانی به آن ارجاع میشود، تعیین میکند که کدام نگارش از متد اجرا شود.از این رو این کار در زمان اجرا انجام میشود.
:وقتی ارجاع به انواع مختلف شیءها صورت میگیرد، نگارشهای مختلفی از یک متد Override شده فراخوانده خواهند شد. به عبارت دیگر نوع شیء مورد ارجاع(ونه متغیر ارجاع) است که تعیین میکند که کدام نگارش ازیک متدOverride شده، اجرا خواهدشد.
|