برنامه نویسی شی گرا (OOP) چیست؟ — به زبان ساده
اگر تاکنون هر گونه برنامه نویسی انجام داده باشید و یا حتی صرفاً زبانهای مختلف نظیر زبان برنامه نویسی COBOL را بررسی کرده باشید، احتمالاً تاکنون با عبارت «برنامه نویسی شیءگرا» و «مفهوم کلاس در برنامه نویسی» مواجه شدهاید. توضیحات فنی مختلفی در خصوص مفهوم برنامه نویسی شیءگرا وجود دارد؛ اما در این نوشته قصد داریم تعریف این مفهوم برنامه نویسی را به روشی ساده بیان کنیم.
سرآغاز: زبانهای رویهای
برای این که بدانیم برنامه نویسی شیءگرا چیست، ابتدا باید نقیض آن را بشناسیم. زبانهای برنامه نویسی اولیه به صورت رویهای بودند. دلیل این نامگذاری آن بود که در این زبانها، برنامهنویس باید مجموعه خاصی از رویهها را تعریف مینمود که رایانه آنها را به ترتیب اجرا میکرد.
در زمانهای نخست برنامه نویسی، رویهها بر روی کارتهای پانچ نوشته میشدند. رایانهها بدین ترتیب دادهها را گرفته، یک توالی از اقدامات را بر روی دادهها انجام داده و سپس دادههای جدید را در خروجی ارائه میکردند.
زبانهای رویهای تا مدتها به خوبی کار میکردند و برخی از آنها نیز همچنان مورد استفاده قرار میگیرند. اما زمانی که قرار بود برنامهنویس کاری را خارج از ترتیب مقدماتی مراحل انجام دهد، مدیریت زبانهای برنامه نویسی دشوار میشد. بدین ترتیب زبانهای برنامه نویسی شیءگرا وارد عرصه شدند.
هدف از برنامه نویسی شیءگرا
سؤالی که در این جا مطرح میشود، این است که برنامه نویسی شیءگرا چیست؟ نخستین زبان برنامه نویسی شیءگرا (که عموماً اعتقاد بر این است Simula بوده است) ایده اشیا را معرفی کرد. اشیا مجموعهای از اطلاعات هستند که به عنوان واحدی منفرد با آنها رفتار میشود.
این مفهوم را با ارائه مثالی در ادامه بیشتر توضیح میدهیم؛ اما نخست در مورد کلاسها صحبت میکنیم. کلاسها نوعی از اشیای مقدماتی هستند. آنها فهرستی از خصوصیات دارند که وقتی تعریف میشوند، تبدیل به یک شیء میگردند.
برای مثال به یک بازی شطرنج اشاره میکنیم. در بازی شطرنج میتوانیم کلاسی به نام «مهره» (Piece) داشته باشیم. درون این کلاس مهره، فهرستی از خصوصیات را به صورت زیر داریم:
- رنگ
- ارتفاع
- شکل
- حرکتهای مجاز
هر شیئی صرفاً یک وهله خاص از چیزی که به آن کلاس تعلق دارد را تعریف میکند. بنابراین میتوانیم شیئی به نام وزیر سفید داشته باشیم. این شیء میتواند تعاریفی برای هر چهار خصوصیت خود داشته باشد (رنگ: سفید، ارتفاع: بلند، شکل: استوانهای دارای تاج، حرکت: به تعداد نامحدود در هر جهت) این شیء میتواند متدها یا تابعهایی نیز داشته باشد.
اصول برنامه نویسی شیء گرا
سؤالی که در این مرحله ممکن است بپرسید این است که چه چیزی باعث میشود برنامه نویسی شیءگرا بهتر از برنامه نویسی رویهای باشد؟ به طور خلاصه باید گفت که زبانهای برنامه نویسی شیءگرا مانند جاوا امکان سازماندهی دادهها و کد را به ترتیبی فراهم میسازند که در پروژههای بزرگتر سازگاری بیشتری داشته باشند. برای این که این مسئله را بیشتر توضیح دهیم در ادامه چهار اصل برنامه نویسی شیءگرا را توضیح خواهیم داد.
مفهوم تجرید در برنامه نویسی شیءگرا
این که قصد دارید از چیزی استفاده کنید، دلیل نمیشود که طرز کار آن را میدانید. برای مثال یک دستگاه اسپرسو کاملاً پیچیده است، اما شما لازم نیست طرز کار آن را بدانید. شما کافی است بدانید که وقتی دکمه روشن دستگاه را میزنید، اسپرسو دریافت خواهید کرد.
همین مسئله در مورد برنامه نویسی شیءگرا نیز صدق میکند. در مثال بازی شطرنج میتوانیم یک متد ()move داشته باشیم. این متد ممکن است نیازمند مقادیر بالایی از دادهها و متدهای دیگر باشد. همچنین ممکن است نیازمند متغیرهایی به صورت موقعیت اولیه و نهایی مهره باشد. علاوه بر این موارد ممکن است به یک متد دیگر برای زمانی که مهرهای یک مهره دیگر را میزند نیاز داشته باشد.
اما نیاز نیست که اینها را بدانید و همه آنچه که باید بدانید این است که زمانی که از مهرهای میخواهیم حرکت کند، مهره حرکت میکند. این مفهوم تجرید است.
مفهوم کپسولهسازی در برنامه نویسی شیءگرا
کپسولهسازی یکی از روشهایی است که برنامه نویسی شیءگرا برای ساخت تجرید استفاده میکند. هر شیء مجموعهای از دادهها است که با آن به عنوان یک واحد مجزا برخورد میشود. درون این اشیا نیز دادهها به صورت متغیر و متد قرار دارند.
متغیرهای درون شیء به طور کلی مجزا باقی میمانند و این به آن معنی است که اشیا و متدها نمیتوانند به همدیگر دسترسی داشته باشند. اشیا تنها از طریق استفاده از متدهایشان تأثیر میپذیرند.
یک شیء وزیر میتواند شامل چند بخش از اطلاعات باشد. برای نمونه میتواند متغیری به نام «موقعیت» داشته باشد که مکان آن را روی صفحه تعیین میکند. این متغیر برای استفاده از متد ()move لازم است. و همچنین یک متغیر رنگ نیز دارد.
با اعلان خصوصی متغیر موقعیت و اعلان عمومی متد ()move برنامهنویس میتواند از تأثیرپذیری متغیرهای حرکت از اشیای دیگر جلوگیری نماید. رنگ مهره نیز اگر به صورت خصوصی اعلان شود، اشیای دیگر نمیتوانند آن را تغییر دهند؛ مگر این که متدی اجازه این کار را به آنها بدهد. البته در این مورد چنین کاری مجاز نیست چون رنگ مهرههای شطرنج همواره ثابت است.