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

برنامه نویسی شی گرا متد قالب هر زبان برنامه نویسی است و اگر وارد هر زبانی بشین باید اون رو یاد بگیرید چون ابزار ها و فریم ورک هایی که برای اون زبان به وجود میان از این متد استفاده میکنن

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

 

برای درک بهتر این موضوع کلاس را یک نقشه ساختمان در نظر بگیرید و خونه هایی که طبق این نقشه ساخته میشن رو شی در نظر بگیرید . با استفاده از این نقشه میشه هزارتا خونه در جاهای مختلف ساخت که شاید یکی رنگ دیوار هاش فرق کنه یکی کابینت هاش ولی بیس اصلی خونه یک چیز هست . برای درک بهتر این موضوع به کد های زیر توجه کنید 

class Map {
  String wall;
  String window;

  void changeWindowColor(String color){
    this.window  = color;
  }

}

برای تعریف یک کلاس درست مانند مثال بالا از کلمه کلیدی class استفاده میکنیم . خب همون طور که میبینید ما امدیم یک کلاس به اسم Map رو ساختیم و توی این کلاس ما یک سری ویژگی های پیش فرض مانند رنگ دیوار ها و رنگ پنجره ها رو اضافه کردیم .

 

حالا میایم و از این کلاس یک شی رو به وجود میاریم که این شی در واقع همون خونه ما میشه که طبق این نقشه ساخته میشه

void main() {
  var map = new Map();
  map.windowColor = "blue";
  print(map.windowColor);
}

 در بالا با استفاده از کلمه کلیدی new قبل از اسم کلاس یک شی از اون کلاس به وجود اوردم . در خط بعد من به ویژگی رنگ پنجره ها اشاره کردم با نوشتن اسم شی که به وجود اوردم و قرار دادن دات و نوشتن نام اون ویژگی و اون رو برابر با رنگ آبی قرار دادم و در خط بعد اون رو نمایش دادم . همون طور که میبینید ما خیلی راحت میتونیم به وژگی های کلاسمون دسرسی داشته باشیم و اون هارو بر اساس نیازمون تغییر بدیم .

 

متد سازنده

در شی گرایی ما یک سری متد داریم به اسم متد سازنده (کانستراکتور Constructor) به متدهایی که هم نام کلاس باشند متد سازنده میگیم. اگر متد سازنده ای تعریف نکنیم بصورت پیش فرض یک متد سازنده خالی برای ما فرض می شود به شکل زیر

class Map {
  String wallColor;
  String windowColor;

  Map(){
    
  }
}

 

اما یکی از کارهای مهمی که با این متد انجام می شود مقداردهی ویژگی های کلاس ما هست. فرض کنید ما ده تا ویژگی داره کلاسمون و موقع ساخت آبجکت برای اینکه این ویژگی ها را مقداری دهی کنیم باید ده بار متد های مختلف Set و صدا بزنیم, این کار و میتونیم در Constructor به راحتی انجام بدیم به مثال زیر توجه کنید .

void main() {
  var map = new Map('blue' , 'red');
  map.windowColor = "blue";
  print(map.windowColor);
}

class Map {
  String wallColor;
  String windowColor;

  Map(window , wall){
    this.windowColor = window;
    this.wallColor = wall;
  }
}

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

 

ما میتونیم متد سازنده خومون رو کوتاه تر کنیم و بهینه تر اون رو بنویسیم به شکل زیر 

class Map {
  String wallColor;
  String windowColor;

  Map(this.wallColor , this.windowColor);
}

همون طور که میبینید با این مقدار کد در واقع داره همون کارو انجام میده پس سعی کنیم همیشه متد سازنده خومون رو به این شکل بسازیم .

ویژگی هایی که در بالا برای کلاس تعریف کردیم از نوع Public هستند به همین خاطر به صورت مستقیم با صدا زدن نام آبجکت میتونیم به اون ها دسترسی داشته باشیم. اما میتونیم این ویژگی هارو از نوع Private تعریف کنیم که فقط با استفاده از متد هایی به نام Getter و Setter بتونیم برای اونها مقادیر جدید قرار بدیم.  در زبان دارت برای اینکه یک متغیر و به شکل Private تعریف کنیم باید قبل از اسم متغیر از _ استفاده کنیم.

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

class Map {
  String wallColor;
  String windowColor;
  String _door;

  void setDoor(String door){
      this._door = door;
  }

  String getDoor(){
    return _door;
  }

}

ویژگی  door_  بصورت خصوصی تعریف شده و برای اینکه موقع ساخت آبجکت بتونیم درب را مقدار دهی کنیم باید حتما از متد setDoor استفاده کنیم. کلمه کلیدی this اینجا به متغیر های داخل کلاس اشاره میکند.

 

و اگه بخوایم مقدار door_ رو دریافت کنیم با از متد getDoor استفاده کنیم درست به شکل زیر 

void main() {
  var map = new Map();
  map.setDoor('black');
  print(map.getDoor());
}

 

 

 

تگ ها :

شما برای ارسال نظر باید وارد سایت شوید

دیدگاه های ارزشمند شما