مشخصات مقاله
-
2061
-
0.0
-
11432
-
0
-
0
آموزش Java - کلاس های انتزاعی در Java
آموزش Java – کلاس های انتزاعی/Abstract class در Java
یک کلاس که با کلیدواژه ی abstract اعلان شده باشد، به عنوان کلاس abstract/انتزاعی شناخته می شود. کلاس abstract می تواند متدهای abstract یا بدون بدنه و متدهای با بدنه (nonabstract) داشته باشد.
پیش از پرداختن به کلاس های abstract در Java، لازم است با مفهوم abstraction آشنا شویم.
Abstraction در Java
Abstraction فرایندی است که طی آن جزئیات پیاده سازی کد از کاربر مخفی نگه داشته شده و صرفا قابلیت ها و امکانات آماده و قابل استفاده برای کاربر در اختیار وی قرار می گیرند. به بیان ساده تر، جزئیات و اتفاقات پیچیده ای که در داخل برای علمیاتی همچون ارسال sms اتفاق می افتد را پنهان ساخته و امکان آماده و آسان نوشتن و ارسال پیغام را در اختیار کاربر قرار می دهد. کاربر نیازی به دانستن عملکرد و پردازش داخلی ارسال پیغام ندارد.
به وسیله ی مفهوم abstraction می توان بجای پرداختن به جزئیات داخلی و اینکه برنامه (آبجکت) چگونه عملیات معینی مثل ارسال پیغام را انجام می دهد، بر روی خود عملیات آبجکت تمرکز نمایید.
روش های پیاده سازی مفهوم abstraction
دو روش برای پیاده سازی abstraction در Java وجود دارد:
- abstract class (0 تا 100 درصد)
- interface (100 درصد)
کلاس abstract در آموزش Java
یک کلاس که با کلیدواژه ی abstract اعلان شده است، کلاس abstract خوانده می شود. این نوع کلاس باید توسط کلاس های دیگر به ارث برده و متدهای آن داخل بدنه ی کلاس های به ارث برنده پیاده سازی شود. لازم به ذکر است امکان نمونه سازی از کلاس abstract وجود ندارد.
نحوه ی تعریف کلاس abstract به شرح زیر می باشد:
abstract class A{}
متد abstract
متدی که با کلیدواژه ی abstract نشانه گذاری شده و دارای بدنه یا پیاده سازی نباشد، در برنامه نویسی شی گرا تحت عنوان متد abstract شناخته می شود.
نحوه ی تعریف متد abstract به شرح زیر می باشد:
abstract void printStatus();//no body and abstract
در زیر مثالی کاربردی از کلاس abstract که میزبان یک متد abstract می باشد را مشاهده می کنید. در نمونه ی حاضر، Bike یک کلاس abstract است که دربردارنده ی متد abstract به نام run می باشد. کلاس Honda پس از ارث بری از Bike، متد run را در بدنه ی خود پیاده سازی می کند.
abstract class Bike{
abstract void run();
}
class Honda4 extends Bike{
void run(){System.out.println("running safely..");}
public static void main(String args[]){
Bike obj = new Honda4();
obj.run();
}
}
خروجی:
running safely..
استفاده ی کاربردی از کلاس abstract
در این مثال، Shape یک کلاس abstract است که پیاده سازی آن در کلاس های Rectangle و Circle انجام می شود. در بیشتر مواقع کاربر اطلاعی از کلاسی که پیاده سازی واقعی را انجام می دهد، ندارد. همچنین آبجکت یا نمونه ی کلاسی که پیاده سازی را انجام می دهد را متدی سازنده به نام factory method ارائه می دهد.
factory method متدی است که یک نمونه از کلاس مورد نظر را برمی گرداند. در آینده درباره ی این متد بیشتر شرح خواهیم داد. در مثال پیشرو، یک نمونه از کلاس Rectangle ایجاد می کنیم و متد draw() از این کلاس فراخوانی می شود.
فایل: TestAbstraction1.java
abstract class Shape{
abstract void draw();
}
//In real scenario, implementation is provided by others i.e. unknown by end user
class Rectangle extends Shape{
void draw(){System.out.println("drawing rectangle");}
}
class Circle1 extends Shape{
void draw(){System.out.println("drawing circle");}
}
//In real scenario, method is called by programmer or user
class TestAbstraction1{
public static void main(String args[]){
Shape s=new Circle1();//In real scenario, object is provided through method e.g. getShape() method
s.draw();
}
}
خروجی:
drawing circle
مثال کاربردی از کلاس abstract در Java
فایل: TestBank.java
abstract class Bank{
abstract int getRateOfInterest();
}
class SBI extends Bank{
int getRateOfInterest(){return 7;}
}
class PNB extends Bank{
int getRateOfInterest(){return 8;}
}
class TestBank{
public static void main(String args[]){
Bank b;
b=new SBI();
System.out.println("Rate of Interest is: "+b.getRateOfInterest()+" %");
b=new PNB();
System.out.println("Rate of Interest is: "+b.getRateOfInterest()+" %");
}}
خروجی:
Rate of Interest is: 7 % Rate of Interest is: 8 %