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

محتوای حذف‌شده محتوای افزوده‌شده
بدون خلاصۀ ویرایش
خط ۴:
یکی از ویژگی‌های کلیدی در کلاس‌های مشتق‌شده این است که یک اشاره‌گر به یک کلاس مشتق‌شده، از نظر نوع داده‌ای با اشاره‌گر به کلاس اصلی آن سازگار است. '''چندریختی''' یا پلی‌مورفیسم، هنر بهره‌برداری از این ویژگی ساده، اما قدرتمند و کاربردی است که متدلوژی شی‌گرایی را به حد کامل توانایی‌اش می‌رساند.<ref>{{یادکرد کتاب|عنوان=برنامه سازی پیشرفته با ++C|نام خانوادگی=دکتر بابک بشری راد|نام=|ناشر=ناقوس|سال=1394|شابک=978-964-377-746-3|مکان=تهران|صفحات=143}}</ref>
 
مفهوم چندریختی ویژگی است که به رابط‌ها امکان می‌دهد تا برای گروهی از عملیات‌ها مورد استفاده قرار گیرند. در این مقاله مفهوم چندریختی از طریق دو مفهوم متدهایلغو Overrideمتدها (به انگلیسی: لغو) (توابع مجازی) و سربارشده (به انگلیسی:Overload) پشتیبانی می‌شود. ما با بررسی این دو مفهوم در پی نشان دادن تأثیر مفهوم چندریختی روی [[برنامه‌نویسی شیء گرا]] خواهیم بود.
روش به کار برده شده در این تحقیق از طریق مطالعه منابعی از جمله کتب مرتبط با برنامه‌نویسی، راهنمای برنامه‌های شیء گرا و اجرای برنامه‌هایی با ماهیت چندریختی می‌باشد.
با توجه به مطالب ارائه شده در این مقاله می‌توان گفت که مفهوم چندریختی یکی از سه اصول مهم در برنامه‌نویسی شیء گرا می‌باشد. درنتیجه مفاهیم نهان سازی و وراثت به همراه مفهوم چندریختی سه پایهٔ اصلی برنامه‌نویسی شی ء گرا را تشکیل می‌دهند.
کلمات کلیدی: چندریختی، سربار کردن, Overrideلغو کردن و متد.
 
:چندریختی به معنای چندین شکل از یک متد است. مفهوم چندریختی اغلب به وسیلهٔ عبارت «یک رابط، چند متد» بیان می‌شود. این بدین معناست که این امکان وجود دارد که یک رابط عمومی برای گروهی از فعالیت‌های مرتبط به هم طراحی شود.
خط ۱۳:
مشروط بر اینکه تعریف پارامترهای آن متفاوت باشد. در این موارد متدها سربار می‌شوند.
از چندریختی به منظور تعیین انواع مختلف متدهای پویا، در زمان اجرا استفاده می‌شود؛ که این یکی از قدرتمندترین امکاناتی است که چندریختی به وجود می‌آورد.
:چنانچه نام و امضای متدی از یک زیر کلاس (در ساختار سلسله مراتبی کلاس‌ها) با نام و نوع امضای متدی از فوق کلاسش یکسان باشد، در آن صورت متد موجود در زیر کلاس، متد موجود در فوق کلاسش را Overrideلغو می‌کند.
مفاهیم سربار کردن و Overrideلغو کردن متدها از جمله مفاهیمی هستند که چندریختی بر پایهٔ آن‌ها بنا می‌شود.
در این مقاله پس از بررسی اجمالی مفهوم چندریختی در بخش اول، در بخش دوم مفهوم سربار کردن متدها را با ذکر چند مثال خواهیم دید. در بخش سوم نیز مفهوم متدهای Overrideلغو شده یا همان [[توابع مجازی]] را خواهیم آورد و در بخش پایانی نیز به بررسی تأثیر وجود مفهوم چندریختی در [[برنامه‌نویسی شیءگرا]] (مانند جاوا) و مقایسهٔ آن با برنامه‌هایی که چندریختی را پشتیبانی نمی‌کنند (مانند [[زبان برنامه‌نویسی]] C) خواهیم پرداخت.
 
== مفهوم چندریختی ==
خط ۶۴:
</source>
 
=== Overrideلغو کردن متدها (توابع مجازی) ===
=== تعریف و چگونگی انجام آن ===
:چنانچه نام و نوع امضای (هدر متد که از نام و پارامترها تشکیل می‌شود) متدی از یک زیر کلاس با نام و امضای متدی از فوق کلاسش یکسان باشد، در آن صورت اصطلاحاً می‌گوییم که متد موجود در زیرکلاس، متد موجود در فوق کلاس را Overrideلغو می‌کند.
:وقتی متد Overrideلغو شده‌ای از یک زیر کلاس فراخوانده می‌شود، همیشه از نگارش تعریف شده در زیر کلاس استفاده خواهد شد. نگارش تعریف شده در فوق کلاس پنهان خواهد شد.
 
=== تعیین پویای متدها ===
:مکانیزم Overrideلغو کردن متدها، پایه و اساس یکی از قدرتمندترین مفاهیم برنامه‌نویسی شیء گرا (جاوا) را تشکیل می‌دهد، تعیین پویای متدها. تعیین پویای متدها مکانیزمی است که جاوا با استفاده از آن، حاصل عبارت فراخوانی متدهای Overrideلغو شده را به جای زمان کامپایل، در زمان اجرا تعیین می‌کند. دلیل اهمیت این مکانیزم آن است که جاوا، چندریختی زمان اجرا را با آن پیاده‌سازی می‌کند.
:اینک کار خود را با بیان مجدد یک اصل مهم آغاز می‌کنیم: متغیرهای ارجاع فوق کلاس‌ها می‌توانند به شیءهای زیرکلاس‌ها ارجاع داشته باشند. جاوا با استفاده از این امر، مسئلهٔ تعیین متدهای Overrideلغو شده را در زمان اجرا حل می‌کند. چگونگی انجام این کار به این شرح است. وقتی متد Overrideلغو شده‌ای از طریق ارجاع یک فوق کلاس فراخوانده می‌شود، جاوا بر اساس نوع شیئی که در زمان فراخوانی به آن ارجاع می‌شود، تعیین می‌کند که کدام نگارش از متد اجرا شود. از این رو این کار در زمان اجرا انجام می‌شود.
:وقتی ارجاع به انواع مختلف شیءها صورت می‌گیرد، نگارش‌های مختلفی از یک متد Overrideلغو شده فراخوانده خواهند شد. به عبارت دیگر نوع شیء مورد ارجاع (ونه متغیر ارجاع) است که تعیین می‌کند که کدام نگارش ازیک متدOverrideمتد لغو شده، اجرا خواهدشد.
 
== منابع ==