افزايش قيمت دوره‌ها در راهه! ۲۱٪ تخفیف ثبت‌نام با قیمت فعلی

شی گرایی یا Object Oriented Programming چیست؟

برنامه نویسی شی گرایی چیست : 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 با شئ گرا جا به جا شده، اینطور نیست ؟!
زهرا فرحمند ۲۸ فروردین ۱۳۹۸، ۱۲:۴۷
سلام حامد عزیز. در تصویر ترتیب خاصی چه از نظر زمانی و چه برتری مد نظر نیست. ممنون از شما که برای بهتر کردن مقالات به ما کمک می کنید :)