پلی‌مورفیسم چیست و چه کاربردی دارد

خلاصه
1404/05/25

## پلی‌مورفیسم (Polymorphism) چیست؟ پلی‌مورفیسم در لغت به معنای "چند شکلی" یا "چند ریختی" است. در برنامه‌نویسی شیءگرا (OOP)، پلی‌مورفیسم به توانایی یک موجودیت (مانند یک شیء، ت

پلی‌مورفیسم چیست و چه کاربردی دارد

## پلی‌مورفیسم (Polymorphism) چیست؟

پلی‌مورفیسم در لغت به معنای "چند شکلی" یا "چند ریختی" است. در برنامه‌نویسی شیءگرا (OOP)، پلی‌مورفیسم به توانایی یک موجودیت (مانند یک شیء، تابع، یا متد) برای اتخاذ اشکال مختلف اشاره دارد. به عبارت دیگر، یک نام می‌تواند به رفتارهای مختلفی اشاره کند.

پلی‌مورفیسم یک مفهوم اساسی در OOP است که به برنامه نویسان اجازه می‌دهد تا کدهای انعطاف‌پذیر، قابل نگهداری و قابل گسترش بنویسند.

**به زبان ساده:** تصور کنید یک دکمه دارید. بسته به جایی که این دکمه را می‌بینید، عملکردهای مختلفی خواهد داشت: در آسانسور برای رفتن به یک طبقه، در یک بازی برای پرش، و در یک برنامه برای ذخیره فایل. این همان مفهوم پلی‌مورفیسم است: یک نام واحد (دکمه) بسته به زمینه، رفتارهای مختلفی دارد.

## انواع پلی‌مورفیسم

پلی‌مورفیسم به طور کلی به دو نوع اصلی تقسیم می‌شود:

1. **پلی‌مورفیسم در زمان کامپایل (Compile-time Polymorphism) یا پلی‌مورفیسم استاتیک:** این نوع پلی‌مورفیسم در زمان کامپایل تعیین می‌شود که کدام متد باید فراخوانی شود. دو شکل اصلی آن عبارتند از:

* **سربارگذاری (Overloading):** زمانی رخ می‌دهد که چندین متد با نام یکسان در یک کلاس وجود داشته باشند، اما لیست پارامترهای متفاوتی (تعداد، نوع، یا ترتیب پارامترها) داشته باشند. کامپایلر بر اساس پارامترهای ارسالی، متد مناسب را انتخاب می‌کند.

* **قالب‌ها (Templates) / جنریک‌ها (Generics):** در زبان‌هایی مانند C++ و Java، قالب‌ها یا جنریک‌ها به شما اجازه می‌دهند کلاس‌ها و متدهایی بنویسید که با انواع داده‌های مختلف کار می‌کنند بدون اینکه نیاز باشد کدهای مشابه را برای هر نوع تکرار کنید.

2. **پلی‌مورفیسم در زمان اجرا (Runtime Polymorphism) یا پلی‌مورفیسم پویا:** این نوع پلی‌مورفیسم در زمان اجرا تعیین می‌شود که کدام متد باید فراخوانی شود. این کار معمولاً از طریق وراثت و بازنویسی (Overriding) متدها انجام می‌شود.

* **بازنویسی (Overriding):** زمانی رخ می‌دهد که یک کلاس فرزند، یک متد را که از کلاس والد خود به ارث برده است، دوباره پیاده‌سازی کند. در این حالت، متد کلاس فرزند جایگزین متد کلاس والد می‌شود. در زمان اجرا، بر اساس نوع واقعی شیء، متد مناسب فراخوانی می‌شود.

## کاربردهای پلی‌مورفیسم

پلی‌مورفیسم کاربردهای گسترده‌ای در برنامه‌نویسی شیءگرا دارد که از جمله آنها می‌توان به موارد زیر اشاره کرد:

* **انعطاف‌پذیری و قابلیت گسترش:** پلی‌مورفیسم به شما اجازه می‌دهد تا بدون نیاز به تغییر کدهای موجود، کلاس‌های جدیدی اضافه کنید و رفتار برنامه را گسترش دهید.
* **کاهش وابستگی (Decoupling):** پلی‌مورفیسم به کاهش وابستگی بین کلاس‌ها کمک می‌کند. این امر باعث می‌شود تا تغییر یک کلاس، تأثیر کمتری بر سایر کلاس‌ها داشته باشد.
* **قابلیت استفاده مج