پلی مورفیسم در برنامه نویسی چیست؟ – مفهوم به زبان ساده + مثال

پلی مورفیسم چیست ؟
اگر بهطور کلی این سوال وجود داشته باشد که پلی مورفیسم چیست باید گفت که پلی مورفیسم (Polymorphism | چندریختی) که واژهای یونانی به حساب میآید، در لغت به معنی «داشتن چندین شکل و فُرم مختلف» است. در کل اصطلاح Polymorphism یعنی:
- شرایط رخ دادن و به وقوع پیوستن در فُرمهای مختلف

پلی مورفیسم در زیستشناسی به چه معناست؟
پلی مورفیسم در زیستشناسی به معنی رخداد فُرمها و شکلهای مختلف در میان اعضای یک جمعیت یا اجتماع (Colony)، یا به وقوع پیوستن اشکال گوناگون در چرخه حیات یک جاندار است.
پلی مورفیسم در ژنتیک به چه معناست؟
پلی مورفیسم در ژنتیک به وجود گونههای مختلف ژنتیکی در یک جمعیت اشاره دارد که انتخاب طبیعی بر اساس آن عمل میکند.
اما موضوع اصلی بحث این مقاله، پلی مورفیسم در برنامه نویسی است. بنابراین، در ادامه یاد میگیریم که پلی مورفیسم در برنامه نویسی چیست و مثالهایی هم برای درک بهتر این مفهوم ارائه شده است.
مثال هایی از چندریختی در دنیای واقعی
به عنوان مثال در دنیای واقعی، یک شخص میتواند روابط متفاوتی را با افراد مختلف داشته باشد. یک بانو میتواند بهطور همزمان هم مادر، هم خواهر و هم دوست باشد. این یعنی فرد میتواند رفتارهای متفاوتی را در شرایط مختلف از خود نشان دهد.

به عنوان یک مثال دیگر هم میتوان به بدن انسان اشاره کرد. بدن انسان ارگانهای متفاوتی دارد. هر ارگان کارکرد و قابلیت عملکردی متفاوتی را از خود نشان میدهد. قلب انسان مسئولیت پمپاژ جریان خون را بر عهده دارد، ریهها برای نفس کشیدن هستند، مغز انسان برای فعالیتهای شناختی مورد استفاده قرار میگیرد و کلیهها برای دفع مواد زائد به کار گرفته میشوند. بنابراین، یک تابع متُد استاندارد وجود دارد که بسته به ارگان بدن، کار متفاوتی را انجام میدهد. اگر میخواهید بیشتر بدانید که پلیمورفیسم در برنامهنویسی چیست و چه کاربردی دارد، پیشنهاد میکنیم فیلم کوتاه زیر را در فرادرس مشاهده کنید.
پلی مورفیسم در برنامه نویسی به بیان ساده


یعنی مثلاً اگر متُدی به نام speak() وجود داشته باشد و ورودی از نوع گربه یا Cat باشد، متد speak() مربوط به گربه اجرا خواهد شد و اگر ورودی از نوع گاو باشد، متد speak() مخصوص گاو اجرا میشود. بنابراین پلی مورفیسم در برنامه نویسی به بیان ساده، استفاده از یک بلوک کد و تغییر «نسخه» آن بلوک کد، بر اساس نوع ورودیها است.
تصویر زیر، مثالی شامل کلاس shape را نشان میدهد که متدی به نام draw() دارد و ریختهای گوناگون آن در قالب مربع، دایره و مستطیل نیز آورده است که به شما کمک میکند تا درک بهتری از چندریختی در برنامهنویسی پیدا کنید.

