برنامه نویسی شی گرایی چیست : OOP یا Object Orient Programming شیوه ای از برنامه نویسی است که موجودیتهای نرم افزار را به صورت شی یا Object میبیند. قبل از ظهور برنامه نویسی شی گرا ، برنامهها اغلب به شکل Procedural یا رویه ای نوشته میشد. در برنامه نویسی رویه ای برنامهها به توابع تقسیم میشدند. یعنی برنامه از متغیرهایی که اطلاعات را ذخیره و توابعی که عملیات مورد نظر را روی اطلاعات انجام میدادند تشکیل میشد.
اما با بزرگ شدن نرم افزار برنامه نویسان مجبور به تکرار کدها به صورت مکرر میشدند. توابع در قسمتهای مختلف به صورت نامرتب و تو در تو یکدیگر را صدا میزدند و برنامه به اصلاح به یک کد Spagetti تبدیل میشد. کد اسپاگتی به کدی اطلاق میشود که در آن توابع و قطعات کد مختلف به هم وابسته و در هم ریخته اند و در نتیجه ایجاد تغییر در یک تابع باعث به هم ریختن توابع زیادی میشود.
پس از ظهور برنامه نویسی شی گرا توابع و متغیرهای مرتبط در واحد هایی به اسم کلاس (Class) تجمیع شدند. اشیا از روی این کلاسها ساخته میشوند. و به این ترتیب صاحب متدها (Method) و ویژگیهای (Attribute) آن کلاسها میشوند. همینطور کلاسها میتوانند ویژگیها یا توابع را از یکدیگر به ارث ببرند. به این ویژگی ارث بری یا Inheritance میگوییم.
به عنوان مثال گوشی خود را در نظر بگیرید. فرض کنید مدل گوشی شما SumsungS10 باشد. کلاس گوشی SumsungS10 از کلاس گوشی به ارث میبرد. کلاس گوشی دارای ویژگیها یا Attributeهای زیر است:
رنگ
رزولوشن
رزولوشن دوربین
حافظه
و...
همینطور تابعهای زیر را دارد:
شارژ شدن
عکس گرفتن
دریافت SMS
و...
کد زیر یک کلاس خالی گوشی تلفن همراه را نمایش میدهد:
class Mobile { protected $color; protected $resolution; protected $cameraResolution; protected $memorySize; public function charge() {} public function takePhoto() {} public function getSMS() {} }
حال با کلمه کلیدی Extends ویژگیها و متدهای کلاس گوشی موبایل توسط کلاس SumsungS10 به ارث برده میشود:
class SumsungS10 extends Mobile { private $gadgets = array(); }
کلاس گوشی SumsungS10 با به ارث بردن از کلاس گوشی تمام این ویژگیها و توابع را به ارث میبرد. علاوه بر آن دارای ویژگی Gadget نیز هست. گوشی SumsungS10 شما یک نمونه یا Instance از کلاس گوشی SumsungS10 است و با ساخت یک Object از کلاس گوشی SumsungS10 به وجود میآید.
$mysSumsungS10 = new SumsungS10();
قلمرو متغیرها در شی گرایی
در کدهای بالا مشاهده کردید که در تعریف attributeها و متدها از کلمات public، protected و private استفاده کردیم. ما با استفاده از این کلمات کلیدی قلمرو attributeها و متدهای کلاس را در برنامه نویسی شی گرا تعریف میکنیم. به این کلمات کلیدی Access Modifier میگوییم. به طور خلاصه:
Public: به متغیرها و متدهایی گفته میشود که از خارج کلاس قابل دسترسی هستند.
Protected: به متغیرها و متدهایی گفته میشود که فقط از کلاس هایی قابل دسترسی هستند که از کلاس فعلی ارث برده اند.
Private: به متغیرها و متدهایی گفته میشود که از خارج کلاس قابل دسترسی نیستند.
شی گرایی در دنیای واقعی
شاید با خودتان بگویید در دنیای واقعی برنامه نویسی شی گرا کمتر اتفاق میافتد که نیاز داشته باشید از کلاس گوشی موبایل شی بسازیم. در دنیای واقعی تمام موجودیتهای برنامه میتوانند به صورت شی دیده شوند. حتی میتوان هر رکورد از جداول پایگاه داده را به صورت شی دید (ORM). مثل کلاس پیام یا Message که انواع مختلف کلاس Message مانند BroadcastMessage و PrivateMessage از آن به ارث میبرند و...
مزایای استفاده از شی گرایی
هرچند که استفاده از شی گرایی مزایای زیادی دارد اما میزان ضرورت استفاده و اهمیت آن به نوع پروژه و ترجیحات برنامه نویس بستگی دارد. این مفهوم هنوز در حال توسعه است و روزانه تکنولوژیها و ابزارهای زیادی در این راستا منتشر میشود. برخی از مزایای شی گرایی عبارتند از:
شی گرایی روند کلی توسعه یک نرم افزار را آسان میکند.
شما میتوانید به جای اینکه مجبور باشید کد را بارها بازنویسی کنید، از همان ابتدا برای برنامه ماژولهای کاری استاندارد بسازید که با یکدیگر ارتباط برقرار میکنند: این منجر به صرفهجویی در زمان توسعه و بهرهوری بالاتر میشود.
شی گرایی اجازه میدهد تا برنامه را به زیرمسائلی با اندازه کوچکتر تقسیم کنید که به راحتی قابل حل هستند.
فناوری جدید شی گرایی باعث بهره وری بیشتر برنامه نویس، کیفیت بهتر نرم افزار و هزینه نگهداری کمتر میشود.
سیستمهای OOP را میتوان به راحتی از سیستمهای کوچک به بزرگ ارتقا داد.
این امکان وجود دارد که چندین نمونه از اشیاء بدون هیچ گونه تداخلی به صورت همزمان وجود داشته باشند.
پارتیشن بندی کار در یک پروژه بر اساس اشیا بسیار آسان است.
اصل پنهان کردن دادهها به برنامه نویس کمک میکند که برنامههای امنی بسازد تا کدهای دیگر نتوانند به آنها حمله کنند.
با استفاده از وراثت، میتوان کدهای اضافی را حذف کرده و استفاده از کلاسهای موجود را گسترش داد.
تکنیکهای ارسال پیام برای ارتباط بین اشیا استفاده میشود که توصیف ارتباط داخل برنامه با سیستمهای خارجی را بسیار سادهتر میکند.
رویکرد طراحی دادهمحور شما را قادر میسازد تا جزئیات بیشتری از مدل را به شکلی قابل اجرا ثبت کنید.
معایب شی گرایی
جالب است بدانید که استفاده از OOP دارای معایبی نیز میباشد. برخی از این معایب به شرح زیر میباشند:
روند ایجاد برنامههای توسعه یافته با استفاده از شی گرایی بسیار بیشتر از رویکرد عادی و معمول است؛ چراکه با به کارگیری اصول شی گرایی اندازه برنامه بزرگتر میشود، در نتیجه اجرای آن به زمان بیشتری نیاز دارد که این موضوع منجر به اجرای کندتر برنامه میشود.
نمی توان شی گرایی را در همه جا اعمال کرد و باید توجه داشت که فقط در صورت لزوم اعمال شود. برنامه نویسان باید مهارت طراحی و برنامه نویسی درخشانی را در کنار برنامه ریزی مناسب داشته باشند زیرا استفاده از شی گرایی کمی مشکل است.
اغلب زمان نیاز است تا برنامه نویسان تازه کار به شی گرایی عادت کنند. فرآیند فکری مورد نیاز در برنامه نویسی شی گرا ممکن است برای برخی افراد سنگین باشد.
همه چیز در OOP به عنوان یک شی در نظر گرفته میشود، بنابراین قبل از اعمال آن باید درمورد چگونگی اشیا و ارتباطشان با یکدیگر یک ساختار ذهنی عالی داشته باشید.
اگر میخواهید بیشتر با برنامه نویسی آشنا شوید مقالات زیر را دنبال کنید