برنامه نویسی شی گرا یا Object Oriented Programming چیست؟

دسته بندی: برنامه نویسی
سطح مقاله: متوسط
زمان مطالعه: 5 دقیقه
۲۵ فروردین ۱۳۹۸
فارسی
برنامه نویسی شی گرا
English
OOP

برنامه نویسی شی گرا چیست : 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 از آن به ارث می‌برند و...

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

چه امتیازی به این مقاله می دید؟
نویسنده زهرا فرحمند

نظرات کاربران

لیلا

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

محمد علی ناصری

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

نازنین کریمی مقدم

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

َعلیرضا چوپانیان

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

محمد نقلانی

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

زهرا فرحمند

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

erfan.b2000

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

erfan.b2000

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

حامد

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

زهرا فرحمند

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

ارسال دیدگاه
خوشحال میشیم دیدگاه و یا تجربیات خودتون رو با ما در میون بذارید :