صفحه 1:
ارث برى
استفاده ى مجدد ازكلاس توسط وراثت
مظفر بگ محمدی
دانشكاه ايلام
صفحه 2:
استفاده ی مجدد از کلاس
ما دیدیم كه چگونه کلاسها و کد آنها در ترکیب استفاده شدند.
#در ترکیب, شی یک پا چند شی دیگر را به عنوان متغیبر استفاده می
کرد.
© تركيب رابطه ی "داشتن" را مدل می کند.
SG Person ,»® نام (عصتتاو) دارد.
#ماشین موتور دارد.
٩ کتاب صفحه دارد.
صفحه 3:
ارتباط اشیاء
© شى مى تواند نوع خاصى از یک شی دیگر باشد.
ن یک وسیله ی نقلیه است.
ی
#دانشجو از نوع ۳۵۲90۳ است.
این نوع ارتباط تحت نام "نوعی از" شناخته می شود.
#در 00۳, این مدل ارتباطی توسط تکنیک برنامه نویسی ورائت
مدل مى شود.
#وراثت با اضافه كرد به كلا ی جاری, کلاسهای جدیدی
ایجاد می کند a اا ى بدون دستكا ستكارى استفاده مى
شود.
صفحه 4:
ورائت
#ورانت از تکنیکهای اصلی 00۳ است.
#نحوه ی استفاده از ورائت:
#ابتدا یک کلاس عمومی (پایه) تعریف می شود.
سپس نسخه های خصوصی تر کلاس را با اضافه كردن متدها
و متغییرهای جدید تعریف می کنیم.
#می گوییم که نسخه ی خصوصی مندها و متغیبرهای نسخه
ی عمومی کلاس پایه را به ارث برده است.
صفحه 5:
>)
کلاسهای مشتق شده
#معمولاً هنگام طراحی بعضی کلاسها ورائت بصورت طبیعی خود را
نمایان می کند:
#در برنامه ی حقوق کارمندان یک اداره دو نوع کارمند داریم: ساعتی و
حقوقی
کارمندان ساعتی می توانند پاره وقت یا کامل باشند.
® کارمندان با حقوق ماهانه ی مشخص نیز به دو دسته ی فنی و اداری
تقسیم می شوند.
صفحه 6:
کلاسهای مشتق شده
تمام کارمندان مشخصات مشترکی دارند:
#اسم و تاريخ استخدام
© متدهاى دسترسى و تغيير نام و تاريخ استخدام
© بعضى كارمندان مشخصات خصوصى ترى دارند:
#میزان پرداخت
کارمند ساعتی: دستمزد هر ساعت کار
کارمند پیمانی: میزان پایه ی حقوق
#نحوه ی محاسبه میزان پرداختی برای این دو نوع کارمند
متفاوت است.
صفحه 7:
ورائت و 00۳
#ورائت نوعی انتزاع است که به منظور:
#اشتراک مشابتهای بین کلاسها (مثل نام و تاریخ استخدام) و
6حفظ تفاوتها (مثل نحوه محاسبه ی میزان پرداختی) انجام می
شود.
ورائت به ما اجازه می دهد که کلاسها را بصورت خانواده هایی از
نوع مرتبط دسته بندی کنیم و متدها و خصوصیات مشترک آنها
را به اشتراك بكذاريم.
صفحه 8:
کلاسهای عمومی
#می توان برای تمام کارمندان یک کلاس عمومی به نام
6 تعریف کرد.
سپس می توان کارمندان ساعتی و پیمانی را از روی این
كلاس تعريف كرد.
سيس مى توان از كلاس ©6لا511010/ا011ا0!! براى تعريف
کلاس ۴۲۱۵۱۵۱/66 ۴8۵۲۲1161۲۱۵۷۳۱۷ استفاده کرد و ....
صفحه 9:
Display 7.1 A Class Hierarchy
===:
A Class Hierarchy
صفحه 10:
Employee pS 1
بر
Class Invariant: All objects have a name string and hire date.
A name string of "No name" indicates no real name specified yet.
A hire date of Jan 1, 1000 indicates no real hire date specified yet.
*/
public class Employee
3
private String name;
private Date hireDate;
// 0-argument constructor
public Employee( )
1
name = "No name";
hireDate = new Date("Jan", 1, 1000); //Just a placeholder
}
// alternate constructor
public Employee(String theName, Date theDate) { /* code here */ }
// copy constructor
public Employee(Employee originalobject) { /* code here */ }
(continued)
صفحه 11:
كلاس ۴۲۳۱010766
// some accessors and mutators
String getName( ){ /* code here */ }
Date getHireDate( ) { /* code here */ }
void setName(String newName) { /* code here */ }
void setHireDate(Date newDate) { /* code here */
public
public
public
public
// everyone gets the same raise
public double calcRaise(
{ return 200.00; }
// toString and equals
String toString( ) { /* code here */ }
boolean equals(Employee otherEmployee)
public
public
{ /* code here */ }
} // end of Employee Class
صفحه 12:
)» (
کلاسهای مشتق شده
چون کارمند ساعتی نوعی از کارمند است, می گوییم که از کلاس
6 مشتق شده است.
© كلاس مشتق شده را می توان با اضافه كردن متد يا خصوصيت
به يك كلاس جارى تعريف نمود.
© كلاس مشتق شده از كلاس مبنا مشتق مى شود.
© هنكام تعريف كلاس مشتق شده بايد عبارت extends
5 استفاده شود.
public class HourlyEmployee extends Employee
صفحه 13:
HourlyEmployee كلاس
pe
Class Invariant: All objects have a name string, hire date,
nonnegative wage rate, and nonnegative number of hours worked. */
public class HourlyEmployee extends Employee
{
// instance variables unique to HourlyEmployee
private double wageRate;
private double hours; //for the month
// no-argument Constructor
public HourlyEmployee( ) { /* code here */}
// alternative constructor
public HourlyEmployee(String theName, Date theDate,
double theWageRate, double theHours) { /* code here */}
// copy constructor
public HourlyEmployee(HourlyEmployee originalHE) { /* code here */}
(continued)
صفحه 14:
کلاس ۲۱۵۱۲۱۲۳۱۴0۱0۲66
// accessors and mutator specific to HourlyEmployee
public double getRate( ) { /* code here
Public double getHiours( ) { /* code here
public wold Sethours (dauble HourswerKed) { /* code here
public void setRate(double newWageRate) { /* code here */ }
// toString and equals specific for HourlyEmployee
foblic String toStringt ) { /* code here
public boolean
equals(HourlyEmployee otherHE) { /* code here */ }
} // end of HourlyEmployee Class
صفحه 15:
زير كلاس
#به کلاس مشتق شده زیر کلاس هم می گویند.
© كلاس والد تحت اسم كلاس مبنا يا كلاس يايه نيز
شناخته د.
#زين كلاسن موارة زيؤرا | ز کلاس مبنا به ارث می برد:
کرد فتفيرهاى :عمومى. و يخصوصى استاتيكى
كلاس مشتقشده مى تواند متغيير,متغيير استاتيك و
متد د شته باشند
صفحه 16:
1 استفاده از ۲01076 ۲۲0
public class HourlyEmployeeExample
public static void main(String[] args)
HourlyEmployee joe
new HourlyEmployee(“Joe Worker", new Date(1, 1, 2004), 50.50, 160);
// getName is defined in Employee
رن name is
+ joe.getName( ));
// setName is defined in Employee
System.out.printLn("Changing joe's name to Josephine.");
joe. setName(" Josephine") ;
// setRate is specific for HourlyEmployee
System.out.println(“Giving Josephine a raise”
joe.setRate( 65.00 );
// calcRaise is defined in Employee
double raise = joe.calcRaise( );
System.out.println(“Joe’s raise is
+ raise );
صفحه 17:
بازنویسی یک متد
کلاس مشتق شده می تواند کلاسهای به ارث برده شده را بازنویسی
کند.
# برای بازنویسی یک متد, آن متد در کلاس مشتق شده دوباره تعریف
و پیاده می شود.
© بعنوان Gly | 93> Ges) HourlyEmployee 2S s Jk
محاسبه ی افزايش حقوق دارد. sre AN 0212153156( ) از كلاس
Employee را دوباره با نویسی می کند.
صفحه 18:
مثال بازنویسی
public double catcRaise( ) { return 200.00; }
1
public class HourlyEmployee extends Employee
3
// overriding calcRaise ~ sane signature as in Employee
public double calcRaise( ) {return 500.00; (
حالا کد:
HourlyEmployee joe = new HourlyEmployee( );
double raise = joe.calcRaise( );
cal cRaise we را از کلاس 1102111۵101۵۵ فراخوانی می کند.
جهت بازنویسی یک متد در کلاس مشتق شده, امضای متد در کلاس مشتق شده باید با امضای متد در کلاس پایه
-یکسان باک
صفحه 19:
بازنویسی و بارگذاری مجدد
#دقت کنید که بازنویسی و بارگذاری مجدد متد را با هم قاطی
در بازنویسی متد, امضای متد در کلاس مشتق شده با امضای
متد در کلاس پایه یکسان است.
#اما اگر امضای متدی در کلاس مشتق شده یا در کلاس Lah
امضای متد در كلاس يايه متفاوت باشد (اما اسم متدها
یکسان باشد), می گوییم که متد دوباره بازگذاری شده است.
#دقت کنید که در هر دو حالت, كلاس مشتق شده به متد
کلاس پایه دسترسی دارد و می تواند از آن استفاده کند.
صفحه 20:
>)
اصلاح کننده ی final
#اگر کلمه 1021 قبل از تعریف مند قرار گیرد, مند را نمی توان در
كلاسهاى مشتق شده بازنویسی کرد.
#اكر كلمه 8121 قبل از تعریف کلاس قرار گیرد, نمی توان از آن
کلاس اشتقاق نمود و ارث بری کرد.
صفحه 21:
استفاده از متغییرهای خصوصی کلاس پایه
در متدهاى كلاس مشتق شده, نمی توان
اسم فراخوانی کرد.
#یک شی HourlyEmployee ¢55 j! به متغییر 7612266 خصوصی
دسترسی ندارد اگر چه از کلاس پایه ی ۲0010166 ارث بری نموده است.
#اما با استفاده از متدهای 20665501 و 101112101 تعریف شده
در کلاس پایه, می توان در کلاس مشتق شده به متغییرهای
كلاس پایه دسترسی داشت.
خصوصی را با
#یک شی HourlyEmployee ¢¢5 j! با استفاده از متدهای
عادناهتاآاعع و ع26(آعسنآآاهه به متغییر 2۲612266 خصوصی
دسترسی دارد.
صفحه 22:
استفاده از متغییرهای خصوصی کلاس پایه ...
#اگر کلاس مشتق شده به متغییرهای خصوصی دسترسی
داشته باشد,
#هر کس که بخواهد اصول کپسوله سازی را نقض کند, می
تواند با استفاده از ورائت از روی کلاس پایه یک کلاس
مشتق شده بسازد و به متغییرهای خصوصی کلاس پایه
دسترسی داشته باشد.
#یعنی ممکن است به اشتباه یا عمدا متغییرهای خصوصی را
بصورت نادرست تغییر داد.
صفحه 23:
دلیل عدم ارث بری متدها در کلاسهای مشتق شده
متدهای خصوصی کلاس پایه نیز متل متغییرهای خصوصی قابل
ارث بری نیستند.
© متد خصوصى كاملاً غير قابل دسترسی است مگر این که بصورت
غير مستقيم صدا زده شود. ۳5
#یعنی ما متدی عمومی از کلاس پایه را صدا بزنیم و داخل آن متد یک
متد خصوصی کلاس پایه صدا زده شود.
کند زیرا متدهای خصوصی بعنوان
|e ضوع ایجاد اشکال نمی کند زیرا
Somat talons yall ext ae oe