شی گرایی چیست؟ شیءگرایی یکی از اصطلاحات رایج در برنامه نویسی است، اما معنی شیءگرایی چیست؟ برنامه نویسی شیءگرا به انگلیسی «Object-Oriented Programming» یا به‌اختصار «OOP» یک روش برنامه نویسی است، که ساختار یا بلوک اصلی اجزای آن، شی‌ءها هستند. مزایای شیءگرایی در برنامه نویسی بسیار زیاد است. در این مقاله از آموزش برنامه نویسی، به‌طور کامل به کاربرد شیءگرایی در برنامه نویسی می‌پردازیم.

موضوعاتی که در این مقاله به بررسی آن‌ها می‌پردازیم:

  • شی گرایی چیست؟
  • کاربرد شیءگرایی در دنیای واقعی
  • کلاس (Class) در شی گرایی چیست؟
  • شیء (Object) در شیءگرایی چیست؟
  • کاربرد شیءگرایی در برنامه نویسی
  • تاریخچه Object Oriented Programming چیست؟
  • چرا از شیءگرایی در برنامه نویسی استفاده می‌کنیم؟
  • مزایای شی گرایی چیست؟
  • معایب شی گرایی چیست؟
  • اصول برنامه نویسی شیءگرا چیست؟
  • تفاوت برنامه نویسی تابعی با شیءگرایی چیست؟
  • زبان‌های برنامه نویسی شیءگرا کدام‌اند؟
  • زبان‌های برنامه نویسی غیر شیءگرا کدام‌اند؟

شی گرایی چیست؟

شیءگرایی به انگلیسی «Object Oriented Programming» به اختصار «OOP» یک روش برنامه نویسی است که در آن، برنامه به شکل مجموعه‌ای از اشیاء یا انتزاعات تشکیل می‌شود. هر شیء در این روش، یک نمونه از یک کلاس است که شامل ویژگی‌ها (پراپرتی‌ها) و رفتارها (متدها) است. شیءگرایی از مفهومی به نام «ترکیب» برای ارتباط بین شیء‌ها استفاده می‌کند.

در برنامه نویسی شیءگرا، برنامه به شیء گرایش پیدا می‌کند، یعنی نسبت دادن یک سری ویژگی‌ها (Property) یا رفتارها (Method) به شیءهای (Objects) مختلف است. در قسمت بعدی یک مثال از شیءگرایی در دنیای واقعی می‌زنیم تا درک بهتری از این موضوع داشته باشیم.

کاربرد شیءگرایی در دنیای واقعی

در قسمت قبل دانستیم که شیءگرایی چیست؟ در این قسمت با یک مثال ساده می‌خواهیم کاربرد شیءگرایی در دنیای واقعی را توضیح دهیم. یک ماشین (خودرو) را در نظر بگیرید. خودرو ویژگی‌هایی مانند: رنگ، وزن، سرعت، مدل و... را دارد که به آن‌ها پراپرتی (Property) می‌گوییم. همچنین رفتارهایی مانند روشن و خاموش کردن، تغییر سرعت، قابلیت تعویض دنده، قابلیت گاز دادن یا ترمز کردن و... را دارد که به آن‌ها متد (Method) می‌گوییم.

نکته: در حقیقت شیءگرایی مختص برنامه نویسی نیست بلکه از اشیاء دنیای واقعی به دنیای برنامه نویسی منتقل شده است.

کلاس (Class) در شی گرایی چیست؟

کلاس در شیءگرایی چیست؟

در قسمت قبل دانستیم که شیءگرایی چیست؟ در این قسمت باید ببینیم که کلاس در شیءگرایی چیست؟ در شیءگرایی، مجموعه‌ای از ویژگی‌ها (پراپرتی‌ها) و رفتارها (متدها) در کنار هم جمع می‌شوند و یک کلاس (Class) را تشکیل می‌دهند. برای مثال خودرو یک کلاس با نام Car است که ویژگی‌ و رفتارهای منحصر به فرد خود را دارد.

شیء (Object) در شیءگرایی چیست؟

آبجکت در شیءگرایی چیست؟