پلی مورفیسم در برنامه نویسی چیست ؟
به بیان دقیقتر، در حوزههای زبانهای برنامه نویسی و «نظریه نوع» (Type Theory)، پلی مورفیسم فراهمسازی واسطی یکه و واحد برای موجودیتهایی با نوع دادههای گوناگون یا استفاده از یک نماد واحد برای بازنمایی چندین نوع مختلف است. پلی مورفیسم در برنامه نویسی شی گرا ضرورت پیدا میکند. اشیاء بر اساس کلاسهای مختلف تعریف و ایجاد میشوند. اشیاء میتوانند خصوصیتها (Property) و متُدهایی (Method) داشته باشند.

چگونه می توان تعیین کرد یک شی پلی مورفیک است؟
برای اینکه بتوان مشخص کرد که آیا یک شی دارای حالت چندریختی یا به اصطلاح «پلی مورفیک» (Polymorphic) هست یا خیر، میتوان یک آزمایش ساده انجام داد. در صورتی که آزمونهای «is-a» (آیا هست؟) یا «instanceof» (نمونهای از) برای آن شی موفقیتآمیز باشند، آن شی چندریختی دارد و به اصطلاح «پلی مورفیک» است. instanceof یک عملگر دودویی به حساب میآید که برای بررسی نوع داده یک شی بهکار میرود. در واقع با استفاده از عملگر instanceof میتوان مشخص کرد که آیا یک شی دارای نوع داده مربوطه هست یا خیر؟
مثال خودرو برای درک بهتر مفهوم پلی مورفیسم در برنامه نویسی
برای مثال، میتوان شیئی را از کلاس خودرو (Car) ایجاد و تعریف کرد. خصوصیتها و متُدهایی که این خودرو میتوانند داشته باشند به شرح زیر است:
- Properties (خصوصیتها): رنگ، شرکت سازنده، مدل، سرعت فعلی
- Methods (متدها): متُدها همان توابع یا عملکردهایی هستند که به وسیله کلاس فراخوانی میشوند. برای مثال میتوان مواردی نظیر حرکت کردن، توقف، پارک کردن، پیچیدن به چپ یا راست را نام برد.

حالا برای اینکه شیً ماشین فوق، پلی مورفیک و دارای قابلیت چندریختی باشد، خصوصیتها و متُدهای آن را میتوان با استفاده از نام کلاس یکه و واحد یعنی «Car» فراخوانی کرد، اما بسته به اینکه این کلاس چگونه در کدها استفاده میشود، نوع دادههای متفاوتی فراخوانی خواهند شد.
فیلم های آموزش برنامه نویسی

چندریختی یا پلی مورفیسم در برنامه نویسی زیرمجموعهای از مفاهیم شی گرایی به حساب میآید و شیگرایی هم یکی از مهمترین مباحث و موضوعها در یادگیری مهارت برنامه نویسی محسوب میشود. حیطه برنامه نویسی روزبهروز محبوبیت بیشتری پیدا میکند و این حوزه یکی از پرتقاضاترین زمینههای شغلی در دنیای کسب و کار به شمار میرود. درآمد بالای برنامه نویسی و موقعیتهای شغلی زیادی که در این حوزه وجود دارد باعث شده است که افراد زیادی به دنبال یادگیری برنامه نویسی باشند. یکی از بهترین و مقرون به صرفهترین روشهای یادگیری برنامه نویسی استفاده از دورههای آموزش آنلاین محسوب میشود.
فرادرس یکی از بزرگترین مجموعههای آموزش برنامه نویسی را در وب سایت خود ارائه کرده است. دورههای آموزش برنامه نویسی فرادرس بسیار متنوع هستند و برای اکثر زبانهای برنامه نویسی، شیوهها، رویکردها و ابزارهای مختلف برنامه نویسی، دورههای آموزشی متعددی ارائه شده است. حتی دورهها و فیلمهای آموزشی رایگان و غیر رایگانی هم برای آموزش مفاهیم شیگرایی در وب سایت فرادرس و صفحه مجموعه دورههای برنامه نویسی وجود دارند که علاقهمندان میتوانند علاوه بر مطالعه این مقاله، برای یادگیری بیشتر از این دورهها هم استفاده کنند.
- برای دسترسی به مجموعه فیلم های آموزش برنامه نویسی + اینجا کلیک کنید.
انواع Polymorphism چیست ؟
میتوان گفت که ۴ نوع اصلی پلی مورفیسم در برنامه نویسی وجود دارد. این ۴ نوع Polymorphism در ادامه فهرست شدهاند:
- پلی مورفیسم زیرنوع یا Subtype Polymorphism (زمان اجرا | Runtime)
- چندریختی پارامتری یا Parametric Polymorphism (زمان کامپایل | Compile-time)
- پلی مورفیسم موردی یا Ad hoc Polymorphism (سربارگذاری | Overloading)
- چندریختی تبدیل نوع خودکار یا Coercion Polymorphism (تبدیل نوع موقت | Casting)

