برنامه نویسی شیءگرا چیست؟
1397/12/14 17:23 , میلاد صاحب نظر

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

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

تعاریف تکنیکی مختلفی برای شیءگرایی وجود دارند، اما امروز ما یک تعریف خیلی ساده از برنامه نویسی شیءگرا ارائه خواهیم کرد.

قبل از اینکه شروع کنیم: تعریف زبان‌های رویه‌ای

برای اینکه درک کنید یک زبان برنامه نویسی شیءگرا چیست، ابتدا باید بفهمید که این زبان‌ها جایگزین چه چیزی شده‌اند. زبان‌های برنامه نویسی ابتدایی به صورت رویه‌ای بودند – به آن‌ها رویه‌ای می‌گفتند چون مجموعه خیلی خاصی از رویه‌ها را تعریف می‌کردند که رایانه از آن‌ها پیروی می‌کرد.

زبان‌های رویه‌ای

زبان‌های رویه‌ای

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

زبان‌های رویه‌ای در آن زمان خیلی خوب بودند(و بعضی‌ها هنوز هم که هنوزِ کاربرد خودشان را دارند). اما وقتی می‌خواهید برنامه‌ای ورای توالی ساده‌ای از اقدامات و اعمال ساده و غیر پیچیده بنویسید، زبان‌های رویه‌ای دیگر جوابگو نخواهند بود. اینجاست که برنامه نویسی شیءگرا پا به میدان می‌گذارد.

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

بسیار خب، برنامه نویسی شیءگرا چیست؟

اولین زبان شیءگرا(که اکثرا معتقدند زبان Simula است) ایده اشیاء را معرفی کرد. اشیاء مجموعه‌ای از اطلاعات هستند که به عنوان یک entity یا موجودیت یکتا در نظر گرفته می‌شوند.

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

تعریف شیء و شیءگرایی

تعریف شیء و شیءگرایی

برای مثال، برنامه نویسی یک بازی شطرنج را در نظر بگیرید. ممکن است کلاسی به نام مهره داشته باشیم. درون کلاس مهره، ما لیستی از اتریبیوت‌ها را داریم:

  • رنگ
  • ارتفاع
  • شکل
  • نوع حرکت

شیء، به زبان ساده یک نمونه واقعی و موجود از چیزی که به این کلاس تعلق داشته باشد را تعریف می‌کند.

بنابراین ممکن است شیئی به نام "وزیر سفید" داشته باشیم. این شیء تعاریفی از هر ۴ اتریبیوت کلاس ما را دارد(سفید، بلند، شکل استوانه‌ای با یک کلاه، هر تعداد حرکت در هر جهت). همچنین این شیء ممکن است متدها یا توابعی داشته باشد.

حالا چه چیزی باعث می‌شود شیءگرایی خیلی بهتر از روش رویه‌ای باشد؟

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

برای اینکه بیشتر در این مبحث دخول کنیم، در مورد ۴ اصل ساده از برنامه نویسی شیءگرا صحبت خواهیم کرد.

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

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

چکیده سازی

چکیده سازی

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

اما شما لازم نیست از این چیزها اطلاع داشته باشید. تنها چیزی که شما باید بدانید این است که چه موقع به مهره بگویید حرکت کند. به این می‌گویند چکیده سازی.

برنامه نویسی شیءگرا: محصور سازی یا کپسوله سازی

کپسوله سازی

کپسوله سازی

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

یک شیء "فیل" می‌تواند شامل چندین قطعه اطلاعات باشد. برای مثال، می‌تواند متغیری به نام "موقعیت" داشته باشد. این متغیر برای استفاده از متد ()move ضروری است. و مسلما رنگ هم دارد.

برنامه نویس با private کردن متغیر موقعیت و public کردن متد ()move، در برابر هرگونه تاثیرگذاری از هر عامل دیگری بر روی حرکت متغیرش محافظت می‌کند. و اگر رنگ یک متغیر private باشد، بقیه اشیاء به هیچ عنوان نمی‌توانند آن را تغییر دهند، مگر اینکه متدی وجود داشته باشد که اجازه این تغییر را به اشیاء خاصی بدهد. (که احتمالا چنین متدی نداریم، چون رنگ مهره باید همیشه ثابت بماند).

این متغیرها و متدها درون شیء"فیل" نگهداری می‌شوند. چون آن‌ها محصورسازی شده‌اند، برنامه نویس می‌تواند در ساختار یا محتوای شیء تغییر ایجاد کند، بدون اینکه نگران public بودن یا نبودن واسط باشد.

