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

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

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

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

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

مثال عملی شی گرایی در جاوا

حالا وقت آن رسیده است که اولین برنامه خورد که کاری مهمتر از چاپ “Hello World” رو صفحه نمایش را انجام می دهد را بنویسیم. این برنامه  محاسبه مالیات در ایالت های آمریکا را شبیه سازی می کند. هدف از نوشتن این برنامه این است که نحوه ارتباط بین  کلاس ها و نحوه فرخوانی متدها و استفاده از متغییرها را نشان دهیم.

تعریف کلاس Tax همراه خصیصه های آن

از انجایی که شما قصد دارید که مالیات را محاسبه کنید انجام این کار چندان هم پیچیده نیست. کلاسی بنام Tax تعریف می کنیم که بعد از کلمه کلید class اسم کلاس یعنی Tax را می نویسیم و بعد از ان دو اکولاد باز و بسته می نویسم

    class Tax{ }

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

    class Tax{

    double income;

    }
    

از آنجایی که قوانین مالیاتی در ایالت های مختلف امریکا متفاوت است به دانستن ایالتی که شخص مورد نظر در ان زندگی می کند نیز نیاز دارید. NJ ، NY و CT مخفف اسامی چندتا از ایالت ها در آمریکاست. از نوع داده String برای ذخیره سازی داده های متنی استفاده می شود.

    class Tax{
    double income;
    String state;
    }
    

خصیصه دیگری که لازم دارید این است که تعداد افراد تحت تکلف یک شخصی که موضف با پرداخت مالیات است را بدانید. از آنجایی که تعداد افراد تحت تکلف عددی صحیح است یعنی برای مثال تعداد افراد تحت تکلف نمی تواند ۵/۲  و اعشاری باشد از نوع داده عددی صحیح int استفاده می کنیم.

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

اضاف کردن یک متد به کلاس Tax

متغییرها داده های مورد نیاز یک کلاس را درون یک کلاس نگهدای می کنند و متدها روی این داده ها پردازش لازم را انجام می دهند. اولین متد ما متد CalcTax() است که مالیات یک شخص را بر اساس درآمد سالیانه، افراد تحت تکلف و با توجه به ایالتی که شخص در ان زندگی می کند را محاسبه می کند.

    class Tax{
    double income;
    String state;
    int dependents;
    public double calcTax(){
	    return 234.55;
    	}
    }

    

امضا متد  calcTax()  اطاعات زیر را در اختیارما قرار می دهد:

نوع دسترسی به آن public است یعنی هرکلاس خارجی می تواند به آن دسترسی پیدا کند.

مقدار برگشتی این متد یک نوع عددی دارای نقطه اعشار از نوع double است.

نام متد calcTax است.

پرانتز باز و بسته خالی بعد از اسم متد به این معناست که این متد هیچ آرگومانی ندارد و به چیزی خارج از متد و خصیصه های خود کلاسی که در آن تعریف شده برای محاسبه مالیات نیاز ندارد. (دقت کنید که در بدنه این متد محاسباتی انجام نشده است فقط یک مقدار اعشاری صریح برای تکمیل مثال برگردانده می شود. این کار در اصطلاح hard-code کردن گفته می شود).

چگونه تصمیم می گیریم که یک متد مقداری را برگرداند یا خیر؟

اگر متد شما عملیات محاسباتی را انجام می دهد و باید به برنامه ای که آن متد را فراخوانی کرده، مقداری را برگرداند این متد باید دارای مقدار برگشتی باشد. اما اگر متدی مستقیما متغییرهای سطح کلاس را تغییر می دهد و داده ها را فقط در جایی به عنوان خروجی نمایش می دهد ، ذخیره می کند( سرور یا دیسک محلی) شاید لازم نباشد که مقداری را به عنوان مقداری برگشتی به برنامه فراخوانی کننده متد برگرداند در چنین شرایطی یعنی وقتی که متد ما دارای مقدار برگشتی نیست از کلمه کلیدی void در امضای متد استفاده می کینم.

    public void printAnnualTaxReturn(){
    // some codes goes here
    }
    

با استفاده از دستور return جاوا، یک متد می تواند داده ای را که درون یک متغییر قرار دارد یا خود مقدار را به صورت صریح به برنامه ای که آن را فرخوانی خواهد کرد برگرداند.

    return calculatedTax;
    return 2400;
    

بخاطر داشته باشید که اگر در امضا متد خود نوع برگشتی را مشخص کنید و اما در بدنه متد خود، استفاده از دستور return را فراموش کنید مانند مثال زیر:

    public int getSeconds(){
    int second=55;
    }
    

و یا نوع برگشتی متغییر یا مقداری که جلوی دستور return می نویسید با نوع مشخص شده در امضای متد مغایرت داشته باشد مانند مثال زیر:

    public int getSeconds(){
    double x=22.5;
    return x;
    }
    

کامپایلر در هنگام کامپایل برنامه از شما خطا خواهد گرفت.

تعریف یک کلاس دیگر بنام TestTax

کلاس Tax نخوه محاسبه مالیات را خواهد داشت اما در برنامه دنیای واقعی شما با تداد زیادی از کلاس ها مواجه هستید که هرکدام بخش از روند کاری را انجام می دهند. برای مثال شاید به ایجاد کلاسی به اسم  Person نیاز پیدا کنید. حسابداران با توجه به نوع استخدام یا درآمد از فرم های مختلفی در فایل های مالیاتی استفاده می کنند و هرکدام می تواند توسط کلاس جداگانه ای ارائه شود. هرکدام از این کلاس ها موجودیتی را مدل یا ارائه می کنند اما هیچکدام از آنها قابلیت اجرایی ندارد و متد main() ندارد. شما به کلاس دیگری نیاز دارید که اجرای برنامه را شروع کندو در صورت نیاز به هرکدام از کلاس ها از آنها شی ایجاد کند، ما در اینجا این کلاس را TestTax  می نامیم که باید بتواند کارهای زیر را انجام دهد.

یک نمونه از کلاس Tax ایجاد کند.

داده های فردی مانند درآمد ، محل سکونت و تعداد افراد تحت تکلف را به ان الحاق کند.

متد  calcTax()را فراخوانی کند.

نتیجه را روی صفحه نمایش چاپ کند

کلاس TestTax در فایل جداگانه ای بنام TestTax.java ذخیره خواهد شد

    class TestTax{
    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);
    }
    }
    

در کد بالا یک متغییر بنام t از نوع Tax کرده ایم. متد main() نقطه اغاز برنامه محاسبه مالیات است این متد یک نمونه از کلاس Tax را ساخته و آدرس ان شی یا نمونه ساخته شده را درون t قرار می دهد. t در واقع متغییری است که آدرس شی ساخته شده را که در حافظه اصلی سیستم قرار دارد را در خود نگهداری می کند از این پس برای هرگونه دسترسی به شی ایجاد شده باید از t استفاده کنیم.

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

    t.income=50000;
    t.dependents=2;
    t.state=”NJ”;
    

بعد از این شما می توانید مالیات را با فراخوانی متد calcTax() محاسبه کنیدو مقدار برگردانده شده را درون یک متغییر مانند yourTax بریزید. البته این متد هنوز هم همان مقدارhard-code شده یعنی  ۲۳۴٫۵۵ را بر می گرداند که جلوتر آن را رفع خواهیم کرد. اخرین خط نیز بایک پیغام نتیجه را روی خروجی چاپ می کند. در این مرحله شما درای دو کلاس هستید که باهم در ارتباط هستند.

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