آموزش شی گرایی در زبان دارت: ارث بری
در مطلب قبلی با برنامه نویسی شی گرایی و مفهوم کلاس آشنا شدیم و در این مطلب میخواهیم با هم دیگه وارد بخش ارث بری از شی گرایی شویم.
ارث بری (Inheritance) یکی از مفاهیم اصلی برنامهنویسی شی گرا است که به برنامهنویسان این امکان را میدهد تا یک کلاس جدید را با توجه به یک کلاس موجود تعریف کنند و از ویژگیهای آن کلاس بهرهمند شوند و بتوانند تغییراتی را نیز در آن اعمال کنند.
به عبارت دیگر، این به برنامهنویسان اجازه میدهد تا کلاسهای جدید را بر اساس کلاسهای موجود، با استفاده از ویژگیهای مشترک، ایجاد کنند.
مفهوم ارث بری در برنامه نویسی شی گرایی
ارثبری یکی از مفاهیم کلیدی در برنامهنویسی شیگرا (Object-Oriented Programming) است که به برنامهنویسان اجازه میدهد کدها و ویژگیهای مشابه را میان کلاسها به اشتراک بگذارند و به سادگی کدها را مدیریت و گسترش کنند.
در برنامهنویسی شیگرا، میتوان یک کلاس جدید را از یک کلاس موجود به ارث برد.
کلاس موجود که از آن ارثبری میشود، به “کلاس پدر” یا “کلاس اصلی” (Parent Class / Base Class) معروف است و کلاس جدید که از آن ارثبری میشود به “کلاس فرزند” یا “کلاس مشتق” (Child Class / Derived Class) معروف است.
مفهوم ارثبری به برنامهنویسان امکان میدهد که ویژگیها (متغیرها) و رفتارها (متدها) را از کلاس پدر به کلاس فرزند منتقل کنند و بدون تکرار کدها، کلاسهایی با ویژگیها و رفتارهای مشابه ایجاد کنند.
ارث بری در برنامه نویسی تقریبا با مفهوم ارث بری در دنیای ما انسان ها و موجودات زنده یکی هست. یعنی همه ما یک سری از ویژگی های ظاهری و اخلاقی خودمون و از پدر و مادر خودمون به ارث میبریم.
در اینجا هم ما یک سری کلاس های والدین داریم و یک سری کلاس های فرزند که این کلاس های فرزند ویژگی های کلاس والدین را به ارث میبرند و در کنارش خودشون میتونند یک سری ویژگی های جدید تر نیز داشته باشند.
برای آموزش کامل مباحث شی گرایی میتوانید از دوره آموزش فلاتر استفاده کنید.
فواید استفاده از ارث بری در شی گرایی
فواید اصلی ارثبری عبارتند از:
- بهبود قابلیت استفاده مجدد (Reuseability): با استفاده از ارثبری، کدها و ویژگیها میتوانند در چندین کلاس مورد استفاده قرار گیرند، این امر باعث کاهش تکرار کدها و افزایش قابلیت استفادهی مجدد آنها میشود.
- ابرکلاسها (Superclasses) و زیرکلاسها (Subclasses): با استفاده از ارثبری، میتوان کلاسهای عمومیتر (ابرکلاسها) را تعریف کرد و کلاسهای مشتقشدهای (زیرکلاسها) ایجاد کرد که ویژگیها و رفتارهای خاص خود را داشته باشند.
- استفاده از ویژگیها و رفتارهای اصلی: با ارثبری، میتوان از ویژگیها و رفتارهای اصلی کلاس پدر به کلاس فرزند دسترسی داشت و بر آنها تغییرات اعمال کرد.
- پلهکاری (Polymorphism): ارثبری امکان پلهکاری را فراهم میکند، به این معنا که میتوان از یک نام (متد یا عملیات) مشترک در کلاسهای مختلف استفاده کرد و به تعداد زیادی از کلاسها دسترسی داشت.
برای مثال، فرض کنید که ما یک کلاس اصلی به نام “حیوان” داریم که دارای ویژگیهایی مثل “نوع” و “رنگ” است. حالا میتوانیم کلاسهای مشتق شدهای مثل “گربه” و “سگ” ایجاد کنیم که همه ویژگیها و رفتارهای کلاس حیوان را دارند.
پیاده سازی ارث بری در زبان برنامه نویسی دارت
برای درک بهتر موضوع کلاس Car مثال مطلب قبلی و با استفاده از شی گرایی مینویسیم.
میدونیم که اتوموبیل, موتور, کامیون و… همگی یک نوع وسیله نقلیه به حساب می آیند پس در یک سری ویژگی ها مشترک هستند به همین دلیل ما هم کلاسی تحت عنوان Vehicle که به معنی وسیله نقلیه هست ایجاد می کنیم و ویژگی های مشترک را در آن قرار میدهیم.
class Vehicle{
int _wheel;
int _seat;
Vehicle(int seat,int wheel) {
this._wheel = wheel;
this._seat = seat;
}
void getInfo()
{
print("wheels $_wheel , seat: $_seat");
}
}
کلاس بالا دوتا ویژگی داره که تعداد صندلی و تعداد چرخ های وسیله و مشخص می کنه و یک متد داره که این مشخصان و نمایش میده.حالا یک کلاس به نام Car میسازیم که از کلاس Vehicle ارث بری کند.
class Car extends Vehicle{
String name;
String Brand;
int speed;
int _Price;
Car(String name,String Brand,int speed,int price,int seat,int wheel) : super(wheel, seat) {
this.name=name;
this.Brand=Brand;
this.speed=speed;
this._Price=price;
}
بعد از نوشتن اسم کلاس از دستور extends برای ارث بری استفاده می کنیم و با این کار کلاس Car به تمام ویژگی ها و متد های Vehicle دسترسی دارد.
کلاس Vehicle دارای یک متد سازنده با دو پارامتر هست به همین خاطر در متد سازنده کلاس Car از دستور super استفاده میکنیم تا متد سازنده کلاس والد یا همان Vehicle صدا زده شود.
main(List<String> arguments ){
Car mycar = new Car("Pride","Saipa",120,520000,2,3);
mycar.getInfo();
}
خروجی مثال بالا به شکل زیر است.
wheels 2 , seat: 3
بازنویسی متد Override
در شی گرایی مفهومی داریم به نام override که باهم دیگه به بررسی آن میپردازیم.
در مثال بالا کلاس والد ما یک متد به نام getInfo() داشت که بخشی از اطلاعات آبجکت را نمایش میداد.
حالا اگر در کلاس فرزند بخواهیم متدی به این نام داشته باشیم باید بیایم و از مفهوم override استفاده کنیم و این متد را دوباره باز نویسی کنیم چون قبلا وجود داشته است.
برای override یک متد به شکل زیر عمل میکنیم.
class Car extends Vehicle{
String name;
String Brand;
int speed;
int _Price;
Car(String name,String Brand,int speed,int price,int seat,int wheel) : super(wheel, seat) {
this.name=name;
this.Brand=Brand;
this.speed=speed;
this._Price=price;
}
@override
void getInfo() {
print("Car wheels: $_wheel ");
}
حالا یکبار دیگه کدمون و اجرا میکنیم و تفاوت خروجی را مشاهده میکنیم.
خروجی برنامه:
Car wheels: 2
کلمه کلیدی Super
از کلمه کلیدی super در بحث شی گرایی برای اشاره به نمونه کلاس والد استفاده میشود.
این قابلیت کمک میکند تا متد و ویژگی های کلاس والد را بتوانید به وسیله نمونه ای از کلاس فرزند فراخوانی کنید.
به مثال زیر توجه کنید:
class SuperGeek {
String geek = "Geeks for Geeks";
}
class SubGeek extends SuperGeek {
void printInfo()
{
print(super.geek);
}
}
void main()
{
SubGeek geek = new SubGeek();
geek.printInfo();
}
خروجی کد بالا به صورت زیر خواهد بود:
Geeks for Geeks
در متد printInfo از کلاس فرزند با کمک دستور super.geek به محتویات ذخیره شده در این ویژگی از کلاس والد دسترسی پیدا کردیم.
برای مطالعه بیشتر میتوانید از آموزش های زبان برنامه نویسی دارت استفاده نمایید.
مطالب زیر را حتما مطالعه کنید
ساخت اولین پروژه زبان برنامه نویسی دارت Dart
آموزش کار با لیست و آرایه در زبان برنامه نویسی دارت Dart
برنامه نویسی شی گرایی در زبان دارت: مفهوم کلاس
آشنایی با مفهوم Mixin در زبان برنامه نویسی دارت
آشنایی با اینترفیس در برنامه نویسی دارت
آشنایی با الگوی طراحی Singleton
2 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
میشه درمورد ستر و گتر ها یکم حرف بزنید؟
سلام, این مطلب بصورت کامل داخل دوره آموزشی توضیح داده شده, به طور خلاصه وقتی فیلد های کلاس ما از نوع پرایوت هستند برای دسترسی به آنها و یا تغییر مقدار آنها از گتر و ستر استفاده میکنیم