در قسمت قبل دانستیم که کلاس در شی گرایی چیست؟ در این قسمت به این می‌پردازیم که مفهوم شیء در شی گرایی چیست؟ شیء همان چیزی است که ما کلاس را به آن نسبت داده‌ایم. برای مثال از روی کلاس Car که دارای ویژگی‌ها (پراپرتی‌ها) و رفتارها (متدها) است یک پراید یا پژو می‌سازیم. در اینجا پراید یا پژو شیءهای ما هستند که از کلاس Car نمونه (Instance) گرفته‌ایم.

در حقیقت همه‌ی خودروها (Class) دارای یک سری ویژگی‌ها مانند رنگ، مدل، سرعت و... هستند و یک سری رفتارهایی مانند قابلیت تعویض دنده، گازدادن و ترمز زدن را دارا هستند. وقتی یک شیء مانند پراید از این Class می‌سازیم، از این ویژگی‌ها تبعیت می‌کند ولی می‌توانیم ویژگی‌ها و رفتارهای آن را شخصی سازی کنیم. مثلا رنگ آن را تغییر دهیم یا نحوه ترمز زدن آن را تغییر دهیم.

کاربرد شیءگرایی در برنامه نویسی

در قسمت قبل به‌صورت تئوری دانستیم که شی گرایی چیست؟ در این قسمت یک مثال عملی از شیءگرایی در PHP می‌زنیم تا کامل متوجه کاربرد شیءگرایی در برنامه نویسی شوید. به کدهای زیر توجه کنید:

<?php

class Car {
    public $color;
    Public $model;
    Public $speed;

    public function setColor($car_color){
        $this->color = $car_color;
    }

    public function setModel($car_model){
        $this->model = $car_model;
    }

    public function setSpeed($car_speed){
        $this->speed = $car_speed;
    }
}

//Pride Object
$pride = new Car();
$pride->setColor("Red");
$pride->setModel("1402");
$pride->setSpeed("200");
echo $pride->color; //Red
echo $pride->model; //1402
echo $pride->speed; //200

//Benz Object
$benz = new Car();
$benz->setColor("Black");
$benz->setModel("2023");
$benz->setSpeed("250");
echo $benz->color; //Black
echo $benz->model; //2023
echo $benz->speed; //250

در قسمت بالا یک کلاس Car داریم که دارای سه Property با نام‌های model ،color و speed هستند و سه Method با نام‌های setModel ،setColor و setSpeed داریم. اکنون می‌خواهیم دو نمونه شیء از این کلاس Car با نام‌های Pride و Benz بسازیم.

برای Object پراید ابتدا یک متغیر با نام pride$ می‌سازیم و سپس با ()new car یک شیء جدید از کلاس Car نمونه‌گیری می‌کنیم و در این متغیر ذخیره می‌کنیم. اکنون شیء ما با نام pride از کلاس Car ساخته شده است.

سپس این نمونه را از طریق متدهای کلاس Car شخصی‌سازی می‌کنیم و رنگ، مدل و سرعت آن را به شیء پراید نسبت می‌دهیم. در سه خط بعدی با echo کردن رنگ، مدل و سرعت به ترتیب قرمز، 1402 و 200 چاپ خواهند شد.

برای Object بنز نیز به همین روال عمل می‌کنیم. در این قسمت متغیر ما benz$ خواهد بود و با ()new car  یک شیء جدید از کلاس Car داخل این متغیر ذخیره می‌کنیم. اکنون شیء ما با نام benz از کلاس Car ساخته شده است.

سپس این نمونه را از طریق متدهای کلاس Car شخصی‌سازی می‌کنیم و رنگ، مدل و سرعت آن را به شیء بنز نسبت می‌دهیم. در سه خط بعدی با echo کردن رنگ، مدل و سرعت به ترتیب مشکی، 2023 و 250 چاپ خواهند شد.

پس یک کلاس Car داریم که یک سری ویژگی‌ها (Property) و رفتارهایی (Method) دارد که از روی این کلاس، شیءهای خود که در این مثال pride و benz بودند را ساختیم و Propertyهای آن را از روی Methodها شخصی سازی کردیم.

تاریخچه Object Oriented Programming چیست؟

