آشنایی با مفاهیم شئ‌گرایی و برنامه‌نویسی شئ‌گرا به زبان ساده

زمان مطالعه: حدود 5 دقیقه / 30 گفتگو

برنامه‌نویسی شئ‌گرا (Object Oriented Programming) که به اختصار OOP نیز نامیده می‌شود، در حقیقت نوعی منطق یا الگوست که برگرفته از زندگی روزمره‌ی ما بوده و حدودا در دهه‌ی ۱۹۶۰ میلادی مطرح شد، در ادامه با همیار آی‌تی همراه باشید تا بیشتر با مفهوم شی گرایی و برنامه‌نویسی شئ گرا آشنا شویم.

آشنایی با مفاهیم شئ‌گرایی و برنامه‌نویسی شئ‌گرا به زبان ساده

همانطوری که گفتیم در برنامه نویسی شی گرا، برنامه را شبیه به دنیای اطراف و زندگی روزمره خودمان می‌بینیم، در حقیقت برپایه‌ی مدل‌سازی اشیا.

این موضوع را با یک مثال برای شما شرح می‌دهیم:

یک خودرو را به عنوان یک شئ در نظر بگیرید، ویژگی‌هایی مانند رنگ، وزن، سرعت و… از جمله مواردی هستند که می‌توان به عنوان ویژگی‌های یک خودرو در نظر گرفت، همچنین یک خودرو مجموعه رفتارهایی مانند، حرکت کردن، ترمز گرفتن، بوق زدن و… را نیز از خود نشان می‌دهد.

به هر موجودیتی که دارای خصوصیت، اطلاعات، وضعیت یا رفتار خاصی باشد یک شئ یا Object گفته می‌شود، این آبجکت را می‌توان به صورت فیزیکی یا منطقی در نظر گرفت.

به اطلاعات و ویژگی‌های موجود برای یک شئ خصوصیت یا Atribute می‌گویند و اعمالی که یک شئ می‌تواند از خود بروز دهد رفتار یا Behavior نام دارند.

در مثال بالا خودرو را به عنوان یک شئ یا Object در نظر بگیرید، خصوصیات این شئ عبارتند از رنگ، سرعت و… که همان Attributeها هستند، همچنین اعمالی مانند حرکت کردن، بوق زدن و… رفتارها یا Behavior‌های این شئ نامیده می‌شوند.

در ادامه بیشتر با این مفاهیم در برنامه‌نویسی آشنا خواهیم شد و ارتباط آن‌ها را با برنامه‌نویسی شئ‌گرا بیان خواهیم کرد، اما در ابتدا بیایید با چند مفهوم دیگر در شئ‌گرایی آشنا شویم.

مفهوم کلاس (Class) در شئ‌گرایی چیست؟

به زبان ساده می‌توان کلاس را به عنوان قالبی برای اشیا در نظر گرفت، مثلا خودروی BMW یک نمونه شئ از کلاس خودرو است، کلاس‌ها معمولا در بردارنده‌ی خصوصیات و رفتار اشیا هستند، مثلا کلاس خودرو دربردارنده‌ی ویژگی‌های یک خودرو مثل سرعت، وزن، رنگ و… است و هر مدل خودرویی که از این کلاس در نظر بگیریم تمامی ویژگی‌های گفته شده در کلاس را درون خود خواهد داشت، برای درک بهتر این مفهوم تصویر زیر را ببینید:

آشنایی با مفاهیم شئ‌گرایی و برنامه‌نویسی شئ‌گرا به زبان ساده
کلاس خوردو، شامل خصوصیات و رفتارها

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

در حالت عادی شما کل برنامه را در قالب دستورات و توابع پشت سر هم می‌نویسید (Procedural) و برای تغییر هرچیزی از برنامه احتیاج دارید تا کل ساختار برنامه را بررسی کرده و موارد مورد نیاز را تغییر دهید.

فرض کنید در حال نوشتن برنامه‌ای در خصوص مدیریت خودروها هستید، شما برای هر مدل خودرو چندین خط کد می‌نویسید، در ادامه تصمیم می‌گیرید ویژگی جدیدی به خودروهای خود اضافه کنید، مثلا میزان شتاب خودرو، در این صورت باید کل دستورات برنامه را جستجو کرده و در تمام خطوط این ویژگی جدید را به تمامی خودروها اضافه کنید.

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

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

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

مفهوم ارث‌بری (Inheritance) در شی گرایی

به زبان بسیار ساده، اشیا خصوصیات و رفتارها را از کلاس والد خود به ارث می‌برند، به عنوان مثال خودروی BMW خصوصیاتی مانند سرعت، وزن، رنگ و… را از کلاس اصلی (والد) خود به ارث برده است، هر شئ دیگری نیز از این کلاس بسازید این ویژگی‌ها را در خود دارد، یک کلاس می‌تواند تعدادی ویژگی را از کلاس دیگری به ارث ببرد، در این صورت شئ ساخته شده از کلاس جدید، ویژگی‌های هردو کلاس را در خود خواهد داشت، این مفهوم را ارث‌بری می‌نامیم.