اکنون در ادامه به شرح هر یک از انواع پلی مورفیسم پرداخته شده است.
Subtype Polymorphism چیست ؟
«پلی مورفیسم زیرنوع» (Subtype Polymorphism) که به آن «Inclusion Polymorphism» (پلی مورفیسم شمولی یا دربرداری) هم میگویند، رایجترین نوع چندریختی به حساب میآید. معمولاً زمانی که گفته میشود شیئی چندریختی دارد، در واقع منظور همین پلی مورفیسم زیرنوع است.
در پلی مورفیسم زیرنوع، از یک نام کلاس برای ارجاع همزمان به چندین زیرنوع استفاده میشود. در مثال خودرو که پیشتر به آن اشاره شد، شی کلاس «Car» ایجاد شده و میتوان چندین زیرنوع از آن تعریف کرد. این زیرنوعها مثلاً میتوانند موارد زیر باشند:
- فورد
- شورلت
- کیا
- نیسان
- فولکسواگن
- BMW
- آئودی
- تسلا
همچنین، هر خودرو دارای خصوصیت رنگ مربوط به خودش است و علاوه بر آن، خصوصیتهای دیگری هم وجود دارند. میتوان به تمام زیرنوعها تنها با استفاده از کلاس Car ارجاع داد. هر خودرو در کلاس Car دارای خصوصیت (Property) رنگ یا همان «color» است و حالا میتوان رنگ مربوطه را از هر زیرنوع کلاس ماشین دریافت کرد.
میتوان تابعی نوشت تا کار دریافت رنگ هر یک از زیرنوعهای کلاس Car را انجام دهد. این تابع میتواند چیزی شبیه به کدهای زیر باشد. کدهای زیر تقریباً به صورت شبهکد هستند و به زبان برنامه نویسی خاصی نوشته نشدهاند:
در کدهای فوق در صورت فراخوانی getColor برای هر یک از زیرنوعهای کلاس Car مثل BMW، رنگ مربوط به آن بازگردانده میشود.
مثال پلی مورفیسم در C++ از نوع Inclusion
هر یک از این متدها، متن خاص و متفاوتی را در خروجی چاپ میکنند. باید توجه شود که متُد مربوط به کلاس پایه تابعی مجازی است. در تابع main این برنامه، یک اشارهگر از نوع کلاس پایه و دو شی برای هر کدام از کلاسهای base و derived تعریف شده است.
ملاحظه میشود که به واسطه وجود چندریختی از نوع Inclusion در C++، میتوان از همان اشارهگری برای اشاره به شی مشتق شده استفاده کرد که برای اشاره به شی مربوط به کلاس پایه به کار گرفته شده است. خروجی کدهای فوق در ادامه آمده است:
This is base class.
This is derived class.Parametric Polymorphism چیست ؟
«چندریختی پارامتری» (Parametric Polymorphism) بهطور خاص روشی را برای استفاده از یک تابع (کدهای یکسان) برای تعامل با چندین نوع داده مختلف فراهم میکند. چندریختی پارامتری را «Early Binding» هم مینامند که میتوان آن را «پیوند زودهنگام» ترجمه کرد. این نوع از پلی مورفیسم امکان استفاده از کدهای یکسانی را برای نوع دادههای مختلف فراهم میکند.
مثال چندریختی در برنامه نویسی پایتون از نوع پارامتری
یک مثال در این خصوص میتواند فهرستی از انواع مختلف باشد. در چندریختی پارامتری میتوان عنصرهای این لیست را صرف نظر از نوع آن عنصر حذف، اضافه یا جایگزین کرد.
مثال چندریختی در C++ از نوع پارامتری
در C++ میتوان چندریختی پارامتری را با استفاده از قالبها (Templateها) درک کرد:
خروجی کدهای فوق به صورت زیر است:
Max of (156, 78): 156
Max of (A, X): XAd hoc Polymorphism چیست ؟
در «پلی مورفیسم موردی» (Ad hoc Polymorphism)، توابع با نام یکسان برای انواع مختلف رفتار متفاوتی از خود نشان میدهند و به صورت موردی عمل میکنند. در واقع در این نوع از چندریختی، یک تابع واحد، برای نوع دادههای مختلف رفتار متفاوتی دارد. در صورتی که قابلیت پلی مورفیسم Ad hoc وجود داشته باشد، هم تابع و هم عملگر هر دو میتوانند «سرریز» (Overload) شوند. برخی از زبانهای برنامه نویسی اجازه «بار اضافی دادن به تابع» (Function Overloading) را نمیدهند.
مثال پلی مورفیسم در C++ از نوع Ad hoc
در این بخش مثالی به زبان C++ برای نشان دادن چندریختی Ad hoc ارائه شده است. در این مثال تابعی به نام add دو بار با نام یکسان تعریف شده است که در حالت اول اعداد از نوع صحیحی را میپذیرد و با هم جمع میکند و در حالت دوم، مقادیر رشتهای را دریافت و با هم ادغام میکند:
خروجی کدهای فوق به صورت زیر است:
Addition of numbers: 9
Addition of Strings: helloWorldمثال پلی مورفیسم در پایتون از نوع Ad hoc
تابع جمع در پایتون به صورت خود به خود دارای قابلیت چندریختی موردی است؛ زیرا عملیات جمع یا «+» تابعی واحد و یکتا است که میتوان آن را روی نوع دادههای مختلف اجرا کرد. مثلاً با تابع جمع که برای فراخوانی آن از علامت به اضافه (+) استفاده میشود، هم میتوان اعداد از نوع اعشاری (Float) را با هم جمع کرد و هم امکان جمع کردن اعداد با نوع صحیح (Integer) یا حتی رشتهها (String) نیز وجود دارد.
مثلاً در قطعه کد زیر، ابتدا دو عدد از نوع صحیح با هم جمع شدهاند و سپس با استفاده از همان علامت به اضافه (یعنی تابع جمع) دو داده از نوع رشتهای با هم جمع یا به اصطلاح تلفیق (Concatenate) شدهاند:
عملیات جمع در هر یک از خط کدهای فوق مقداری را از همان نوع دادههای مورد استفاده در هر گزاره جمع باز میگرداند. یعنی حاصل جمع دو عدد صحیح، عددی از نوع صحیح و حاصل تلفیق یا جمع دو داده رشتهای هم یک داده رشتهای خواهد بود. خروجی کدهای فوق در ادامه آمده است:
→ 7
→ "Foobar"همانطور که در خروجی کدها ملاحظه میشود، حاصل جمع 3 + 4 عددی از نوع Integer یعنی 7 است و در جمع دو رشته “Foo” + “bar” نیز تلفیق آنها انجام شده و خروجی از نوع رشتهای و به صورت “Foobar” است.
Coercion Polymorphism چیست ؟
«چندریختی تبدیل نوع خودکار» (Coercion Polymorphism) که «Casting» هم نامیده میشود، تبدیل مستقیم یک نوع داده به نوع دیگر است. این نوع از پلی مورفیسم در برنامه نویسی زمانی اتفاق میافتد که یک نوع داده به نوع دیگر تبدیل یا به اصطلاح Cast میشود. پیش از این، چندریختی از طریق تعامل با نوع دادههای مختلف به واسطه شی کلاس یا توابع انجام میشد. نوع یک شی زمانی قابل انتخاب بود که برنامه اجرا میشد. امکان اجرای یک تابع واحد روی انواع داده مختلف نیز وجود داشت.
- «تبدیل نوع موقت ضمنی» (غیرصریح | غیرواضح) یا «Implicit Casting»: با استفاده از خود کامپایلر انجام میشود.
- «تبدیل نوع موقت صریح» (آشکار | واضح) یا «Explicit Casting»: با استفاده از const_cast ، dynamic_cast و سایر موارد انجام میشود.
مثالی برای پلی مورفیسم Coercion در برنامه نویسی به زبان های مختلف
برای مثال در پایتون، تبدیل نوع دادهها مشابه کدهای زیر انجام میشود:
همانطور که در کدهای فوق قابل ملاحظه است، هر یک از نمادهای انوع داده در پایتون خود یک تابع به حساب میآیند و با ارجاع یک متغیر یا داده به آنها (به عنوان آرگومان) نوع آن متغیر یا داده به نوع مورد نظر تغییر داده میشود.
در زبان جاوا نوع داده متغیرها به سادگی و تنها با تعریف نوع هر متغیر تبدیل میشود. در ادامه مثال سادهای برای جاوا در این خصوص ارائه شده است:
همچنین، تبدیل نوع در جاوا به صورت زیر هم انجام میشود:
در ادامه هم مثالی برای Coercion Polymorphism در زبان C++ ارائه شده است:
خروجی کدهای فوق به صورت زیر است:
Value is: 100
Value is: 50پلی مورفیسم در جاوا
درست مثل مفهوم کلی پلی مورفیسم در برنامه نویسی ، در جاوا هم پلی مورفیسم به توانایی یک کلاس برای فراهم کردن پیادهسازیهای مختلفی از یک متُد، بسته به نوع شیئی اشاره دارد که به آن متُد ارجاع داده میشود.
به بیان ساده، پلی مورفیسم در جاوا به برنامه نویس امکان میدهد تا عملکرد یکسانی را به شکلهای مختلف اجرا کند. هر شی جاوایی که نتیجه بیش از یک آزمون IS-A برای نوع داده خودش و همچنین برای شی کلاس مربوطه مثبت باشد، پلی مورفیک به حساب میآید.
در جاوا هم پلی مورفیسم زمانی اتفاق میافتد که وراثت برقرار باشد. وراثت قابلیتی قدرتمند در جاوا به حساب میآید. وراثت جاوا این امکان را برای یک کلاس فراهم میکند تا از خصوصیتها و ویژگیهای کلاسهای دیگر استفاده کنند و آنها را به ارث ببرند. به این ترتیب، این امکان در جاوا فراهم میشود تا بتوان عملکرد و رفتار یکسانی را به شکلهای مختلف انجام داد.
مثال پلی مورفیسم در برنامه نویسی جاوا
در این مثال، یک ابَر کلاس به نام Shapes دارای متُدی به نام area() است. زیرکلاسهای کلاس Shapes میتوانند از نوع مثلث (Triangle )، دایره (circle )، مستطیل (Rectangle ) و سایر موارد باشند. استفاده از ارثبری و پلی مورفیسم در جاوا به این معنا است که زیرکلاسها میتوانند از متُد area() برای پیدا کردن فرمول مساحت مربوط به آن شی استفاده کنند.
خروجی کدهای فوق به صورت زیر است:
The formula for the area of Triangle is ½ * base * height
The formula for the area of the Circle is 3.14 * radius * radiusپیش از این مقالهای با عنوان «پلی مورفیسم در جاوا» نیز در مجله فرادرس منتشر شده است که برای یادگیری کاملتر مباحث مربوط به پلی مورفیسم در جاوا مطالعه آن به علاقهمندان پیشنهاد میشود:
- مقالههای مرتبط:
آموزش پلی مورفیسم در سی شارپ
پلی مورفیسم در برنامه نویسی سیشارپ هم بسیار کاربرد دارد. در این بخش به چندریختی در C# پرداخته شده است. ابتدا لازم است ویژگی های پلی مورفیسم در سی شارپ بررسی شوند.
ویژگی های پلی مورفیسم در سی شارپ چیست ؟
پلی مورفیسم در برنامه نویسی سی شارپ دارای دو جنبه متمایز است که هر یک در ادامه فهرست شدهاند:
- در زمان اجرا، با اشیای یک کلاس مشتق شده، به عنوان اشیای یک کلاس پایه رفتار میشود. این رفتار در خصوص مواردی مثل پارامترهای متُد و مجموعههایی از آرایهها صورت میگیرد. وقتی این نوع از چندریختی در برنامه نویسی اتفاق میافتد، نوع داده اعلان شده برای آن شی دیگر با نوع داده زمان اجرای آن، همسان نخواهد بود.
- کلاسهای پایه، متُدهای مجازی را تعریف و پیادهسازی میکنند و کلاسهای مشتق شده میتوانند آنها را بازنویسی (Override) کنند. این یعنی آنها تعریف و پیادهسازی مختص خودشان را فراهم میسازند. در زمان اجرا، وقتی که کدهای کلاینت متُد مربوطه را فراخوانی میکنند، «زمان اجراي زبان مشترک» (Common Language Runtime) که به اختصار آن را CLR مینامند، نوع داده زمان اجرای شی را بررسی و سپس نسخه بازنویسی شده ماشین مجازی را فراخوانی میکند. برنامه نویس در کدهای منبع خود میتواند متُدی را روی یک کلاس پایه فراخوانی کند و باعث شود که یک نسخه مشتق شده از آن متُد اجرا شود.
متُدهای مجازی در سی شارپ این امکان را فراهم میکنند تا بتوان با گروههایی از اشیای مرتبط به شکلی یکپارچه کار کرد. برای درک بهتر چندریختی در سیشارپ، بهتر است مثالی انتزاعی ارائه شود.
مثالی برای درک بهتر پلی مورفیسم در برنامه نویسی سی شارپ
برای مثال، فرض میشود که یک اپلیکیشن رسم شکلهای مختلف وجود داشته باشد که به کاربر امکان میدهد تا شکلهای مختلف (دایره، مثلث و مستطیل) را روی سطح رسم ایجاد کند. حالا فرض میشود که این اپلیکیشن باید بر انواع شکلهای مختلفی که ایجاد شدهاند نظارت داشته باشد و بهروزرسانیهای لازم را در پاسخ به حرکتهای ماوس کاربر نشان دهد. برای حل کردن این مسئله، میتوان در دوگام ساده از پلی مورفیسم استفاده کرد:
- ایجاد یک سلسله مراتب کلاس که در آن هر شکل مشخص از یک کلاس پایه مشترک مشتق میشود.
- استفاده از یک متُد مجازی برای فراخوانی متُد مناسب در هر کلاس مشتق شده از طریق یک فراخوانی به متد کلاس پایه
ابتدا باید یک کلاس پایه را به نام Shape ایجاد کرد و پس از آن، کلاسهای مشتق شده نظیر Rectangle ، Circle و Triangle هم باید ایجاد شوند. حالا باید برای کلاس Shape متدی مجازی به نام Draw ایجاد شود و آن را در هر کدام از کلاسهای مشتق شده بازنویسی کرد. سپس در این مثال، یک شی List<Shape> ایجاد شده و یک Circle ، Triangle و Rectangle به آن اضافه شده است.
در این مثال، برای بهروزرسانی سطح رسم، از یک حلقه foreach استفاده شده است تا در طول لیست مربوطه پیمایش کند و متد Draw را روی هر شی Shape در این لیست فراخوانی کند. اگرچه، هر شی در لیست دارای نوع تعریف شدهای از Shape است، این نوع زمان اجرا (نسخه بازنویسی شده متُد در هر کلاس مشتق شده) است که فراخوانی خواهد شد.
در سیشارپ، همه نوعها پلی مورفیک هستند، زیرا تمام نوعها که شامل نوعهای تعریف شده توسط کاربر هم میشوند از Object ارثبری میکنند. پایتون هم یکی دیگر از زبانهای محبوبی به حساب میآید و افراد زیادی به دنبال یادگیری پلی مورفیسم در پایتون هستند. بنابراین بهتر است در ادامه به این موضوع پرداخته شود.
پلی مورفیسم در پایتون
پلی مورفیسم در پایتون به برنامه نویسان اجازه میدهد تا بتوانند متدهایی با نام یکسان و مطابق با آنچه در کلاس والدشان تعریف شده است را در کلاس فرزند ایجاد کنند. یک کلاس فرزند، تمام متُدهای خود را از کلاس والد به ارث میرد. اگرچه، در برخی شرایط، متدی که از کلاس والد به ارث برده شده است، چندان با کلاس فرزند سازگاری ندارد. در چنین مواقعی، لازم است متُد در کلاس فرزند از نو پیادهسازی شود. در پایتون روشهای متفاوتی برای تعریف پلی مورفیسم وجود دارند. برای تعریف پلی مورفیسم و استفاده از آن میتوان از تابع، متُدهای کلاس یا اشیا استفاده کرد.
پلی مورفیسم با تابع و اشیا در پایتون
به این ترتیب، خروجی کدهای فوق به صورت زیر خواهد بود:
Vegetable
Red
Fruit
Redپلی مورفیسم با متدهای کلاس در پایتون
خروجی کدهای فوق به صورت زیر است:
New Delhi
Hindi and English
Washington, D.C.
Englishپلی مورفیسم با ارث بری در پایتون
این کار اغلب در مواردی انجام میشود که متُد به ارث برده شده از کلاس والد با کلاس فرزند سازگار نباشد. این فرایند پیادهسازی مجدد یک متُد در کلاس فرزند را بازنویسی متُد (Method Overriding) مینامند که پیشتر هم به آن اشاره شد. در ادامه مثالی ارائه شده است که پلی مورفیسم با ارثبری در پایتون را نشان میدهد:
خروجی کدهای فوق به صورت زیر است:
There are different types of birds
Most of the birds can fly but some cannot
There are different types of bird
Parrots can fly
There are many types of birds
Penguins do not flyبه این ترتیب، انواع پلی مورفیسم در پایتون نیز شرح داده شد. حال در ادامه به پلی مورفیسم در C++ پرداخته شده است.
- مقاله مرتبط: برنامه نویسی شی گرا در پایتون | به زبان ساده
پلی مورفیسم در C++
در C++ پلی مورفیسم به طور کلی به دو نوع مختلف تقسیم میشود:
- پلی مورفیسم زمان کامپایل
- پلی مورفیسم زمان اجرا

