. . . . . . . . Mohammad Mohsen Mavaddat . . . . . . .

برنامه نویسی شی گرا - قسمت سوم

چهارشنبه 6 مرداد 1389-01:19 ب.ظ

ارث بری : وراثت به زبان ساده  یعنی بنا کردن یک کلاس جدید بر اساس کلاسی دیگر


روش های ارتباط بین اشیاء را به دودسته کلی می توان تقسیم کرد

  1.  فراخوانی متد های تعریف شده در رابط عمومی شیء (use)
  2.  ارث بری

مورد 1  یا همان استفاده از رابط عمومی، روش هایی مثل مالکیت ( تعریف یک شیء در کلاس دیگر ) و یا ترکیب ( تعریف چند شی در یک کلاس به عنوان اجزاء تشکیل دهنده کلاس جدید ) را هم شامل می شود

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

  • با جایگزینی ( override ) متد های محافظت شده، می توان بدون تغییر در کد اصلی رفتار متد را برای فرزند تغییر داد
  • وراثت امکان دسته بندی اشیاء را به خوبی فراهم می کند
  • همیشه قبل از ارث بری قانون همانی ( مثلا شیر یک گربه سان است ) را بررسی کرده و در صورت صحیح بودن از ارث بری استفاده کنید
  • کلاس مشتق سه گونه خواص و روال دارد
  1. اصلی ( که همان پیاده سازی پدر را دارد )
  2. تغییر کرده ( override شده )
  3. جدید
  • هیچ گاه خواص و روال های خصوصی کلاس را فقط برای کاربردهای احتمالی، محافظت شده تعریف نکنید
  • در صورت تغییر یک متد در فرزند هنوز هم می توان با کلمه کلیدی super در جاوا به متد پدر یا والد های بالاتر دسترسی داشت
  • از وراثت تنها جهت استفاده مجدد کد استفاده نکنید و رابطه همانی را در نظر داشته باشید
  • سلسله مراتب وراثت را بی جهت طولانی و پیچیده نکنید
  • هر جایی که پدر می تواند باشد، فرزند هم می تواند باشد ، مثلا جایی که گربه سان نیاز است شیر هم می تواند آنجا باشد چون شیر یک گربه سان است
  • با توجه به خاصیت ارث بری می توان اشیاء Generic تعریف کرد که طیف وسیعی از اشیاء را پوشش دهند
  • در برخی موارد لازم است موارد مشترک را در کلاس های مجرد Abstract  تعریف کنید و پیاده سازی را به عهده کلاس های مشتق شده بگذارید
  • سعی کنید هیچ گاه کد تکراری نداشته باشید، برای این منظور از ترکیب اشیاء و ارث بری استفاده کنید

اهداف وراثت :

  1. استفاده مجدد از کد و پیاده سازی والد
  2. ایجاد تغییر و ایجاد اشیاء جدید
  3. امکان جایگزینی فرزند به جای والد

به طور مثال صف و پیماینده ( Que و Iterator ) را در نظر بگیرید . اگر چه پیماینده متد های مشابهی با صف دارد اما یک صف نیست ! مثلا امکان افزودن آیتم به صف وجود دارد اما پیماینده چنین امکانی ندارد . پس تنها جهت استفاده از پیاده سازی صف در پیماینده، ارث بری جایز نیست .
در اینجا باید از ترکیب استفاده شود و یک صف در کلاس پیماینده  به طور کنترل شده ای استفاده شود .


نوع مطلب : مهندسی نرم افزار 










ساخت وبلاگ در میهن بلاگ

شبکه اجتماعی فارسی کلوب | اخبار کامپیوتر، فناوری اطلاعات و سلامتی مجله علم و فن | ساخت وبلاگ صوتی صدالاگ | سوال و جواب و پاسخ | رسانه فروردین، تبلیغات اینترنتی، رپرتاژ، بنر، سئو