تاریخچه شیءگرایی چیست؟ تاریخچه شیءگرایی در برنامه‌نویسی اولین بار در دهه 1960 میلادی مطرح شد و در سال 1967 با زبان برنامه نویسی Simula معرفی شد. زبان Simula توسط کریستن نیلسن و اوله لیندگارد در دانشگاه اوسلو در نروژ ابداع شد.

زبان Simula برای شبیه سازی سیستم‌های توزیع شده استفاده می‌شد و به عنوان اولین زبان برنامه‌نویسی شیءگرا محسوب می‌شود. با این ابداع، ایده‌های اصلی شیءگرایی مانند اشیاء، کلاس‌ها، وراثت و پلی‌مورفیسم برای اولین بار معرفی شدند.

چرا از شیءگرایی در برنامه نویسی استفاده می‌کنیم؟

اکنون که دانستیم که شی گرایی چیست؟ اکنون باید ببینیم که فلسفه شیءگرایی چیست؟ شیءگرایی در برنامه نویسی کاربرد بسیار زیادی دارد. با استفاده از شیءگرایی، کد را به صورت ماژولار و سازمان‌یافته طراحی می‌کنیم و از کد قبلی بدون نوشتن دوباره آن، می‌توان به صورت مجدد استفاده کرد.

قبل از ظهور شیءگرایی از برنامه نویسی رویه‌ای (Procedural programming) استفاده می‌شد. در این روش، کدها به‌صورت خط به خط از ابتدا تا انتها نوشته می‌شدند. این روش بسیار قدیمی بود و کدهای اضافی و تکراری در برنامه زیاد می‌شد و کدنویسی تمیز از بین می‌رفت.

با طهور شیءگرایی این مشکل از بین رفت و با نوشتن یک کلاس (Class) می‌توان آن را در هر جای برنامه که می‌خواهیم استفاده کنیم. یعنی دیگر نیاز نیست کدها را دوباره بنویسیم. در مثال شیءگرایی در برنامه نویسی مشاهده کردید که برای ساخت یک شیء پراید یا بنز نیاز نبود که پراپرتی و متدها را برای هر شیء به‌صورت جداگانه بنویسیم. بلکه آن‌ها را در داخل یک کلاس گذاشتیم و از این کلاس دو شیء مختلف ساختیم و هرجا که نیاز بود تغییرات را روی آن اعمال کردیم.

در حالت معمولی (Procedural) اگر قسمتی از برنامه تغییر کند، باید کل ساختار برنامه را بررسی کرده و همه موارد را تغییر دهیم. مثلا اگر بخواهیم میزان شتاب را به برنامه خود اضافه کنیم، بدون استفاده از برنامه نویسی شئ‌گرا باید میزان شتاب را یکبار برای پراید و یکبار برای بنز بنویسیم.

اما در برنامه نویسی شئ‌گرا اینطور نیست. کافیست این ویژگی (Property) جدید را به کلاس اصلی برنامه اضافه کنید تا سایر اشیاء (پراید و بنز و...) نیز این ویژگی جدید را به ارث ببرند و آن را درون خود داشته باشند، در این صورت دیگر احتیاجی نیست تک به تک خطوط برنامه را تغییر دهید.

علاوه بر آن به دلیل ویژگی‌های کپسوله‌سازی (Encapsulation) در برنامه نویسی شئ‌گرا، دسترسی به داده‌های درون کلاس از بیرون امکان‌پذیر نیست که این مورد می‌تواند برای افزایش امنیت برنامه‌های شما کمک کند و از هرجایی نتوان به آن دسترسی پیدا کرد.

مزایای شی گرایی چیست؟

در قسمت‌های قبل دانستیم که کاربرد شیءگرایی چیست؟ در این قسمت به مزایای آن می‌پردازیم. مزایای شیءگرایی عبارت‌اند از:

مزایای شیءگرایی چیست؟

