مفهوم Overloading در برنامه‌نویسی شی‌گرا چیست

خلاصه
1404/10/16

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

مفهوم Overloading در برنامه‌نویسی شی‌گرا چیست

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

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

**به طور خلاصه:**

* **نام متد:** یکسان
* **پارامترها:** متفاوت (تعداد، نوع، ترتیب)
* **عملکرد (Implementation):** می‌تواند متفاوت باشد (اما معمولاً مرتبط با هم هستند)

**مثال (جاوا):**

```java
public class Calculator {

// متد جمع دو عدد صحیح
public int add(int a, int b) {
return a + b;
}

// متد جمع سه عدد صحیح
public int add(int a, int b, int c) {
return a + b + c;
}

// متد جمع دو عدد اعشاری
public double add(double a, double b) {
return a + b;
}

public static void main(String[] args) {
Calculator calculator = new Calculator();

System.out.println(calculator.add(2, 3)); // خروجی: 5
System.out.println(calculator.add(2, 3, 4)); // خروجی: 9
System.out.println(calculator.add(2.5, 3.5)); // خروجی: 6.0
}
}
```

در این مثال، متد `add` سه بار Overload شده است. هر بار با پارامترهای متفاوتی تعریف شده است. کامپایلر (compiler) با توجه به نوع و تعداد آرگومان‌هایی که به متد `add` ارسال می‌شود، تشخیص می‌دهد کدام نسخه از متد را باید اجرا کند.

**مزایای Overloading:**

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

**نکات مهم:**

* Overloading در زمان کامپایل (Compile-time) اتفاق می‌افتد، به این معنی که کامپایلر در زمان کامپایل تشخیص می‌دهد که کدام متد باید فراخوانی شود. این فرآیند به عنوان **Static Polymorphism (چندریختی ایستا)** نیز شناخته می‌شود.
* تغییر نوع مقدار بازگشتی (return type) یک متد به تنهایی برای Overload کردن کافی نیست. تغییر باید در پارامترها باشد.
* بعضی زبان‌ها، مانند پایتون، مستقیماً از Overloading پشتیبانی نمی‌کنند، اما می‌توان با استفاده از تکنیک‌هایی مشابه (مانند استفاده از آرگومان‌های پیش‌فرض و یا `*args` و `**kwargs`) به نتایج مشابه رسید.

**تفاوت Overloading و Overriding:**

اشتباه رایج بین Overloading و Overriding (بازنویسی) وجود دارد. Overriding در زمانی اتفاق می‌افتد که یک زیرکلاس (subclass) متدی را از سوپرکلاس (superclass) خود به ارث برده و آن را دوباره تعریف می‌کند. در حالی که Overloading در یک کلاس و با پارامترهای متفاوت رخ می‌دهد.

به طور خلاصه:

* **Overloading:** چند متد با نام یکسان در یک کلاس، پارامترهای متفاوت.
* **Overriding:** یک متد در زیرکلاس که متدی با نام، امضا و نوع بازگشتی یکسان را از سوپرکلاس بازنویسی می‌کند.

امیدوارم این توضیح جامع مفهوم Overloading را در برنامه‌نویسی شی‌گرا روشن کرده باشد.