آشنایی با مفهوم Public و Private در کلاس‌ها

همانطور که بالاتر اشاره کردیم داده‌های موجود در کلاس از بیرون قابل دستیابی نیستند و این مفهوم به کمک وضعیت Private برای داده‌ها امکان‌پذیر خواهد بود، در حالت کلی حالات مختلفی برای داده‌ها قابل استفاده است، حالت Private یعنی داده‌ها تنها داخل کلاس شناخته‌شده هستند و در خارج از کلاس امکان مشاهده و تغییر آن‌ها وجود نخواهد داشت، اما در نقطه‌‌ی مقابل در حالت Public است که اطلاعات موجود در کلاس در خارج از بدنه‌ی کلاس نیز قابل دستیابی و تغییر هستند.

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

class Car {
    int Speed;
    int Weight;
    string Color;
    void Moving();
    void Brake();
    void Hoot();
}

اگر به این قطعه کد دقت کنید و آن را با تصویر بالا (خودرو) مقایسه کنید شباهت آن‌ها را خواهید یافت.

مزایای برنامه‌نویسی شئ‌گرا چیست؟

هرچند برنامه‌نویسی شئ‌گرا در ابتدا شاید کمی پیچیده به نظر برسد و احتیاج به تجزیه تحلیل‌های اولیه‌ی برای پیاده‌سازی برنامه داشته باشد، اما در دراز مدت و در مراحل تست و نگه‌داری برنامه به شدت به کمک شما خواهد آمد، از ویژگی‌های برنامه‌نویسی شئ‌گرا می‌توان به موارد زیر اشاره کرد:

  • افزایش امنیت برنامه
  • کاهش هزینه نگهداری
  • قابلیت استفاده مجدد
  • تحلیل ساده‌تر برنامه

همانطور که در ابتدای مقاله گفتیم برنامه‌نویسی شئ‌گرا به شدت به دنیای واقعی ما انسان‌ها شباهت دارد و معمولا ساده‌تر توسط ذهن درک می‌شود، بنابراین سعی کنید تا حد ممکن برنامه‌های خود را با استفاده از اصول شئ‌گرایی نوشته و به دنیای برنامه‌نویسان حرفه‌ای نزدیک‌تر شوید.

شما یک گام جلوتر از دیگران باشید! اگر به آی‌تی و تکنولوژی علاقه‌مندید و دوست دارید سریع‌تر در این زمینه پیشرفت کنید، همین حالا به جمع ۲۷۸۳ عضو همیار آی‌تی بپیوندید، دسترسی به تمام آموزش‌های پریمیوم، دریافت جدیدترین آموزش‌های کاربردی مرتبط با آی‌تی و استفاده از مشاوره‌ی رایگان، برخی از مزایای عضویت در سایت هستد، شما نیز به کاربران همیار پیوسته و همین حالا وارد دنیای حرفه‌ای‌ها شوید... من هم می‌خواهم عضو ویژه‌ی همیار شوم

30 گفتگو