مزایای شیءگرایی توضیحات
ماژولار بودن در شیءگرایی می‌توانیم کدهای خود را ماژولار بنویسیم و وابستگی اشیاء به یکدیگر را کم کنیم. یعنی هر قسمت از برنامه مستقل از برنامه دیگر باشد و در تغییر در یک قسمت، روی قسمت دیگر تاثیری نگذارد.
قابلیت استفاده مجدد از کد در شیءگرایی می‌توان یکبار کد را نوشت و در جاهای مختلف برنامه بدون دوباره‌نویسی از آن استفاده کرد.
حفظ و نگهداری کد از آنجایی که بیشتر کدهای ما در یک مکان قرار دارند و به صورت مکرر فراخوانی می‌شوند، نگهداری آن کدها بسیار آسان‌تر است.
افزایش امنیت کدها قابلیت کپسوله‌سازی در شیءگرایی باعث می‌شود که داده‌های خصوصی در کلاس‌ها از دید سایر کلاس‌ها یا کدها پنهان باشد و نتوان از هرجایی به آن‌ها دسترسی پیدا کرد که باعث افزایش امنیت در برنامه‌ها می‌شود.
مدیریت بهتر کدها شیءگرایی این مزیت را برای ما فراهم می‌کند که اگر تغییری در کدهای برنامه خود داشته باشیم، با تغییر کلاس والد، روی تمامی کلاس‌های فرزند این تغییرات را اعمال کنیم. بدون اینکه تک تک آن‌ها را تغییر دهیم.

معایب شی گرایی چیست؟

معایب شیءگرایی چیست؟ شیءگرایی علاوه بر مزایایی که دارد یک سری معایبی نیز به همراه دارد. معایب شیءگرایی عبارت‌اند از:

معایب شیءگرایی چیست؟

معایب شیءگرایی توضیحات
پیچیدگی اضافی در شیءگرایی، به دلیل وجود اشیاء، روابط بین اشیاء، و ارث‌بری میان کلاس‌ها و ماژول‌ها پیچیدگی رخ می‌دهد. این پیچیدگی اضافی ممکن است باعث سختی در فهم کد، انتقال دانش، و تغییرات وسیع در برنامه شود.
مصرف منابع بیشتر هر شیء در شیءگرایی به صورت جداگانه در حافظه ذخیره می‌شود و حافظه بیشتری برای اشیاء نیاز است. مصرف منابع بیشتر در شیءگرایی نتیجه ماهیت پیچیده‌تر و ترکیبی‌تر اشیاء، روابط بین آنها و نحوه مدیریت داده‌ها در این روش برنامه نویسی است.
کارآیی کمتر در برخی موارد شیءگرایی در برخی موارد ممکن است به کارآیی کمتری نسبت به روش‌های دیگر برنامه نویسی منجر شود. این موارد ممکن است به عواملی مانند هزینه ایجاد و مدیریت اشیاء، پیچیدگی ارتباطات و وجود آبجکت‌های حجیم برمی‌گردد.
نیاز به طراحی و برنامه‌ریزی دقیق‌تر در شیءگرایی، نیاز به طراحی و برنامه‌ریزی دقیق‌تر نسبت به روش‌های دیگر وجود دارد. این مسئله به علت وجود اشیاء، روابط و تعاملات بین آن‌ها و ساختار کامپوننت‌های برنامه است.
دشواری در فهم و تعامل با کد دشواری در فهم و تعامل با کد در شیءگرایی به دلیل وجود بسیاری از اشیاء، روابط و تعاملات بین آنها و همچنین پیچیدگی ساختار برنامه، ایجاد می‌شود.
افزایش زمان و هزینه توسعه و تست پیچیدگی ساختار برنامه، وابستگی‌های متقابل، نیاز به طراحی دقیق، نیاز به تست بیشتر باعث افزایش زمان و هزینه توسعه در شیءگرایی می‌شود.
افزایش پیچیدگی در خطاها و اشکالات پیچیدگی ساختار برنامه، تغییرات در شیء‌ها، انتقال پارامترها و ارتباطات، وابستگی‌های پیچیده، پنهانی بودن جزئیات و... باعث افزایش پیچیدگی خطاها و رفع مشکلات آن می‌شود.

اصول برنامه نویسی شیءگرا چیست؟

در قسمت‌های قبل دانستیم که شی گرایی چیست؟ و با کاربرد شی گرایی آشنا شدیم. در این قسمت 4 اصل شیءگرایی را نام می‌بریم:

  1. انتزاع (Abstraction)
  2. کپسوله‌سازی (Encapsulation)
  3. چندریختی (Polymorphism)
  4. وراثت (Inheritance)

