جلسه 7وراثت
تیتر: وراثت: اساس بازاستفاده از کد و ایجاد سلسله مراتب
توضیحات:
وراثت یکی از مفاهیم کلیدی در برنامهنویسی شیءگرا است که به کلاسها اجازه میدهد تا ویژگیها (متغیرها) و رفتارها (متدها) را از کلاسهای دیگر به ارث ببرند. این مفهوم، پایهای برای ایجاد سلسله مراتب کلاسها و ترویج اصل “بازاستفاده از کد” (Code Reusability) است.
در وراثت، کلاسی که ویژگیها را به ارث میبرد، “کلاس فرزند” (Child Class) یا “کلاس مشتق شده” (Derived Class) نامیده میشود و کلاسی که ویژگیها را به ارث میدهد، “کلاس والد” (Parent Class) یا “کلاس پایه” (Base Class) نامیده میشود. کلاس فرزند علاوه بر ویژگیهای به ارث رسیده از والد، میتواند ویژگیها و رفتارهای منحصر به فرد خود را نیز داشته باشد.
مزایای اصلی وراثت:
- بازاستفاده از کد: از تکرار کدنویسی جلوگیری میکند. کلاسهای والد میتوانند منطق مشترک را در خود جای دهند و کلاسهای فرزند از آن استفاده کنند.
- ایجاد سلسله مراتب: به سازماندهی کد در قالب یک ساختار منطقی و سلسله مراتبی کمک میکند (مانند دستهبندی موجودیتها).
- قابلیت توسعهپذیری (Extensibility): امکان افزودن قابلیتهای جدید به کلاسهای موجود بدون تغییر دادن کد اصلی آنها وجود دارد.
- پلیمورفیسم (Polymorphism): وراثت یکی از پیشنیازهای اصلی برای پیادهسازی پلیمورفیسم است که امکان رفتار متفاوت اشیاء از کلاسهای مختلف را در پاسخ به یک فراخوانی یکسان فراهم میکند.
انواع وراثت (که در زبانهای مختلف متفاوت است):
- وراثت تکی (Single Inheritance): یک کلاس فرزند فقط از یک کلاس والد ارث میبرد.
- وراثت چندتایی (Multiple Inheritance): یک کلاس فرزند میتواند از چندین کلاس والد ارث ببرد. (برخی زبانها مانند جاوا از آن پشتیبانی نمیکنند یا با واسطها پیادهسازی میشود).
- وراثت چندسطحی (Multilevel Inheritance): کلاس A والد B، و B والد C باشد (A -> B -> C).
- وراثت سلسله مراتبی (Hierarchical Inheritance): یک کلاس والد دارای چندین کلاس فرزند باشد.
مثال:
فرض کنید در حال طراحی یک سیستم برای مدیریت حیوانات هستیم. میتوانیم یک کلاس والد به نام Animal تعریف کنیم که دارای متدهایی مانند eat() و sleep() باشد. سپس کلاسهای فرزند مانند Dog و Cat را تعریف کنیم که از Animal ارث ببرند. این کلاسهای فرزند به طور خودکار متدهای eat() و sleep() را خواهند داشت و میتوانند متدهای مخصوص خود مانند bark() برای Dog و meow() برای Cat را نیز اضافه کنند.
تمرین پایان فصل:
- یک کلاس والد به نام
Vehicleبا متدهایی مانندstart_engine()وstop_engine()ایجاد کنید. - دو کلاس فرزند به نامهای
CarوMotorcycleازVehicleارث ببرند. - برای هر کلاس فرزند، یک متد مخصوص به خود اضافه کنید (مثلاً
drive()برایCarوlean()برایMotorcycle). - در تابع اصلی برنامه، نمونههایی از
CarوMotorcycleبسازید و متدهای والد و فرزند را فراخوانی کنید.
خلاصه نکات کلیدی:
- وراثت امکان اشتراکگذاری کد و ایجاد سلسله مراتب کلاس را فراهم میکند.
- کلاس والد (Base) و کلاس فرزند (Derived) اجزای اصلی وراثت هستند.
- مزایای اصلی شامل بازاستفاده از کد، قابلیت توسعه و پلیمورفیسم است.
- بسته به زبان برنامهنویسی، انواع مختلفی از وراثت (تکی، چندتایی، چندسطحی) پشتیبانی میشود.