ورود و عضویت
0
سبد خرید شما خالی است
0
سبد خرید شما خالی است

آموزش شی گرایی در زبان دارت: ارث بری

2 دیدگاه
10 دقیقه برای مطالعه

در مطلب قبلی با برنامه نویسی شی گرایی و مفهوم کلاس آشنا شدیم و در این مطلب میخواهیم با هم دیگه وارد بخش ارث بری از شی گرایی شویم.

ارث بری (Inheritance) یکی از مفاهیم اصلی برنامه‌نویسی شی گرا است که به برنامه‌نویسان این امکان را می‌دهد تا یک کلاس جدید را با توجه به یک کلاس موجود تعریف کنند و از ویژگی‌های آن کلاس بهره‌مند شوند و بتوانند تغییراتی را نیز در آن اعمال کنند.

به عبارت دیگر، این به برنامه‌نویسان اجازه می‌دهد تا کلاس‌های جدید را بر اساس کلاس‌های موجود، با استفاده از ویژگی‌های مشترک، ایجاد کنند.

مفهوم ارث بری در برنامه نویسی شی گرایی

ارث‌بری یکی از مفاهیم کلیدی در برنامه‌نویسی شی‌گرا (Object-Oriented Programming) است که به برنامه‌نویسان اجازه می‌دهد کدها و ویژگی‌های مشابه را میان کلاس‌ها به اشتراک بگذارند و به سادگی کدها را مدیریت و گسترش کنند.

در برنامه‌نویسی شی‌گرا، می‌توان یک کلاس جدید را از یک کلاس موجود به ارث برد.

کلاس موجود که از آن ارث‌بری می‌شود، به “کلاس پدر” یا “کلاس اصلی” (Parent Class / Base Class) معروف است و کلاس جدید که از آن ارث‌بری می‌شود به “کلاس فرزند” یا “کلاس مشتق” (Child Class / Derived Class) معروف است.

مفهوم ارث‌بری به برنامه‌نویسان امکان می‌دهد که ویژگی‌ها (متغیرها) و رفتارها (متدها) را از کلاس پدر به کلاس فرزند منتقل کنند و بدون تکرار کدها، کلاس‌هایی با ویژگی‌ها و رفتارهای مشابه ایجاد کنند.

ارث بری در برنامه نویسی تقریبا با مفهوم ارث بری در دنیای ما انسان ها و موجودات زنده یکی هست. یعنی همه ما یک سری از ویژگی های ظاهری و اخلاقی خودمون و از پدر و مادر خودمون به ارث میبریم.

در اینجا هم ما یک سری کلاس های والدین داریم و یک سری کلاس های فرزند که این کلاس های فرزند ویژگی های کلاس  والدین را به ارث میبرند و در کنارش خودشون میتونند یک سری ویژگی های جدید تر نیز داشته باشند.

برای آموزش کامل مباحث شی گرایی میتوانید از دوره آموزش فلاتر استفاده کنید.

فواید استفاده از ارث بری در شی گرایی

فواید اصلی ارث‌بری عبارتند از:

  1. بهبود قابلیت استفاده مجدد (Reuseability): با استفاده از ارث‌بری، کدها و ویژگی‌ها می‌توانند در چندین کلاس مورد استفاده قرار گیرند، این امر باعث کاهش تکرار کدها و افزایش قابلیت استفاده‌ی مجدد آن‌ها می‌شود.
  2. ابرکلاس‌ها (Superclasses) و زیرکلاس‌ها (Subclasses): با استفاده از ارث‌بری، می‌توان کلاس‌های عمومی‌تر (ابرکلاس‌ها) را تعریف کرد و کلاس‌های مشتق‌شده‌ای (زیرکلاس‌ها) ایجاد کرد که ویژگی‌ها و رفتارهای خاص خود را داشته باشند.
  3. استفاده از ویژگی‌ها و رفتارهای اصلی: با ارث‌بری، می‌توان از ویژگی‌ها و رفتارهای اصلی کلاس پدر به کلاس فرزند دسترسی داشت و بر آن‌ها تغییرات اعمال کرد.
  4. پله‌کاری (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 به محتویات ذخیره شده در این ویژگی از کلاس والد دسترسی پیدا کردیم.

برای مطالعه بیشتر میتوانید از آموزش های زبان برنامه نویسی دارت استفاده نمایید.

2 پاسخ به “آموزش شی گرایی در زبان دارت: ارث بری”

  1. artindev گفت:

    میشه درمورد ستر و گتر ها یکم حرف بزنید؟

    • Hesam گفت:

      سلام, این مطلب بصورت کامل داخل دوره آموزشی توضیح داده شده, به طور خلاصه وقتی فیلد های کلاس ما از نوع پرایوت هستند برای دسترسی به آنها و یا تغییر مقدار آنها از گتر و ستر استفاده میکنیم

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

Hesam
21 آوریل 2023
آموزش فارسی فلاتر
آموزش فارسی flutter