در مقاله زیر به‌طور کامل این اصول را بررسی کرده‌ایم. برای آشنایی بیشتر آن را مطالعه کنید:

تفاوت برنامه نویسی تابعی با شیءگرایی چیست؟

در ادامه مقاله شی گرایی (OOP) چیست؟ به تفاوت بین برنامه نویسی تابعی و شیءگرا می‌پردازیم:

تفاوت برنامه نویسی تابعی با شیءگرایی

عامل مقایسه برنامه نویسی تابعی برنامه نویسی شیءگرا
تعریف مرتبط با ارزیابی توابع بدون هیچ‌گونه ناهمخوانی مرتبط با اشیاء و اجرای برنامه‌ها بر اساس معماری «شیئی شده» است.
مدل برنامه نویسی از مدل برنامه نویسی اعلانی (چیستی) پیروی می‌کند. از مدل برنامه نویسی دستوری (چگونگی) پیروی می‌کند.
برنامه نویسی موازی از الگوی برنامه نویسی موازی پشتیبانی می‌کند. به دلیل نحوه عملکرد آن، از برنامه نویسی موازی پشتیبانی نمی‌کند.
مدیریت داده با داده‌های تغییر ناپذیر کار می‌کند. از داده‌های تغییرپذیر استفاده می‌کند.
ترتیب اجرا منطبق با برنامه، شامل اجرای دستورات به هر ترتیب دلخواهی است. فقط از اجرای منظم دستورات استفاده می‌کند.
کاربرد وقتی نیاز به عملیات بیشتر و فقط چند ورودی باشد، انتخاب بهتری است. وقتی ورودی‌های پردازش زیاد، اما عملیات کمتری وجود داشته باشد، انتخاب بهتری است.
مؤلفه‌های اصلی طبق استفاده از توابع و متغیرها است. به اشیاء، ویژگی‌ها و روش‌ها تقسیم‌بندی می‌شود.
سهولت در پیاده‌سازی پیاده‌سازی آن به دلیل رویکرد متفاوتی برای تفکر، دشوار است. پیاده‌سازی آن به دلیل الگوبرداری از زندگی واقعی و استفاده از آن‌ها در هنگام برنامه نویسی، آسان است.
سهولت در یادگیری یادگیری آن آسان است، چون شامل مدیریت داده‌های پیچیده و دستکاری عمیق نیست. به دلیل نگهداری و روش غیرماژولار در هنگام برنامه نویسی، یادگیری آن دشوار است.

زبان‌های برنامه نویسی شیءگرا کدام‌اند؟

بعد از دانستن اینکه شیءگرایی چیست؟ باید ببینیم که زبان‌های برنامه نویسی شیءگرا کدام‌اند؟ برخی از زبان‌های برنامه نویسی شیءگرا عبارت‌اند از:

  1. PHP
  2. Python
  3. JavaScript
  4. Java
  5. ++C
  6. #C
  7. و...

زبان‌های برنامه نویسی غیر شیءگرا کدام‌اند؟

در قسمت قبل با زبان‌های برنامه نویسی شیءگرا آشنا شدیم. در این قسمت باید ببینیم که زبان‌های برنامه نویسی غیرشیءگرا کدام‌اند؟ برخی از زبان‌های برنامه نویسی غیرشیءگرا عبارت‌اند از:

  1. C
  2. Fortran
  3. ALGOL
  4. COBOL
  5. BASIC
  6. Pascal
  7. Ada
  8. و...

جمع‌بندی

شی گرایی چیست؟ در این مقاله دانستیم که برنامه نویسی شیءگرا چیست و چه کاربردی دارد؟ سپس به مزایا و معایب شیءگرایی پرداختیم. به‌طور خلاصه شیءگرایی به انگلیسی «Object-Oriented Programming» و به اختصار «OOP» یک شیوه برنامه نویسی است که ساختار بلوک یا اجزای آن شیءها هستند. اگر اصطلاحی در برنامه نویسی شیءگرا برای شما گنگ بود، لطفا در قسمت نظرات با ما در میان بگذارید.