ارثبری یکی از ویژگیهای اصلی برنامهنویسی شیگرا است. این فرآیند برنامهنویسی به شما امکان میدهد کد را با ارجاع به رفتارها و دادههای یک شیء دیگر مجدداً استفاده کنید. به عبارت دیگر، کلاسی که از کلاس دیگری ارثبری میکند، تمام ویژگیها (attributes) و متدهای (methods) کلاس مرجع را به اشتراک میگذارد.
کلاسی که ارثبری میکند، زیرکلاس یا کلاس فرزند نامیده میشود، و کلاسی که از آن ارثبری میشود، کلاس والد، ابرکلاس یا کلاس پایه نام دارد.
برخی زبانها مانند Go شیگرا هستند اما به جای ارثبری از ترکیب (Composition) استفاده میکنند. ترکیب روشی جایگزین است که به جای ارثبری، با جمعآوری سایر اشیاء، اشیاء پیچیده جدیدی ایجاد میکند. بیشتر زبانهای برنامهنویسی شیگرا هر دو روش ترکیب و ارثبری را پشتیبانی میکنند.
در این مقاله با عنوان شیگرایی چیست؟ با این مفهوم بطور کامل آشا می شوید.
ارثبری چیست؟
در ارثبری، "کلاس فرزند" رفتارها و ویژگیهای "کلاس والد" را به ارث میبرد. این کار باعث میشود برنامهنویسان بتوانند از قابلیتهای تعریفشده در کلاسهای دیگر استفاده کنند، بدون اینکه نیازی به بازنویسی آنها باشد.
به عنوان مثال، کلاس "حیوان" میتواند رفتارهایی مانند "راه رفتن" و "خوردن" را تعریف کند. کلاس "پرنده" با ارثبری از "حیوان" میتواند این رفتارها را دریافت کرده و ویژگیهایی مثل "پرواز کردن" را نیز اضافه کند. این فرآیند، طراحی کد را سازمانیافتهتر میکند.
چگونه ارثبری توسعه را آسانتر میکند
ارثبری یکی از عناصر اصلی برنامهنویسی شیگرا است که به عنوان ابزاری قدرتمند برای استفاده مجدد از کد عمل میکند. اجازه دهید با یک مثال نشان دهیم که چگونه استفاده از ارثبری میتواند ساخت یک برنامه را آسانتر کند.
فرض کنید در حال طراحی یک بازی ویدیویی هستید که در آن بازیکنان میتوانند وسایل نقلیه را برانند. شما میخواهید انواع زیادی از وسایل نقلیه، از جمله کوپهها، سدانها، کامیونها، خودروهای چهارچرخ محرک و حتی شاید چند هواپیما را اضافه کنید.
اگر با برنامهنویسی شیگرا تا حدودی آشنا باشید، ممکن است به این فکر کنید که همه این وسایل نقلیه را بهعنوان اشیاء (Objects) تعریف کنید. میتوانید برای هر یک از انواع وسایل نقلیه که میخواهید، یک کلاس ایجاد کرده و تمام عملکردها و دادههای مورد نیاز برای آن وسیله نقلیه را در کلاس قرار دهید.
انواع ارثبری در برنامهنویسی
1. ارثبری یگانه یا تکی (Single Inheritance)
در این نوع، کلاس فرزند تنها از یک کلاس والد ارث میبرد. این روش بسیار متداول است و در بسیاری از زبانهای برنامهنویسی پشتیبانی میشود.
مثال:
class Parent {
public void Display() {
Console.WriteLine("This is the parent class.");
}
}
class Child : Parent {
public void Show() {
Console.WriteLine("This is the child class.");
}
}
در این مثال، کلاس "Child" از ویژگیها و متدهای "Parent" استفاده میکند و متدهای جدیدی به آن اضافه شده است.
2. ارثبری چندگانه (Multiple Inheritance)
در ارثبری چندگانه، یک کلاس فرزند میتواند از چند کلاس والد ویژگی دریافت کند. این قابلیت در زبانهایی مثل ++c وجود دارد اما در زبانهایی مانند #c و Java از واسطها (Interfaces) برای جایگزینی این روش استفاده میشود.
مثال در ++c :
class A {
public:
void DisplayA() {
cout << "This is class A" << endl;
}
};
class B {
public:
void DisplayB() {
cout << "This is class B" << endl;
}
};
class C : public A, public B {
public:
void DisplayC() {
DisplayA();
DisplayB();
}
};
کلاس "C" ترکیبی از ویژگیهای دو کلاس والد "A" و "B" را به ارث میبرد.
3. ارثبری چندسطحی (Multilevel Inheritance)
در این ساختار، یک کلاس فرزند از کلاس والد ارث میبرد و سپس خود به عنوان کلاس والد دیگری مورد استفاده قرار میگیرد. این نوع ارثبری برای سیستمهای سلسلهمراتبی مناسب است.
مثال:
class GrandParent {
public void Display() {
Console.WriteLine("This is the grandparent class.");
}
}
class Parent : GrandParent {
public void Show() {
Console.WriteLine("This is the parent class.");
}
}
class Child : Parent {
public void Print() {
Console.WriteLine("This is the child class.");
}
}
در این مثال، ویژگیها و رفتارها از "GrandParent" به "Parent" و سپس به "Child" منتقل شدهاند.
4. ارثبری ترکیبی (Hybrid Inheritance)
این نوع ارثبری ترکیبی از چندین نوع ارثبری است، مانند ارثبری چندگانه و چندسطحی. این ساختار در زبانهایی مثل ++c امکانپذیر است.
ارثبری ترکیبی شامل استفاده از بیش از یک نوع دیگر از ارثبری است. هنگامی که با ارثبری به خوبی آشنا شوید و روی برنامههای پیچیده کار کنید، احتمالاً این نوع از ارثبری را بیشتر از سایر انواع برای دستیابی به نتایج مورد نظر خود استفاده خواهید کرد.
مثال:
class A {
public:
void DisplayA() {
cout << "Class A" << endl;
}
};
class B {
public:
void DisplayB() {
cout << "Class B" << endl;
}
};
class C : public A {
public:
void DisplayC() {
cout << "Class C inherits from A" << endl;
}
};
class D : public A, public B {
public:
void DisplayD() {
DisplayA();
DisplayB();
cout << "Class D inherits from A and B" << endl;
}
};
int main() {
D obj;
obj.DisplayD();
return 0;
}
ارثبری در زبانهای برنامهنویسی مختلف
ارث بری در سی شارپ:
در زبان #c، ارثبری یگانه به طور کامل پشتیبانی میشود. برای شبیهسازی ارثبری چندگانه، از واسطها استفاده میشود که امکان اضافه کردن رفتارهای متعدد به کلاسها را بدون ایجاد وابستگی فراهم میکند.
در دوره آموزش سی شارپ سطح متوسط مفهوم ارث بری در سی شارپ را به خوبی و به زبان ساده آموزش داده ایم،اگر علاقمند به یادگیری سی شارپ هستید این دوره را حتما ببینید.
مثال:
interface IA {
void MethodA();
}
interface IB {
void MethodB();
}
class MyClass : IA, IB {
public void MethodA() {
Console.WriteLine("Implementation of MethodA");
}
public void MethodB() {
Console.WriteLine("Implementation of MethodB");
}
}
ارث بری در Java:
ارثبری در جاوا نیز به همین صورت عمل میکند. ارثبری یگانه به طور مستقیم پشتیبانی میشود و برای ارثبری چندگانه از واسطها استفاده میشود.
مثال:
interface A {
void methodA();
}
interface B {
void methodB();
}
class MyClass implements A, B {
public void methodA() {
System.out.println("Implementation of methodA");
}
public void methodB() {
System.out.println("Implementation of methodB");
}
}
ارث بری در زبان ++C:
در ++C ارثبری چندگانه به صورت کامل پشتیبانی میشود، اما ممکن است مشکلاتی در مدیریت متدها ایجاد کند که نیازمند دقت بیشتر برنامهنویس است.
مثال:
class A {
public:
void Display() {
cout << "Class A" << endl;
}
};
class B {
public:
void Display() {
cout << "Class B" << endl;
}
};
class C : public A, public B {
public:
void DisplayC() {
A::Display();
B::Display();
}
};
Python
پایتون ارثبری چندگانه را به خوبی مدیریت میکند و از الگوریتم ترتیب متد (MRO) برای حل تضادها استفاده میکند.
مثال:
class A:
def display(self):
print("Class A")
class B:
def display(self):
print("Class B")
class C(A, B):
pass
c = C()
c.display()
مزایا و معایب ارثبری
مزایا
کاهش تکرار کد با استفاده مجدد از کدهای موجود.
بهبود ساختار و خوانایی کد.
قابلیت گسترش آسان با افزودن ویژگیهای جدید به کلاسها.
معایب
ممکن است کد پیچیدهتر شود.
وابستگی زیاد میان کلاسها میتواند مشکلاتی ایجاد کند.
ارثبری چندگانه ممکن است تضادهایی در مدیریت متدها ایجاد کند.
ارثبری ابزاری قدرتمند برای سادهسازی توسعه است، اما استفاده درست از آن نیازمند طراحی دقیق و درک صحیح مفاهیم شیءگرایی است.
برای افزودن دیدگاه خود، نیاز است ابتدا وارد حساب کاربریتان شوید