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

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

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

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

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

کلاس های انتزاعی(Abstract)

کلاسی که abstract تعریف شده باشد از روی آن نمی توان نمونه ساخت.کلمه کلیدی abstract بایستی در تعریف یک کلاس قرار داده شده باشد،کلاس های abstract ممکن است دارای متدهای abstract باشند.سوال اینجاست که ” چه کسی به کلاسی که نمی تواند نمونه داشته باشد احتیاج دارد؟”.

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

یک شرکت دارای کارمندان و پیمانکارانی می باشد.کلاس ها را بدون استفاده از واسط ها(Interfaces)  برای نمایش افرادی که برای این شرکت کار می کنند پیاده سازی کنید.کلاس ها بایستی دارای متدهای زیر باشند:

changeAddress()

promote()

giveDayOff()

increasePay()

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

متد ()increasePay بایستی حقوق سالانه را برای کارمندان و همچنین حقوق ساعتی را برای پیمانکاران بالا ببرد.

حل با کلاس Abstract

از آنجاییکه متد ()increasePay  بایستی بطور متفاوت برای Employee و Constractor پیاده سازی شود در اینجا ما آنرا بصورت abstract تعریف کنیم.کلاس Person هم نیز می خواهد دارای ۳ متد بنام های ()changeAddress()،giveDayOffو() promote باشد.

مثال: کلاس Person بصورت Abstract

public abstract class Person {
private String name;
int INCREASE_CAP = 20; // cap on pay increase
public Person(String name){
this.name=name;
}
public String getName(){
return "Person’s name is " + name;
}
public void changeAddress(String address){
System.out.println("New address is" + address);
}
private void giveDayOff(){
System.out.println("Giving a day off to " + name);
}
public void promote(int percent){
System.out.println(" Promoting a worker...");
giveDayOff();
//calling an abstract method
increasePay(percent);
}
// an abstract method to be implemented in subclasses
public abstract boolean increasePay(int percent);
}

لطفا توجه کنید به اینکه اگرچه متد ()increasePay بصورت abstarct است،طراح کلاس Person لازم نیست جزئیات بالا رفتن حقوق را بداند و کلاس های فرزند ممکن است بوسیله توسعه دهندگان دیگر برنامه نویسی شده باشند،اما برنامه نویس می تواند کدی بنویسد که متد ()increasePay را فراخوانی می کند،همانند متد ()promote.

قدم بعدی ایجاد کلاس های فرزند Employee و Contractor می باشد،پیاده سازی متد()increasePay به دو روش مختلف که در مثال های زیر نشان داده شده است.

مثال: کلاس Employee

public class Employee extends Person{
public Employee(String name){
super(name);
}
public boolean increasePay(int percent) {
System.out.println("Increasing salary by " +
percent + "%. "+ getName());
return true;
         }
}

مثال : کلاس Contractor

public class Contractor extends Person {
public Contractor(String name){
super(name);
}
public boolean increasePay(int percent) {
if(percent < INCREASE_CAP){
System.out.println("Increasing hourly rate by " +
percent + "%. "+ getName());
return true;
} else {
System.out.println("Sorry, can’t increase hourly rate by more
than " + INCREASE_CAP + "%. "+ getName());
return false;
         }
     }
}

کلاس TestPayIncrease2 در مثال زیر چگونگی استفاده از کلاس Employee و  Contractor را برای نمایش ترویج کارکنان نمایش می دهد.

مثال: کلاس TestPayIncrease2

public class TestPayIncrease2 {
public static void main(String[] args) {
Person workers[] = new Person[3];
workers[0] = new Employee("Saeed");
workers[1] = new Contractor("Amir");
workers[2] = new Employee("Mohammad");
for (Person p: workers){
p.promote(30);
                            }
             }
}

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