در بحث‌‌ پیرامون این مقاله شرکت کنید، سوالات شما توسط کارشناسان همیار آی‌تی پاسخ داده می‌شود...

  1. Avatar حسام گفت:

    بسیار روان و ساده این مفهوم رو برام جا انداختید.
    خدا خیرتون بده

    1. فرشاد گوهری فرشاد گوهری گفت:

      خیلی خوشحالیم که این آموزش برای شما مفید بوده حسام عزیز.

  2. Avatar ناشناس گفت:

    همین؟؟؟ با عنوانش سازگارنبود. خیلی خلاصه هست و مفاهیم دیگه پس چی؟ حداقل ۴ تا مفهوم اصلی

  3. Avatar کامران محمدی گفت:

    سلام.وقت بخیر
    متدها و تعریف property و تفاوت ان در js با css و.. و تفاوت ان با اتربیوت ها هم اگر بشود توضیحی ارایه فرمایید.
    با تشکر

  4. Avatar علی اصغر خلفی گفت:

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

    1. فرشاد گوهری فرشاد گوهری گفت:

      خیلی خوشحالیم که این آموزش برای شما مفید بوده علی‌اصغر عزیز

  5. سمیرا سمیرا گفت:

    خیلی خوب بود.اما جا داشت که به مفاهیم دیگر هم بپردازید.مثل پلی مارفیسم و ….

    1. فرشاد گوهری فرشاد گوهری گفت:

      سلام، ممنون از اینکه دیدگاهتون رو با ما به اشتراک گذاشتید، سعی می‌کنیم مقاله رو به زودی به‌روزرسانی کرده و این موارد رو هم داخلش درج کنیم.

  6. Avatar omid گفت:

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

    1. فرشاد گوهری فرشاد گوهری گفت:

      سلام امید عزیز، خیلی خوشحالیم که این آموزش برای شما مفید بود و در درک مفهوم شی‌گرایی به شما کمک کرد.

  7. Avatar ناشناس گفت:

    خیلی مفید بود مچکرم

  8. Avatar ناشناس گفت:

    ممنون .
    منظورتون از برنامه زیمنس همان زبان برنامه نویسی PLC است ؟ من به زبان برنامه ریزی plc مسلط هستم . دنبال برنامه ای میگردم که با این محیط های برنامه نویسی قابل مچ شدن باشد .

    1. فرشاد گوهری فرشاد گوهری گفت:

      سلام، بله زبان برنامه‌نویسی زیمنس که برای PLC استفاده میشه، البته من خودم تخصص اصلیم آی‌تی هست و برنامه‌نویسی سخت‌افزار کار نمی‌کنم، این زبان رو یکی از دوستان به عنوان زبان مناسب برای کار PLC به بنده معرفی کردند.

  9. Avatar خسرو گفت:

    درود استاد عزیز.
    بنده در حال فعالیت در رشته اتوماسیون صنعتی هستم . به عبارتی برنامه ریزی کنترل کننده ها به نام PLC . تا حدودی میتوان گفت مشابه برنامه نویسی کامپیوتر است . البته تا حدودی.
    از خیلی دوستان سوال پرسیدم که بهترین زبان برای اینکه بتوانم برنامه ای بنویسم تا با این کنترلر ها ارتباط برقرار کنم چه هستش ؟

    1. فرشاد گوهری فرشاد گوهری گفت:

      سلام، زبان siemens برای اینکار مناسبه و میتونید ازش استفاده کنید.

  10. Avatar سوله بیستون سازه گفت:

    بسیار عالی حرف نداره واقعا لذت میبرم

  11. Avatar vidao.ir گفت:

    خوشمان امد

  12. Avatar قیمت رنو سفران گفت:

    خوب بود

  13. Avatar فاطمه گفت:

    خیلی ممنون آقای گوهری با حرفاتون بهم انگیزه دادید، پس به مسیرم ادامه میدم. باز هم بخاطر راهنمایی هاتون ممنون من سایتتون رو دنبال میکنم. اگر از مطالب آموزشی react هم بزارید که دیگه چه بهتر

    1. فرشاد گوهری فرشاد گوهری گفت:

      خواهش می‌کنم، سعی می‌کنیم آموزش‌های بیشتری در خصوص مفاهیم برنامه‌نویسی در سایت منتشر کنیم.

  14. Avatar فاطمه گفت:

    بله آقای گوهری من میخام برنامه نویسی react رو یاد بگیرم. در این زمینه در حال تحقیق هستم. در حال حاضر هم دارم ECS6 رو کار می‌کنیم.
    اما هنوز نمیدونم که آیا react درآمد زا هست یا خیر؟
    البته در آخر react native رو یاد میگیرم. در این زمینه اگه اطلاعاتی دارید ممنون میشم

    1. فرشاد گوهری فرشاد گوهری گفت:

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

  15. Avatar فاطمه گفت:

    خیلی ممنون بخاطر توضیحاتتون برای بنده که مفید بود

    1. فرشاد گوهری فرشاد گوهری گفت:

      خوشحالیم که این آموزش برای شما مفید بوده، اگر به برنامه‌نویسی علاقه‌مندید، می‌تونید مجموعه آموزش‌های زیر رو هم مطالعه کنید:
      https://www.hamyarit.com/programing/

  16. Avatar امیر گفت:

    خیلی روان و ساده توضیح دادید ممنون ، ولی ای کاش مفاهیم پیچیده تر oop را مثل : وراثت ، Encap توضیح میدادید sulation ، abstraction ، Polymorphism راهم

    1. فرشاد گوهری فرشاد گوهری گفت:

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

  17. Avatar زینب گفت:

    سلام استاد، مقاله خوبتون رو مطالعه کردم و سوالی برام پیش اومد. الان میشه گفت شی گرایی همون تابع هست؟ چون تابع هم کاربردش همینه، یکبار مینویسیم و چندین بار استفاده میکنیم.

    1. فرشاد گوهری فرشاد گوهری گفت:

      سلام دوست عزیز

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

      موفق باشید

  18. Avatar علم رایانه گفت:

    ممنون ولی خیلی سخت و پیچیده توضیح دادید…

    1. فرشاد گوهری فرشاد گوهری گفت:

      تمام سعی ما بر این بوده که تا حد ممکن این مبحث رو بسیار ساده شرح بدیم ولی خب بحث شئ‌گرایی در کل کمی پیچیده و سنگین هست، مقاله رو کامل مطالعه بفرمایید هرجا سوال یا ابهامی بود بپرسید بنده سعی می‌کنم تا حد ممکن راهنماییتون کنم.