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

محتوای حذف‌شده محتوای افزوده‌شده
Rezabot (بحث | مشارکت‌ها)
ابرابزار
خط ۱:
{{حق تکثیر مشکوک}}
{{ویکی‌سازی}}
{{بدون منبع|زبانزبان‌های های برنامه نویسیبرنامه‌نویسی=زبانزبان‌های های برنامه نویسیبرنامه‌نویسی زیادی وجود دارد، مهمترین و پیشرفته ترینپیشرفته‌ترین آنها زبان های برنامهزبان‌های نویسیبرنامه‌نویسی جاوا، c#، php و پایتون است که بیشترین تعداد استفاده در دنیا را دارد}}
یکی از ویژگی‌های کلیدی در کلاس‌های مشتق‌شده، این است که یک اشاره‌گر به یک [[کلاس (برنامه‌نویسی)|کلاس]] مشتق‌شده، از نظر نوع داده‌ای با اشاره‌گر، به کلاس اصلی آن سازگار است. '''چندریختی''' یا (به انگلیسی: Polymorphism)پلی‌مورفیسم، هنر بهره‌برداری از این ویژگی ساده و در عین حال قدرتمند و کاربردی است که متدلوژی شی‌گرایی را به حد کامل توانایی‌اش می‌رساند.<ref>{{یادکرد کتاب|عنوان=برنامه‌سازی پیشرفته با ++C|نام خانوادگی=دکتر بابک بشری راد|نام=|ناشر=ناقوس|سال=1394|شابک=978-964-377-746-3|مکان=تهران|صفحات=143}}</ref>
 
مفهوم چندریختی ویژگی است که به رابط‌ها امکان می‌دهد تا برای گروهی از عملیات‌ها مورد استفاده قرار گیرند. در این مقاله مفهوم چندریختی از طریق دو مفهوم بازنویسی متدها (به انگلیسی: override) و سربارشده (به انگلیسی:Overload) پشتیبانی می‌شود. ما با بررسی این دو مفهوم به
خط ۲۶:
:[[الگوریتم]] پیاده‌سازی پشته‌ها با وجود متفاوت بودن نوع مقادیر، یکسان است. در زبان‌های غیر شیء گرا، می‌بایست سه روتین مختلف، یکی برای هریک از پشته‌ها، ایجاد نمود. اما، به دلیل وجود رکنی به نام چندریختی، می‌توان مجموعه‌ای از روتین‌ها را با نام‌های یکسان ایجاد نمود.
به‌طور کلی، چندریختی به وسیلهٔ عبارت «یک رابط، چند متد» بیان می‌شود. این امر با فراهم ساختن امکان استفاده از یک رابط برای مشخص کردن یک کلاس عمومی از عملیات، به کاهش پیچیدگی کمک می‌کند؛ و این کامپایلر است که عمل مورد نظر را (یعنی متد مربوطه) متناسب با هر یک از شرایط انتخاب می‌کند.
به عنوان مثال حس بویایی سگ‌ها نمونه‌ای از چندریختی می‌باشد. چنانچه بوی گربه‌ای به مشام سگی برسد، در آن صورت واق واق می‌کند و به دنبال گربه خواهد رفت. اما اگر بوی غذا به مشامش برسد، بزاق آن ترشح خواهد کرد و به طرف ظرف غذا خواهد رفت. در هر دو شرایط مزبور، یک نوع حس بویایی کار می‌کند. تفاوت این دو حالت، بویی است که به مشام سگ می‌رسد.می‌رسد؛ یعنی، نوع داده‌ای که بینی سگ بر روی آن کار انجام می‌دهد!
 
=== چندریختی، نهان‌سازی و وراثت با هم کار می‌کنند ===
خط ۴۰:
 
=== سربار کردن سازنده‌ها ===
:همان‌طور که می‌دانیم، هر کلاسی که در جاوا ایجاد می‌کنیم، می‌تواند دارای سازنده باشد. اگر سازنده‌ای برای کلاسی ننویسیم، جاوا یک سازنده برای آن کلاس می‌نویسد که از طریق آن می‌توان اشیای آن کلاس را ایجاد کرد. این کلاس به فیلدهای اشیاء نیز مقادیر اولیه مناسبی می‌دهد.می‌دهد؛ یعنی، به عنوان مثال فیلدهای عددی را برابر صفر و فیلدهای رشته‌ای را برابر تهی قرار می‌دهد.
:متدهای سازنده را نیز می‌توان همچون متدهای معمولی سربار کرد. درحقیقت، در بیشتر کلاس‌های مربوط به کارهای واقعی، سازنده‌های سربار شده، نه تنها استثنا به‌شمار نمی‌آیند، بلکه کاملاً معمول خواهند بود.
 
==== مثالی از سازنده‌های سربار شده ====
در ادامه مثالی از سازنده‌های سربار شده نمایش داده شده‌است. در این مثال کلاس Book طراحی شده‌است که دارای سه سازنده با امضاهای متفاوت می‌باشد. <syntaxhighlight lang="java">public class Book{
 
private String name;
private String author;
//overloaded constructors
public Book(){
 
}
 
public Book(String name){
this.name = name;
}
 
public Book(String name, String author){
this(name);
this.author = author;
}
 
}</syntaxhighlight>نحوه ساخت ارجاعی از نوع این کلاس به یکی از روش‌های زیر قابل انجام است.<syntaxhighlight lang="java">Book newBook = new Book();
Book newBook = new Book("Shahnameh");
سطر ۶۸ ⟵ ۶۹:
=== تعریف و چگونگی انجام آن ===
:چنانچه نام و نوع امضای (هدر متد که از نام و پارامترها تشکیل می‌شود) متدی از یک زیر کلاس با نام و امضای متدی از ابر کلاسش یکسان باشد، در آن صورت اصطلاحاً می‌گوییم که متد موجود در زیرکلاس، متد موجود در ابر کلاس را بازنویسی می‌کند.
:وقتی متد بازنویسی شده ایشده‌ای از یک زیر کلاس فراخوانده می‌شود، همیشه از نگارش تعریف شده در زیر کلاس استفاده خواهد شد. نگارش تعریف شده در ابر کلاس پنهان خواهد شد.
 
=== تعیین پویای متدها ===