شی گرایی یا OPP چیست؟

OPP مخفف کلمهObject-Oriented Programming (برنامه نویسی شی گرا) می باشد و شی گرایی یک نوع الگو برنامه نویسی می باشد.

الگو برنامه نویسی چیست؟

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

سه تا از الگو ها را اینجا نام می بریم:

1. Object-Oriented (برنامه نویسی شی گرا)

۲. Functional Programming (برنامه نویسی تابعه ای)

3. Procedural Programming (برنامه نویسی رویه ای)

و غیره

مزایای OOP چیست؟

1. اجرای OOP آسان و سریع تر است

۲. OOP یک ساختار واضح برای برنامه ایجاد می کند.

۳. OOP برای حفظ کد جاوا کمک می کند "جلوگیری از تکرار کد می شود" و نگهداری – اصلاح و اشکال زدایی کد را آسان تر می کند.

۴. OOP ایجاد برنامه کاربردی قابل استفاده مجدد کامل با کد کمتر و زمان توسعه کوتاه تر را ممکن می سازد

Classes (کلاس ها)  و Objects (اشیاء) چیست؟

   Classes (کلاس ها)  و Objects (اشیاء) دو جزء مهم object-oriented programming هستند.

برای مشاهده تفاوت کلاس و اشیاء به تصاویر زیر نگاه کنید:

objects

 (سیب) Apple

 (موز) ‌Banana

 (انبه) Mango

Class

(میوه) Fruit

مثالی دیگر:

objects

 Iran-khodro

 Saipa

Class

(ماشین) Car

یک کلاس یک الگو (template)  برای اشیاء است و یک شی یک نمونه ای از یک کلاس است.

یک شی یک نمونه ای از یک کلاس است و از ساختار (struct) ویژکی (attribute or field)   و یا رفتار (method) های کلاس پیروی می کند

وقتی یک شی (Object) ایجاد می شود ، همه متغیرها و متدها را از کلاسی که ایجاد شده است به ارث می برد. (درصورتی که متوجه نمی شوید ایرادی ندارد در ادامه بهتر متوجه خواهید شد)

تایپ اسکریپت یک زبان برنامه نویسی شی گرا است

همه چیز در تایپ اسکریپت با کلاس و اشیاء‌ در ارتباط است به علاوه با attributes (ویژگی ها)‌ و methods (طرز عمل کردن ها)

برای درک بهترattributes و methods به مثال زیر توجه فرمائید

مثال: در زندگی واقعی یک ماشین یک شی است و ماشین attributes (ویژگی هایی) دارد مانند:‌ وزن، رنگ و methods (طرز عمل هایی)‌ دارد مانند:‌ راندن ماشین و ترمز کردن است.

ایجاد یک شی همانطور که گفتیم یک object (شی) از یک Class (کلاس) ایجاد می شود. قابل ذکر است که هر شی ایجاد شده مقداری از حافظه را درگیر می کند. و design pattern ها کمک می کنند که حافظه کمتری مصرف شود. (نظر نویسنده)

یک کلاس مثل یک سازنده شیء است  یا یک "طرح یا پلن" (blueprint) برای ایجاد اشیاء است. (با نمونه کد ها در ادامه این مطلب بهتر درک می کنید ان شاء الله)

اعضای Class

ایجاد کردن Class

مانند اکثر زبان های دیگر برنامه نویسی مانند سی پلاس پلاس، جاوا و غیره می باشد. پس در نتیجه با خوندن مبحث شی گرایی تایپ اسکریپت شما در زبان های دیگر می توانید به این شیوه کد بنویسید. یا بالعکس در قطعه کد زیر یک class ایجاد کردیم 

  1  class youtNameClass {}

نام دلخواه خود را جایگزین yourNameClass کنید

ایجاد شی کلاس

به قطعه کد زیر دقت گنید

 1 class clce {
 2  x: number;
 3  y: number;
 4  calculate(x: number, y: number):number {
 5    return x + y;
 6  }
 7 }

 8  const clc = new clce();
 9  clc.x = 3;
 10 clc.y = 5;
 11 console.log(clc.calculate(clc.x, clc.y)); // print 8

ما در قطعه کد برنامه بالا قصد داریم عدد ۵ و ۳ را با هم جمع کنیم و در خروجی عدد ۸ را نمایش بدهیم.

من یک کلاس به نام  clce دارم که دوتا متغیر (field) و یک method (رفتار کلاس) جمع دو عدد می باشد، خب در خط ۸ با استفاده از کلمه کلید new یک شی ایجاد می کنیم و این امر باعث می شود به اعضای کلاس، متد ها و متغیر های کلاس دسترسی داشته باشیم.

در خط ۹ و ۱۰ به field های کلاس که property های یک کلاس محسوب می شوند.  دو تا عدد ۳ و ۵ اختصاص داده.

و در خط 11 این دو عدد که 3 و 5 می باشند آرگومان های تابع calculate می باشند. و این ها را به method داده تا این دو عدد را با هم جمع بکند و عدد 8 را برگرداند

و برای جاپ نتیجه از console.log لستفاده شده است.

در خط ۴ کد بالا بدلیل گذاشتن number: فقط مقدار عددی می تولند return کند در غیر اینصورت اگر یک رشته (string) بازگشت (return) کنیم  پیام خطا چاپ می شود. یکی از فرق های جاوا اسکریپت و تایپ اسکریپت محسوب می شود.

نوع const به این معنا می باشد که مقدار جایگذاری شده قابل تغییر نبوده و همیشه مقدار ثابت را در خود دارد.

قابل ذکر است میتوان کلاس clce و کلاسی که میخواهیم در آن یک شی از clce ایجاد بکنیم در فایل های  جداگانه باشند. نه مانند قطعه کد بالا که همه در یک فایل می باشد.

ایجاد کردن Fields or attribute

fields ها یا attribute همان متغیر های کلاس می باشند مانند قطعه کد زیر

  1  class Point {
  2  	x: number;
  3 	y: number;
  4  }
  5  
  6  const pt = new Point();
  7  pt.x = 0;
  8  pt.y = 0;

در قطعه کد بالا متغیر های x و y فیلد های کلاس محسوب می شوند. مشخص کردن نوع متغیر که همان field می باشد بصورت اختیاری می باشد در صورت مشخص نکردن آن بصورت پیش فرض any می باشد. ولی حتما حتما حتما نوع آن را مشخص کنید.

بصورت پیش فرض می توانید به field ها مقدار بدهید

  1  class Point {
  2  	x: number = 0;
  3  	y: number = 0;
  4  }
  5   
  6  const pt = new Point();
  7  // Prints 0, 0 
  8  console.log(`${pt.x}, ${pt.y}`);;

در قطعه کد بالا 0 و 0 را چاپ می کند

به قطعه کد زیر توجه داشته باشید

  1  const pt = new Point();
  2  pt.x = "0";
  3  Error: Type 'string' is not assignable to type 'number'.  

قطعه کد بالا به خطا مواجه می شود بدلیل اینکهfield کلاس point  نوع آن number  می باشد اما ما در field x متن (string) قرار داده ایم
اصطلاح Property های کلاس چیست؟

اعضای کلاس Property های کلاس محسوب می شوند مانند Method و Field های یک کلاس.

منابع:

1. w3schools-java-oop  توضیحات

2. majid dehnamaki  توضیحات الگو های برنامه نویسی

3. w3schools-java-classes توضیحات

4.  typescriptlang اعضای کلاس به غیر از ایجاد کلاس