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

ایمیل خود را وارد کنید:

اوراکل (ADF(Application Development Framework یک چارچوب(Framework)  کلی می باشد که برروی استانداردهای Java EE و تکنولوژی های Open Source جهت سادگی و پیاده سازی سریع تر برنامه های Java EE ایجاد شده است که کاملا توسعه پذیر و قابل تنظیم بوسیله افزودن یا اصلاح کتابخانه ها می باشد. ADF وظایف را از طریق ایجاد سرویس […]

CardLayout پنجره ای را در نظر بگیرید که شامل چندین پنل می باشد که در یک زمان فقط یکی از این پنل ها قابل مشاهده می باشد،با استفاده از کلاس java.awt.CardLayout شما می توانید کامپوننتی را ایجاد کنید که فقط یکی از این پنل ها را در یک زمان نمایش دهد، مانند شکل زیر: زمانی […]

اطلاعات سخت افزاری CPU اطلاعات CPU شامل جزئیاتی  مثل معماری ، نام سازنده ، مدل ، تعداد هسته ها ، سرعت هرکدام از هسته ها و غیره است. برای دسترسی به چنین جزئیاتی درباره سخت افزار CPU در لینوکس، تعداد بسیار اندکی کامند برای این منظور وجود دارد که ما در اینجا بطور مختصر تعدادی […]

وراثت و متد overriding + یک مثال

در برنامه نویسی شی گرا کلمه وراثت به این معناست که یک کلاس جدید را بر پایه ی کلاسی که از پیش موجود است ایجاد کنیم و کلاس جدید را از پایه ایجاد نکنیم. فرض کنید که کلاس Tax مالیات را در تمام ایالت ها به درستی محاسبه می کند به استثنای ایالت New Jersey که در آنجا قانون کاهش مالیاتی جدیدی وضع شده است که اگر فردی فرزندی در مقطع دبیرستان داشته باشد آن فرد مشمول معافیت مالیتی ۵۰۰ دلاری می شود. در این شرایط باید متد محاسبه مالیات در  کلاس Tax را تغییر دهید و یک شرط خاص در آن بررسی کنید یا اینکه یک کلاس جدید بر پایه کلاس Tax موجود ایجاد کنید و روش جدید محاسبه مالیات درآن پیاده سازی کنید.

    class NJTax extends Tax{

    }
    

با اینکار کلاس NJTax تمام قابلیت های کلاس Tax را خواهد داشت به علاوه اینکه شما می توانید متدها و خصیصه های دیگری به آن اضافه کنید. در این شرایط اصطلاحا کلاس Tax کلاس اصلی و کلاس NJTax زیر کلاس نامیده می شوند البته از اصطلاح والد و فرزند نیز به همین ترتیب استفاده می شود. زیر کلاس NJTax به تمام متغییرها و متدهای کلاس پدر یعنی Tax دسترسی دارد مگر اینکه سطح دسترسی آنها private یا پکیج باشد که در مطالب بعدی به آن خواهیم پرداخت.

حال برای اینکه که قابلیت کلاس Tax را در کلاس NJTax توسعه دهیم بک متد به کلاس NJTax بنام ()adJustedForStudents اضافه می کنیم.

    class NJTax extends Tax{
              double adjustedForStudents(double tax){
                       double adjustedTax=tax-500;
                       return adjustedTax;
              }
    }
    

برای استفاده از متد جدید، در کلاس TestTax بجای کلاس Tax از کلاس NJTax نمونه می سازیم

    NJTax t=new NJTax();
    


حال می توانیم هم با استفاده از متغییر t به متدهای تعریف شده در کلاس Tax هم متدهای تعریف شده هم متدهای تعریف شده در کلاس NJTax دسترسی پیدا کنیم مثل:

    NJTax t=new NJTax();
    double yourTax=t.calcTax();
    double totalTax=t.adjustedForStudents(yourTax);
    


در اینجا ما قابلیت جدیدی به برنامه محاسبه مالیاتی خود اضافه کردیم بدون اینکه کلاس Tax را تغییر دهیم. در کد بالا نکتع دیگری را باید آن را بدانید این است که در برنامه نویسی می توانیم از مقدار برگشتی اجرای یک متد به عنوان مقدار ورودی در متد دیگری استفاده کنیم. همانطور که در کد بالا می بینید نتیجه اجرای متد calcTax() در متغییر yourTax قرار می گیرد و همین متغییر yourTax به عنوان آرگومان ورودی به متد adjustedForStudents() داده شده است.


متد Overriding

مفهموم و اصطلاح مهم دیگری که در برنامه نویسی شی گرا وجود دارد متد Overriding است. تصور کیند که کلاس Tax درای ۲۰ متد مختلف است و همه انها کارهای مورد نیاز همه ایالت ها را انجام می دهند ولی یکی از متدها کارایی لازم و مورد انتظار را در ایالت New Jersey را ندارد. به جای اینکه متد را کلاس اصلی یعنی کلاس Tax تغییر دهید می توانید این متد را در کلاس دیگری که از کلاس Tax ارث بری می کند بازنویسی کنید. یعنی امضا متد در کلاس فرزند عینا مانند کلاس والد است اما بدنه آن متفاوت و بشکل دیگری پیاده سازی شده است. متد Overriding در موارد زیر در برنامه نویسی کمک کننده است:

زمانی که به سورس کد کلاسی دسترسی نداریم اما می خواهیم قابلیت های آن را تغییر دهیم.

زمانی که نسخه اصلی کلاس هنوز هم در برخی شرایط نیاز ما را رفع می کنید و شما می خواهید نواقص آن را رفع کنید تا تکمیل تر شود.

مواردی نیز وجود دارد از متد Overriding استفاده میکنیم تا از قابلیت برنامه نویسی چندریختی یا همان Polymorphism استفاده کنیم که بعدا به آن خواهیم پرداخت.


مثال قدم به قدم

۱- در Eclipse یک پروژه جدید بنام lesson3 ایجاد نمایید

۲- یک کلاس جدید بنام Tax ایجاد کنید و کد زیر را در آن  وارد کنید

    public class Tax {
    double income;
    String state;
    int dependents;

    public double calcTax() {
    double stateTax = 0;
    if (income < 30000) {
    stateTax = income * 0.05;
    } else {
    stateTax = income * 0.06;
    }
    return stateTax;
    }
    }
    

۳- یک کلاس دیگر بنام TestCalc ایجاد کنید و کد زیر را  نیز در آن وارد کنید

    public class TestCalc {
    public static void main(String args[]) {
    Tax t = new Tax();
    t.income = 50000;
    t.dependents = 2;
    t.state = "NJ";
    double yourTax = t.calcTax();
    System.out.println("your tax is: " + yourTax);
    }
    }
    

۴- حال با کلیک راست بر روی گزینه Run As>Java Application کلیلک کنید تا خروجی برنامه خود را در پنل Console مشاهده کنید
۵- حال یک کلاس دیگری بنام NJTax ایجاد کنید و کد زیر را در آن وارد کنید

    public class NJTax extends Tax {
    public double calcTax() {
    double  stateTax=0;
    if (income < 30000) {
    stateTax=income*0.05;
    }
    else{
    stateTax= income*0.06;
    }

    return stateTax-500;
    }

    }
    



۶-در این مرحله برای اینکه از Overriding خود استفاده کنید باید متد ()main خود را به شکل زیر تغییر دهید، یعنی به جی شی ساختن از کلاس Tax از کلاس NJTax شی خواهید ساخت. مجددا آن را اجرا کنید

    public class TestCalc {
    public static void main(String args[]) {
    NJTax t = new NJTax();
    t.income = 50000;
    t.dependents = 2;
    t.state = "NJ";
    double yourTax = t.calcTax();
    System.out.println("your tax is: " + yourTax);
    }
    }
    

برای اینکه با مشکلی مواجه نشوید دو پروژه جداگانه ایجاد شده است که یکی استفاده از کلاس های Tax و TestCalc را نشان می دهد. و در پروژه دیگری استفاده از کلاس Tax و TestCalc به همراه NJTax نشان داده شده است که کد پروژه Eclipse ان را می توانید از لینک زیر دانلود نماید

دیدگاه خود را به ما بگویید.