پلی مورفیسم زمان کامپایل در C++
این نوع از پلی مورفیسم به وسیله «سربارگذاری تابع» (Function Overloading) یا «سربارگذاری عملگر» (Operator Overloading) حاصل میشود. در ادامه به هر یک این دو نوع از پلی مورفیسم زمان کامپایل در C++ پرداخته شده است.
سربارگذاری تابع در C++
زمانی که چندین تابع با نام یکسان، اما با پارامترهای متفاوت وجود دارد، آنگاه گفته میشود که این توابع سربارگذاری شدهاند. سربارگذاری توابع را میتوان به وسیله تغییر دادن تعداد آرگومانها یا تغییر در نوع داده این آرگومانها انجام داد. در ادامه برنامهای به زبان C++ برای سربارگذاری تابع آمده است:
خروجی کدهای فوق به صورت زیر است:
value of x is 7
value of x is 9.132
value of x and y is 85, 64در مثال بالا، یک تابع واحد به نام func در سه وضعیت مختلف به گونهای متفاوت عمل میکند که این خصیصهای چندریختی است.
سربارگذاری عملگر در C++
علاوه بر توابع، امکان سربارگذاری عملگرها در C++ هم وجود دارد. برای مثال، میتوان از عملگر به اضافه (‘+’) برای ادغام دو رشته در C++ استفاده کرد. میدانیم که این عملگر برای جمع به کار گرفته میشود که وظیفه آن اضافه کردن دو عملگر است. بنابراین، وقتی که یک عملگر به اضافه بین دو عملوند از نوع صحیح قرار میگیرد آن دو عملوند را با هم جمع میکند. اما وقتی این عملگر بین دو عملوند از نوع رشتهای قرار میگیرد، دو رشته با هم ادغام یا در واقع الصاق میشوند. در ادامه مثالی برای این حالت ارائه شده است:
خروجی کدهای فوق بله صورت زیر است:
12 + i9در مثال فوق، عملگر «+» در C++ سربارگذاری شده است. عملگر به اضافه یک عملگر جمع است و میتواند دو عدد را با هم جمع کند (صحیح یا ممیز شناور) اما در این مثال عملگر برای اجرای عملیات جمع دو عدد موهومی یا مختلط مورد استفاده قرار گرفته است.
پلی مورفیسم زمان اجرا در C++
این نوع از چندریختی یا پلی مورفیسم در برنامه نویسی C++ و برخی از سایر زبانها از طریق بازنویسی تابع (Function Overriding) انجام میشود. بنابراین در ادامه به شرح بازنویسی تابع در C++ پرداخته شده است.
بازنویسی تابع در C++
بازنویسی تابع از طرف دیگر زمانی اتفاق میافتد که یک کلاس مشتق شده دارای تعریفی برای یکی از تابعهای عضو کلاس پایه باشد. در این شرایط گفته میشود که آن تابع پایه بازنویسی شده است. در ادامه مثالی از یک برنامه C++ برای بازنویسی تابع ارائه شده است:
خروجی مثال فوق در ادامه آمده است:
print derived class
show base classجمعبندی
به بیان ساده، چندریختی یا پلی مورفیسم (Polymorphism) در برنامه نویسی، استفاده از یک بلوک کد و تغییر «نسخه» آن بلوک کد، بر اساس نوع ورودیها است. اصطلاح پلی مورفیسم یا چندریختی در برنامه نویسی و علوم کامپیوتر به این معنا است که میتوان به اشیایی با انواع مختلف از طریق رابط و واسطی یکسان دسترسی داشت. پلی مورفیسم انواع مختلفی در برنامه نویسی دارد که به طور کلی میتوان آنها را در ۴ دسته مختلف قرار داد. چندریختی به لحاظ اجرا به دو دسته کلی پلی مورفیسم زمان اجرا و چندریختی زمان کامپایل تقسیم میشود.
در این مقاله سعی شد تا حد امکان کلیه مباحث و مفهومهای مربوط به پلی مورفیسم در برنامه نویسی شرح داده شوند و این قابلیت در تعدادی از زبانهای برنامه نویسی مطرح و پر استفاده نیز مورد بررسی قرار گرفت. علاوه بر این، برای انواع پلی مورفیسم مثالهای متعددی در این مقاله برای زبانهای برنامه نویسی مختلف ارائه شدند.
مطالب مجله فرادرس را در جستجوی گوگل سریعتر ببینید













