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

محتوای حذف‌شده محتوای افزوده‌شده
ZxxZxxZ (بحث | مشارکت‌ها)
Amirobot (بحث | مشارکت‌ها)
جز ربات: تصحیح جایگذاری کاما، شمارگان هزارگان
خط ۶:
 
=== مقدمه ===
:چندریختی به معنای چندین شکل از یک متد است. مفهوم چندریختی اغلب به وسیلهٔ عبارت« یک رابط،چندرابط، چند متد» بیان می‌شود. این بدین معناست که این امکان وجود دارد که یک رابط عمومی برای گروهی از فعالیت‌های مرتبط به هم طراحی شود.
در برنامه‌های شیء گرا مانند جاوا، این امکان فراهم شده تا دو و یا بیش از دو متد همنام در یک کلاس تعریف نمود،
مشروط بر اینکه تعریف پارامترهای آن متفاوت باشد. در این موارد متدها Overload می‌شوند.
خط ۱۸:
به عنوان مثال یک پشته (فهرستی که آنچه آخر به آن وارد شود، اول خارج می‌شود) را در نطر می‌گیریم. ممکن است برنامه‌ای داشته باشیم که به سه نوع پشته نیاز دارد. پشته‌ای برای مقادیر صحیح، پشته‌ای برای مقادیر اعشاری با ممیز شناور و پشتهٔ دیگری برای کاراکترها مورد استفاده
قرار می‌گیرد.
:الگوریتم پیاده سازی پشته‌ها با وجود متفاوت بودن نوع مقادیر، یکسان است. در زبان‌های غیر شیء گرا، می‌بایست سه روتین مختلف، یکی برای هریک از پشته‌ها، ایجاد نمود.اما، به دلیل وجود رکنی به نام چندریختی،میچندریختی، می توان مجموعه‌ای از روتین‌ها را با نام‌های یکسان ایجاد نمود.
به طور کلی، چندریختی به وسیلهٔ عبارت«یک رابط، چند متد» بیان می‌شود. این امر با فراهم ساختن امکان استفاده از یک رابط برای مشخص کردن یک کلاس عمومی از عملیات، به کاهش پیچیدگی کمک می‌کند. و این کامپایلر است که عمل مورد نظر را(یعنی متد مربوطه) متناسب با هر یک از شرایط انتخاب می‌کند.
به عنوان مثال حس بویایی سگ‌ها نمونه‌ای از چندریختی می‌باشد. چنانچه بوی گربه‌ای به مشام سگی برسد، درآن صورت پارس می‌کند وبه دنبال گربه خواهد رفت. اما اگر بوی غذا به مشامش برسد،بزاقبرسد، بزاق آن ترشح خواهد کرد و به طرف ظرف غذا خواهد رفت. در هر دو شرایط مزبور، یک نوع حس بویایی کار می‌کند. تفاوت این دو حالت، بویی است که به مشام سگ می‌رسد. یعنی، نوع داده‌ای که بینی سگ بر روی آن کار انجام می‌دهد!
=== چندریختی، نهان سازی و وراثت با هم کار می‌کنند، ===
:چنانچه سه اصل چندریختی، نهان سازی و وراثت به درستی به کار برده شوند، به خوبی با هم ترکیب شده و محیط برنامه سازیی را فراهم می‌سازند که بهتر از مدل فرآیندگرا، از تولید برنامه‌های با استحکامتر و با قابلیت انتقال بیشتر پشتیبانی خواهد نمود. مجموعه کلاس‌هایی که به خوبی به صورت سلسله مراتبی سازمان دهی شده باشند، پایه و اساس کدهای قابل استفادهٔ مجددی را تشکیل می‌دهند که زمان و انرژی زیادی برای تولید و آزمایش آن‌ها صرف می‌شود.نهان سازی امکان انتقال کدهای پیاده سازی شده را بدون تجزیهٔ آن‌ها متناسب با رابط عمومی کلاس‌ها فراهم می‌سازد. چندریختی امکان ایجاد کدهای شفاف، معقول، خوانا و قابل استفادهٔ مجدد را فراهم می‌سازد.
خط ۳۹:
:وقتی متد Override شده‌ای از یک زیر کلاس فراخوانده می‌شود، همیشه از نگارش تعریف شده در زیر کلاس استفاده خواهد شد. نگارش تعریف شده در فوق کلاس پنهان خواهد شد.
=== تعیین پویای متدها ===
:مکانیزم Override کردن متدها، پایه و اساس یکی ازقدرتمندترین مفاهیم برنامه نویسی شیء گرا(جاوا) را تشکیل می‌دهد،تعیینمی‌دهد، تعیین پویای متدها.تعیین پویای متدها مکانیزمی است که جاوا با استفاده از آن، حاصل عبارت فراخوانی متدهای Overrideشده را به جای زمان کامپایل،درکامپایل، در زمان اجرا تعیین می‌کند. دلیل اهمیت این مکانیزم آن است که جاوا، چندریختی زمان اجرا را با آن پیاده سازی می‌کند.
:اینک کار خود را با بیان مجدد یک اصل مهم آغاز می‌کنیم: متغیرهای ارجاع فوق کلاس‌ها می‌توانند به شیءهای زیرکلاس‌ها ارجاع داشته باشند. جاوا با استفاده از این امر، مسئلهٔ تعیین متدهای Override شده را در زمان اجرا حل می‌کند. چگونگی انجام این کار به این شرح است. وقتی متد Override شده‌ای از طریق ارجاع یک فوق کلاس فراخوانده می‌شود، جاوا بر اساس نوع شیئی که در زمان فراخوانی به آن ارجاع می‌شود، تعیین می‌کند که کدام نگارش از متد اجرا شود.از این رو این کار در زمان اجرا انجام می‌شود.
:وقتی ارجاع به انواع مختلف شیءها صورت می‌گیرد، نگارش‌های مختلفی از یک متد Override شده فراخوانده خواهند شد. به عبارت دیگر نوع شیء مورد ارجاع(ونه متغیر ارجاع) است که تعیین می‌کند که کدام نگارش ازیک متدOverride شده، اجرا خواهدشد.