برنامهنویسی شئگرا (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(); }
اگر به این قطعه کد دقت کنید و آن را با تصویر بالا (خودرو) مقایسه کنید شباهت آنها را خواهید یافت.
مزایای برنامهنویسی شئگرا چیست؟
هرچند برنامهنویسی شئگرا در ابتدا شاید کمی پیچیده به نظر برسد و احتیاج به تجزیه تحلیلهای اولیهی برای پیادهسازی برنامه داشته باشد، اما در دراز مدت و در مراحل تست و نگهداری برنامه به شدت به کمک شما خواهد آمد، از ویژگیهای برنامهنویسی شئگرا میتوان به موارد زیر اشاره کرد:
- افزایش امنیت برنامه
- کاهش هزینه نگهداری
- قابلیت استفاده مجدد
- تحلیل سادهتر برنامه
همانطور که در ابتدای مقاله گفتیم برنامهنویسی شئگرا به شدت به دنیای واقعی ما انسانها شباهت دارد و معمولا سادهتر توسط ذهن درک میشود، بنابراین سعی کنید تا حد ممکن برنامههای خود را با استفاده از اصول شئگرایی نوشته و به دنیای برنامهنویسان حرفهای نزدیکتر شوید.