برنامه نویسی شیءگرا: ارث بری

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

در بازی شطرنج، مهره پیاده به متدی نیاز دارد که در صورت رسیدن پیاده به انتهای زمین بازی، آن را به مهره‌های دیگر تبدیل کند. اسم این متد را ()transformPiece می‌گذاریم.

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

اما همچنین شامل متد ()transofrmPiece نیز هست. حالا دیگر هیچوقت لازم نیست نگران استفاده تصادفی شیء "رخ" از این متد باشیم. توضیح تکنیکی به این صورت است:

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

برنامه نویسی شیءگرا: چندریختی

چندریختی از جمله نتایج ارث بری است. درک کامل چندریختی به کمی علم برنامه نویسی نیاز دارد، بنابراین فقط اصول اولیه و ساده آن را بیان می‌کنیم. به زبان ساده، چندریختی به برنامه نویسان اجازه می‌دهد از متدهای همنام، اما دارای اشیاء مختلف استفاده کنند.

برای مثال، کلاس مهره ما دارای متد ()move است که یک قطعه را به اندازه یک خانه در یک جهت حرکت می‌دهد. این متد برای مهره شاه عمل می‌کند، اما برای بقیه مهره‌ها نه.

برای برطرف کردن این مشکل، می‌توانیم یک متد ()move  جدید در زیر کلاس "رخ" تعریف کنیم، که در این زیر کلاس متد ()move حرکت را به صورت جا به جایی بدون محدودیت به جلو، عقب، چپ یا راست تعریف می‌کند.

حالا، وقتی برنامه نویس متد ()move را فراخوانی کرده و از یک مهره به عنوان آرگومان آن استفاده می‌کند، برنامه دقیقا می‌داند که آن مهره چگونه باید حرکت کند. این ویژگی به میزان زیادی در زمان برنامه نویس صرفه‌جویی می‌کند، چون برنامه نویس دیگر لازم نیست به استفاده از متدهای مختلف فکر کند.

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

اگر بعد از مطالعه آن چهار تعریف مفصل مغزتان دود کرده است، زیاد نگران نباشید. در ادامه ما همه اطلاعات اصلی که لازم است به خاطر بسپارید را به طور خلاصه بیان می‌کنیم:

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

اگر بتوانید این نکات را به خاطر بسپارید، آنگاه تسلط و علم خوبی در مورد اینکه برنامه نویسی شیءگرا چه هست خواهید داشت. تسلط بر ۴ اصل اولیه برنامه نویسی شیءگرا(که به آن‌ها اشاره شد)ممکن است کمی مشکل باشد. اما وقتی شروع به برنامه نویسی کنید، همه چیز برایتان واضح خواهد شد.

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

منبع: makeuseof

 مطالب مرتبط

 مقدمه ای بر زبان برنامه نویسی #C و پلتفرم NET Framework.
 مقدمه ای بر NLog در هسته ASP.NET
 طبقه بندی زبان های برنامه نویسی

چگونه از طریق جاوا (Java)، به یک پایگاه‌داده مای‌اس‌کیوال (MySQL) متصل شویم

 LINQ(زبان جستجوی یکپارچه)

از آخرین دوره های آموزشی و تخفیف ها مطلع شوید

با تکمیل فرم زیر ، از اخبار و اطلاعات به روز برنامه نویسی و تکنولوژی عقب نمانید

آخرین مطالب

آموزش جامع SQL Server (جلسه ۱۲)
آموزش جامع SQL Server (جلسه ۱۲)

دستور UPDATE در SQL Server برای تغییر داده‌های موجود در یک جدول، از دستور UPDATE به شکل زیر استفاده ...

آموزش جامع SQL Server (جلسه ۱۵)
آموزش جامع SQL Server (جلسه ۱۵)

دستور DROP TABLE در SQL Server گاهی، لازم است یک جدول که دیگر استفاده‌ای ندارد را حذف کنید. برای ...

آموزش جامع SQL Server (جلسه ۳۵: Window Functionها – بخش ۲)
آموزش جامع SQL Server (جلسه ۳۵: Window Functionها – بخش ۲)

بخش اول از آخرین مبحث دوره جامع آموزش SQL Server در جلسه قبلی بررسی شد. این مبحث که ...

آخرین دیدگاه ها

دیدگاه خود را درباره این پست بنویسید

فرم ارسال نظرات