تابستون تو راهه. قبل از تغییر قیمت‌ها یادگیری رو شروع کن ...
۰ ثانیه
۰ دقیقه
۰ ساعت
۱۶ دیدگاه نظر زهرا فرحمند
شی گرایی یا Object Oriented Programming چیست؟
شی گرایی یا Object Oriented Programming چیست؟

برنامه نویسی شی گرایی چیست : OOP یا Object Orient Programming شیوه ای از برنامه نویسی است که موجودیت‌های نرم افزار را به صورت شی یا Object می‌بیند. قبل از ظهور برنامه نویسی شی گرا ، برنامه‌ها اغلب به شکل Procedural یا رویه ای نوشته می‌شد. در برنامه نویسی رویه ای برنامه‌ها به توابع تقسیم می‌شدند. یعنی برنامه از متغیرهایی که اطلاعات را ذخیره و توابعی که عملیات مورد نظر را روی اطلاعات انجام می‌دادند تشکیل می‌شد.

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

برنامه نویسی شی گرا (oop)

پس از ظهور برنامه نویسی شی گرا توابع و متغیرهای مرتبط در واحد هایی به اسم کلاس (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 به عنوان یک شی در نظر گرفته می‌شود، بنابراین قبل از اعمال آن باید درمورد چگونگی اشیا و ارتباطشان با یکدیگر یک ساختار ذهنی عالی داشته باشید.

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

۱۶ دیدگاه
ما همه سوالات و دیدگاه‌ها رو می‌خونیم و پاسخ میدیم
,موسوی ۱۱ دی ۱۴۰۲، ۱۱:۱۷

بسیار خوب.تشکر در قسمت معایب شی گرایی عبارت «با به کارگیری» تایپ شده «بت به کارگیری»

نازنین کریمی مقدم ۱۲ دی ۱۴۰۲، ۰۷:۳۶

درود ممنون از تذکری که دادید، اصلاح شد.

بلوط هاست ۱۱ آبان ۱۴۰۲، ۰۶:۳۱

عالی بود!

۱۶ شهریور ۱۴۰۱، ۱۳:۱۱

بسیار عالی

حامد ۲۱ مهر ۱۴۰۰، ۱۱:۰۳

خیلی حال کردم مقاله به این میگن

نازنین کریمی مقدم ۲۱ مهر ۱۴۰۰، ۱۱:۰۷

خوشحالیم مقاله براتون مفید بوده دوست عزیز :)

لیلا ۰۵ مرداد ۱۳۹۹، ۰۸:۴۳

عالی بود. با بیانی ساده به بهترین شکل این مبحث رو توضیح دادید.

محمد علی ناصری ۰۵ خرداد ۱۳۹۹، ۱۸:۲۳

سلام بسیار عالی ، مثال و متد‌های public , private, protected مربوط به زبان php هستند؟

نازنین کریمی مقدم ۳۰ شهریور ۱۳۹۹، ۱۸:۲۸

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

َعلیرضا چوپانیان ۰۳ اردیبهشت ۱۳۹۹، ۱۸:۲۹

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

محمد نقلانی ۲۷ فروردین ۱۳۹۸، ۱۰:۰۷

مثل همیشه عالی - اگر امکانش هست این موارد ردو بسط بدیم و وارد مبحث MVC هم بشیم

زهرا فرحمند ۲۸ فروردین ۱۳۹۸، ۰۹:۱۶

سلام آقای نقلانی عزیز. حتما این اتفاق خواهد افتاد ممنون از همراهیتون :)

erfan.b2000 ۲۵ فروردین ۱۳۹۸، ۱۹:۴۳

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

erfan.b2000 ۲۵ فروردین ۱۳۹۸، ۱۹:۳۷

خیلی خوب بود واقعا استفاده کردم...

حامد ۲۵ فروردین ۱۳۹۸، ۱۷:۲۵

سلام ، ممنون از مقاله خوبتون بنظرم توی پوستر مقاله جای functional با شئ گرا جا به جا شده، اینطور نیست ؟!

زهرا فرحمند ۲۸ فروردین ۱۳۹۸، ۰۸:۱۷

سلام حامد عزیز. در تصویر ترتیب خاصی چه از نظر زمانی و چه برتری مد نظر نیست. ممنون از شما که برای بهتر کردن مقالات به ما کمک می‌کنید :)

  • قلمرو متغیر‌ها در شی گرایی
  • شی گرایی در دنیای واقعی
  • مزایای استفاده از شی گرایی
  • معایب شی گرایی
اشتراک گذاری مقاله در :