چندریختی (برنامه‌نویسی): تفاوت میان نسخه‌ها

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