برنامهنویسی شیگرا ( Object Oriented programming ) یا OOP چیست؟
برنامهنویسی شیگرا ( Object Oriented programming ) یا به اختصار oop ، یکی از شیوههای برنامهنویسی است که ساختار یا بلوک اصلی آن از اشیاء یا object ها تشکیل شدهاست. من ارسلان میربزرگی، در این مقاله قصد دارم تا شما را با مفهوم برنامه نویسی شی گرا ( Object Oriented programming ) در برنامه نویسی آشنا کنم. قبل از ایجاد برنامه نویسی شی گرا، برنامهها و نرم افزارها بیشتر به صورت رویه ای ( Procedural ) کد نویسی میشدند. در برنامه نویسی ( programming ) به روش رویهای، تمام برنامه به تعدادی تابع تقسیم میشد. به عبارتی برنامههایی که با این روش نوشته میشدند، از متغیرهایی که دیتاهارا ذخیره و توابعی که عملیاتهایی را بر روی این دیتاها انجام می دهند تشکیل شدهاند.
با گسترش نرم افزارها، برنامه نویسان ناچار به تکرار کردن کدها به شکل دائمی بودند. برای اینکار، توابع در بخشهای مختلف، به شکل نامرتب و تو در تو فراخوانی میشدند و برنامه به یک کد Spaghetti مبدل میشد. کد Spaghetti کدی است که در آن بخشهای مختلف کد و توابع، به یکدیگر وابسته اما نا مرتب هستند و همین موضوع باعث میشود تا تغییر در هر تابع، منجر به بهم ریختگی توابع زیادی شود.

روند شکل گیری Object Oriented programming
پس از ایجاد Object Oriented programming، تمامی توابع به همراه متغیرهایی که با آنها مرتبط هستند در مجموعهای به نام کلاس (Class) گردآوری شدند. تمامی اشیاء نیز از روی این کلاسها تولید میشوند. در نتیجه این اشیاء، تمامی متدها (Method) و ویژگیهای کلاس (Attribute) را به خود میگیرند. برعکس این قضیه نیز صادق است و کلاسها نیز میتوانند توابع یا ویژگیهای آنها را به ارث ببرند. به این حالت در برنامه نویسی، Inheritance یا ارث بری گفته میشود. برای درک بهتر این قضیه، یک مثال را مطرح میکنیم. فرض کنید شما یک گوشی موبایل Sumsung S9 دارید. کلاس گوشی Sumsung S9 از کلاس گوشی ارث بری میکند. این کلاس ( همان کلاس گوشی ) دارای ویژگیهایی است که در زیر به آنها اشاره میکنیم.
- رزولوشن صفحه نمایش
- رزولوشن دوربین
- حافظه
- و….
همینطور شامل توابع زیر است:
- قابلیت عکاسی
- دریافت و ارسال SMS
- قابلیت شارژ شدن و…
کدی که در زیر نمایش داده شده است، کلاس خالی گوشی را نشان میدهد:
class Mobile { protected $color; protected $resolution; protected $cameraResolution; protected $memorySize; public function charge() {} public function takePhoto() {} public function getSMS() {} }
حالا کلمه کلیدی Extends را اضافه میکنیم. در این صورت، متدهای کلاس گوشی و ویژگیهای آن توسط کلاس Sumsung S9 ارث بری میشود:
class SumsungS9 extends Mobile { private $gadgets = array(); }
کلاس Sumsung S9 با ارث بری از کلاس گوشی، تمامی این توابع و ویژگیها را نیز به ارث می برد. به علاوه اینکه ویژگیهای Gadget را نیز دارا است. گوشی Sumsung S9 که شما در اختیار دارید، نمونهای از کلاس گوشی Sumsung S9 است و از طریق ساختن یک شی یا object از کلاس گوشی Sumsung S9 تولید میشود.
$mysSumsungS9 = new SumsungS9();

قلمرو متغیرها در oop
در کدهایی که در مثال بالا ذکر کردیم، مشاهده کردید که برای تعریف متدها و ویژگی ها از کلمات private و public protected استفاده کردیم. در واقع با استفاده از این کلمات، برای متدها و ویژگیهای کلاس، قلمرو خاصی را در Object Oriented programming تعریف میکنیم. این کلمات کلیدی را Access Modifier مینامیم. به صورت خلاصه میتوانیم بگوییم که :
- public : شامل متغیرها و متدهایی است که خارج از کلاس، میتوان به آنها دسترسی پیدا کرد.
- protected : شامل متغیرها و متدهایی است که صرفا از داخل کلاسهایی می توان به آنها دسترسی پیدا کرد که از کلاس فعلی ارث بری کرده باشند.
- private : شامل متغیرها و متدهایی است که از خارج از کلاس، نمیتوان به آنها دسترسی پیدا کرد.

oop در دنیای واقعی
ممکن است فکر کنید که در دنیای واقعی Object Oriented programming به صورتی که ما در این مقاله مثال زدیم اتفاق نمیافتد و شما نیازی ندارید تا از کلاس یک گوشی، object بسازید. باید بگوییم که در دنیای واقعی، کل موجودیت یک نرم افزار یا برنامه در قالب شی است ( حتی تک تک رکوردهای مربوط به جدول های دیتابیسها ). از این دستهها میتواند به کلاس Message اشاره کرد که که انواع متفاوتی از کلاس Message مثل Broadcast Message یا Private Message از آن ارث بری میکنند.

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