وراثت(Inheritance)
ارث بری از مفاهیم اساسی برنامه نویسی شیء گرا می باشد. برای مثال می توان اتومبیلی را در نظر گرفت که برای جلوگیری از بازنویسی خواص عمومی اتومبیل برای هر نوع اتومبیل مانند پراید, پیکان و ... شامل : چرخ ها, فرمان, متد حرکت چرخ ها, متد چرخاندن فرمان و ... , می توان یک کلاس عمومی و پایه از اتومبیل ایجاد کرد. سپس برای اتومبیل مثلا زانتیا یک کلاس جدید ایجاد کرد که فقط برای خواص و متد ها و رویداد های جدید مخصوص به این اتومبیل کد نویسی انجام داد.
اگر از وراثت استفاده شود, نگهداری کد ها و اطلاعات در ساختارهای سلسله مراتبی قابل مدیریت می شود. زمانیکه ما از وراثت صحبت می کنیم از کلمات کلیدی extends و implements استفاده می کنیم. این دو کلمه تعیین می کنند که آیا یک Object از یک نوع Object دیگر است یا خیر(is-a type of another) ؟
در حقیقت این دو کلمه می گویند : این شیء یا کلاس , یک نوع از شیء یا کلاس دیگر است.
به عبارت دیگر : وراثت یک فرم استفاده مجدد از نرم افزار می باشد که در آن یک کلاس جدید بوسیله جذب کردن اعضاء کلاس موجود(کلاس پدر) ساخته می شود و افزایش می دهد آن ها را با قابلیت های جدید و تغییر یافته. وراثت یک رابطه از نوع is-a می باشد.
is-a Relationship : یک رابطه is-a وراثت را نمایش می دهد. یک Object از یک کلاس مشتق شده(از کلاس پدر(پایه(Super Class)) ارث بری کرده است), می تواند همچنین بعنوان یک Object از کلاس پایه اش(کلاس پدر ) هم تلقی شود.
با وراثت می توان زمان توسعه برنامه را با کد های اشکال زدایی شده و اثبات شده کاهش داد و نرم افزار با کیفیت بالا ایجاد کرد.
حال یک مثال را بررسی می کنیم :
با توجه به مثال بالا مفاهیم زیر نیز صدق می کنند :
- · کلاس Animal بعنوان کلاس Super Class(پایه) کلاس Mammal و Reptile می باشد.
- · کلاس Mammal و Reptile بعنوان یک Sub Class از کلاس Animal می باشد.
- · کلاس Dog بعنوان یک Sub Class از کلاس های Mammal و Animal می باشد.
- · با کلمه کلیدی extends , Sub Class ها(زیر کلاس ها) قادر خواهند بود همه اعضای Super Class را به شرط اینکه Private(خصوصی) نباشند را به ارث ببرند(مشتق شوند).
بنابراین :
- · Mammal IS-A Animal
- · Reptile IS-A Animal
- · Dog IS-A Mammal
- · Dog IS-A Animal
در مقابل رابطه is-a یک رابطه دیگر با نام has-a(ترکیب یا همان Composition) داریم. از طریق این رابطه در داخل یک کلاس می توان یک Object از یک کلاس دیگر درست کرد و از متد ها و اعضای آن کلاس داخل کلاس جاری هم استفاده کرد.
نتیجه گیری :
* هر زمان بین دو یا چند کلاس متد ها و فیلد های مشترک وجود داشت, باید این اعضای مشترک را فاکتور گیری
کرد و به کلاس پدر منتقل کرد و کلاس های فرزند از آن ارث بری کنند.
* وراثت باعث Reusability می شود(کم شدن خطای برنامه نویسی).
* اعضای Private یک کلاس به ارث برده نمی شوند.
* کلاس فرزند می تواند علاوه بر متد ها و Instance Variable هایی که به ارث می برد , متد ها و
Instance Variable های مختص به خودش را هم داشته باشد.
* سلسله مراتب وراثت می تواند چند لایه باشد.
* در جاوا فقط وراثت تکی داریم(برعکس C++ که وراثت چندگانه داریم), یعنی فقط از یک کلاس می توانیم ارث بری
کنیم.
* سازنده(Constructor) کلاس پدر توسط کلاس های فرزند به ارث برده نمی شوند.
اگر قبلا در بیان ثبت نام کرده اید لطفا ابتدا وارد شوید، در غیر این صورت می توانید ثبت نام کنید.