رفتن به مطلب
محفل من
Mostafa

بیش از حد متد در Java

پست های پیشنهاد شده

زمانی که کلاسی چندین متد همنام با پارامترهای مختلف دارد، در اصطلاح برنامه نویسی شی گرا به آن method overloading می گویند. در برنامه ای که توسعه دهنده مجبور است به اجرای تنها یک عملیات است، داشتن چندین متد همنام می تواند در افزایش خوانایی کد اپلیکیشن نقش اساسی ایفا کند.

فرض بگیرید که در برنامه ی کوچکی تنها باید یک عملیات ساده ی جمع را انجام دهید اما تعداد آرگومان ها می تواند متغیر باشد. حال اگر کد را به این صورت بنویسید: a(int, int) و b(int, int, int) قطعا برای شما و سایر برنامه نویسان درک رفتار، قابلیت ها آن سخت می شود چرا که اسم متدی که قرار است عملیاتی یکسان را انجام دهد، متفاوت است. با بهره گیری از قابلیت method overloading این مشکل را برطرف می کنیم.

مزیت استفاده از method overloading

method overloading قابلیت خوانایی برنامه و کد را بالا می برد.

روش های مختلف overload کردن یک متد/ارسال پارامترهای مختلف به چندین متد همنام

دو روش مختلف برای overload کردن متد در Java وجود دارد که در زیر به آن ها اشاره می کنیم:

با تغییر دادن تعداد آرگومان ها

با تغییر دادن نوع داده ای (data type) پارامتر ورودی

در Java صرف تغییر دادن نوع بازگشتی (return type) متد نمی توان یک متد را overload کرد.

overload کردن متد: تغییر دادن تعداد آرگومان های ورودی

در مثال جاری، دو متد با نام یکسان ()add داریم که یکی دو عدد را جمع می کند و دیگری سه عدد را.

در این مثال، دو متد static ایجاد می کنیم تا برای فراخوانی آن ها نیازی به ساختن آبجکت از روی کلاس میزبان آن ها وجود نداشته باشد.

مخفی

    برای مشاهده مطلب باید در سایت ثبت نام کنید و سپس وارد شوید.

overload کردن متد: تغییر نوع داده ای آرگومان های ورودی توابع

در مثال جاری، دو متد تعریف می کنیم که نوع داده ای آرگومان های ارسالی به آن ها بایکدیگر متفاوت است. اولین متد ()add دو آرگومان از جنس عدد صحیح و int دریافت می کند. دومین متد add() دو آرگومان عددی از جنس اعشاری/double دریافت می کند.

مخفی

    برای مشاهده مطلب باید در سایت ثبت نام کنید و سپس وارد شوید.

چرا overload کردن متد با صرف تغییر دادن نوع بازگشتی و خروجی تابع ممکن نیست؟

در زبان Java، نمی توان به صرف ویرایش نوع خروجی (return type) متد، آن متد را overload کرد چرا که سبب ایجاد ابهام برای کامپایلر و خطا در ترجمه ی برنامه می شود. در زیر این ابهام را مشاهده می کنید:

مخفی

    برای مشاهده مطلب باید در سایت ثبت نام کنید و سپس وارد شوید.

آیا می توان متد main را در جاوا overload کرد؟

در پاسخ باید گفت بلی با استفاده از تکنیک method overloading می توان این کار را انجام داد. در واقع توسعه دهنده می تواند با استفاده از overloading چندین متد main در کلاس جاوای خود داشته باشد. اما لازم به ذکر است که دستگاه مجازی جاوا (JVM) تنها آن متد main() ای که آرایه ی رشته ای (Strings[] args) را به عنوان ورودی دریافت کرده را صدا می زند. به مثال زیر دقت کنید:

مخفی

    برای مشاهده مطلب باید در سایت ثبت نام کنید و سپس وارد شوید.

Method overloading و Type promotion (تبدیل ضمنی نوع)

چنانچه نوع داده ای منطبقی پیدا نشود، یک نوع به نوع دیگری به صورت ضمنی تبدیل می شود (type promotion). با دقت به تصویر زیر این امر را بهتر می فهمید :

مخفی

    برای مشاهده مطلب باید در سایت ثبت نام کنید و سپس وارد شوید.

همان طور که در نمودار بالا مشاهده می کنید، نوع داده ای byte می تواند به short، int، long، float یا double تبدیل شود. نوع داده ای short نیز قابل تبدیل به int، long، float یا double می باشد. نوع داده ای char به int، long، float یا double و غیره قابل تبدیل ضمنی می باشد.

مثال کاربردی از overloading با تبدیل ضمنی نوع یا type promotion

مخفی

    برای مشاهده مطلب باید در سایت ثبت نام کنید و سپس وارد شوید.

مثال کاربردی از method overloading با تبدیل ضمنی نوع در صورت وجود آرگومان از نوع منطبق در متد

در صورت وجود آرگومان هایی که از نظر نوع داده ای با هم منطبق هستند در متد مورد نظر، type promotion یا تبدیل ضمنی نوع داده ای صورت نمی گیرد.

مخفی

    برای مشاهده مطلب باید در سایت ثبت نام کنید و سپس وارد شوید.

مثال کاربردی از method overloading با تبدل ضمنی نوع در صورت وجود ابهام در خصوص نوع داده ای آرگومان ها

اگر هیچ آرگومانی که از نظر نوع داده ای منطبق باشند به متد ارسال نشده باشد و هر متد تعداد یکسان آرگومان را به صورت ضمنی تبدیل کند، به طور قطع ابهام رخ خواهد داد.

مخفی

    برای مشاهده مطلب باید در سایت ثبت نام کنید و سپس وارد شوید.

یک نوع داده ای هست که به صورت ضمنی قابل بازگشت به نوع دیگری به صورت ضمنی نیست، برای مثال double قابل depromote به هر نوع داده ای نمی باشد.

 

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

برای ارسال دیدگاه یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید دیدگاهی ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در سایت ما ثبت نام کنید. عضویت خیلی ساده است !

ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید

ورود به حساب کاربری
    • 1 Posts
    • 82 Views
    • 1 Posts
    • 94 Views
    • 1 Posts
    • 103 Views
    • 1 Posts
    • 102 Views

  • سفارش پروژه برنامه نویسی

×
×
  • اضافه کردن...