برنامه نویسی شی گرا چیست؟ اصول برنامه نویسیِ شی گرا در اصطلاحات لیِمَن

اگر مقداری برنامهنویسی مقدماتی انجام دادهاید، یا حتی شروع به نگاه به زبانهای (برنامهنویسی) مختلف کردهاید، احتمالاً اصلاح برنامهنویسی شی گرا را شنیدهاید. (یا OOP)
همه نوع تعریف فنی در مورد اینکه برنامهنویسی شی گرا چیست وجود دارد، اما ما میخواهیم نگاهی به تعریف ساده برنامهنویسی شی گرا بیندازیم.
قبل از اینکه شروع کنیم: زبانهای برنامهنویسی ساختیافته (رویهای)
برای اینکه فهمِ زبان برنامهنویسی شی گرا، باید اینکه جایگزین چه شده را درک کنیم. زبانهای برنامهنویسی اولیه-ساخت یافته (رویهای) بودند و علت این نامگذاری آن بود که برنامهنویس، رویههای خیلی مشخصی تعریف میکرد که کامپیوتر میتوانست به عهده بگیرد. در این روزهای ابتدایی، رویهها روی پانچ کارتها نوشته میشدند. این مراحل داده را میگرفتند، دنبالهای از اقدامات را رویداده انجام میدادند، سپس داده جدیدی تولید میکردند. زبانهای برنامهنویسی ساختیافته برای مدتی خیلی خوب کارکردند (و برخی از این زبانها هنوز هم مورداستفاده قرار میگیرند). اما زمانی که قصد کد زنی چیزی را ورای مراحل پایهای این دنباله گامها داشته باشید، مدیریت زبانهای ساختیافته سخت خواهد شد.
هدف برنامهنویسی شیگرا
بنابراین، برنامهنویسی شی گرا چیست؟ اولین زبان برنامهنویسی شی گرا (عموماً روی Simula توافق شده است) ایده اشیا را معرفی کرد. اشیا مجموعهای از اطلاعات هستند که بهعنوان یک موجودیت منحصربهفرد با آنها برخورد میشود. در مورد معنیِ جمله بالا در یک ثانیه با یک مثال عمیقتر میشویم، اما اول باید راجع به کلاسها صحبت کنیم. کلاسها بهنوعی پیش-اشیا هستند. آنها شامل لیستی از صفات هستند که هنگام تعریف، تبدیل به شیء میشوند.
اجازه دهید مثال برنامهنویسی بازی شطرنج را در نظر بگیریم. ممکن است کلاسی به نام Piece داشته باشیم. داخل این کلاس ما صفات زیر راداریم:
• رنگ
• ارتفاع
• شکل
• حرکت مجاز
یک شی بهسادگی یک نمونه بخصوص را از یکچیز که متعلق به آن کلاس است، تعریف میکند. بنابراین ما میتوانیم شیای به نام WhiteQueen (وزیر سفید) داشته باشیم. اینشی میتواند برای هر چهار صفت (سفید، بلند، استوانهای یا قلعه مانند و هر تعداد فضا به هر سمتی) تعاریفی داشته باشد. اینشی میتواند حتی متدها یا function هایی داشته باشد.
چه چیزی موجب میشود تا برنامهنویسی شیءگرا از رویکرد ساختیافته خیلی بهتر باشد؟
بهطور خلاصه، زبانهای برنامهنویسی شیءگرا (مثل جاوا) سازماندهی دادهها و کدها را آسانتر میکنند، به طریقی که با پروژههای بزرگ منطبقتر و مناسبتر است.
برای اینکه بیشتر وارد جزییات شویم، راجع به چهاراصل اساسی برنامهنویسی شیءگرا صحبت میکنیم.
اصل اول برنامهنویسی شیءگرا: Abstraction (انتزاع)
اینکه بخواهیم از چیزی استفاده کنیم، به این معنی نیست که لازم است نحوهٔ کارکردش را هم بدانیم. برای مثال یک ماشین اسپرسو پیچیده است. اما لازم نیست که شما بدانید چطور کار میکند. شما فقط لازم است بدانید که وقتی دکمه On را بزنید، به شما اسپرسو میدهد. همین قضیه هم برای اشیا در برنامه نویسی شی گرا صدق میکند. در مثال شطرنج ما، ممکن است که متد ()move داشته باشیم. این متد ممکن است نیاز به مقدار زیادی داده و متدهای دیگر داشته باشد. ممکن است به نیاز به متغیرهای موقعیت اولیه و متغیرهای موقعیت نهایی باشد. ممکن است متدی دیگر باشد برای تعیین اینکه یک piece را گرفته است یا خیر. اما نیازی نیست که آن را بدانید. تمام چیزی که باید بدانید این است که زمانی که به piece گفتید حرکت کند، حرکت کند. این همان abstraction است.
اصل دوم برنامه نویسی شی گرا: Encapsulation (کپسوله سازی)
کپسولهسازی یکی از راههای برنامهنویسی شیگرا برای ایجاد انتزاع (abstraction) است. هر شی مجموعهای از داده است که بهمانند یک موجودیت واحد در نظر گرفته میشود. و درون آن اشیا داده وجود دارد- هم از نوع متغیر و هم از نوع متد. متغیرهای درون یکشی، بهطورکلی خصوصی (private) نگهداشته میشوند، که به معنی این است که اشیا و متدهای دیگر نمیتوانند به آنها دسترسی داشته باشند. اشیا تنها با استفاده از متدهایشان تحت تأثیر قرار میگیرند.
یکشی فیل ممکن است شامل piece اطلاعات باشد. برای مثال، میتواند متغیری به نام “position” داشته باشد. این متغیر برای استفاده از متد ()move ضروری است و البته یکرنگ دارد. با private کردن متغیر position و public کردن متد ()move، یک برنامهنویس از متغیر متد move محافظت میکند تا هیچچیز دیگری روی آن تأثیر نگذارد. و اگر رنگ یک متغیر private است، هیچ راه دیگری برایشی دیگر وجود ندارد که آن را تغییر دهد، مگر متدی وجود داشته باشد که اجازه این تغییر را بدهد. (که شما احتمالاً این متد را ندارید، چراکه رنگ هر یک از مربعهای صفحه شطرنج باید ثابت بماند.)
این متدها و متغیرها داخلشی bishop (فیل در شطرنج) نگهداشته میشوند. چراکه کپسولهسازی شدهاند، یک برنامهنویس میتواند ساختار یا محتواهای یکشی را بدون نگرانی درباره interface (واسط) public تغییر دهد.
بخش دوم مقاله را از لینک زیر خوانید:
برنامه نویسی شی گرا چیست؟ اصول برنامه نویسیِ شی گرا در اصطلاحات لیِمَن (بخش دوم)