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

مدیر وبلاگ :