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

اگر برنامه نویسی را در حد مبتدی شروع کرده باشید و یا حتی به زبان های مختلف نگاهی کرده باشید، احتمالا با عبارت "برنامه نویسی شی گرا" و یا به عبارتی دیگر OOP آشنا هستید. مطالب فنی زیادی در این مورد وجود دارد که میتوان همه ی آنها را بیان کرد اما امروز قصد داریم به روشی ساده این متد برنامه نویسی را برای شما توضیح دهیم.بررسی زبان های رویه ایبرای درک یک زبان برنامه نویسی شی گرا باید بدانید این متد به عنوانی جایگزین برای چه روش هایی استفاده میشود. زبان های برنامه نویسی ابتدایی، به اصطلاح رویه ای هستند، زیرا برنامه نویس مجموعه ای از رویه ها را برای اجرا در کامپیوتر تعریف میکند. جالب است بدانید در اولین روزهای برنامه نویسی، رویه ها بر روی کارت های پانچ نوشته میشدند. به این طریق داده ها را به کامپیوتر منتقل کرده و سپس مجموعه ای از عملیات بر روی داده ها انجام میشد و نتیجه آنها چیزی بود که ما میخواستیم.زبان های رویه ای برای زمانی بسیار خوب عمل میکردند (حتی عده ای هنوز از آنها استفاده میکنند). اما زمانی که می خواهید چیزی فراتر از مجموعه از مراحل را برنامه نویسی کنید، زبان های رویه ای می توانند برای مدیرت پروژه مشکل ساز شوند. اینجا دقیقا جایی است که برنامه نویسی شی گرا وارد میشود.برنامه نویسی شی گراحالا بیایید ببینیم برنامه نویسی شی گرا چیست؟اولین زبان برنامه نویسی شی گرا (همه معتقدند سیمولا اولین زبان برنامه نویسی شی گرا بود) ایده ی اشیا را معرفی کرد. اشیاء مجموعه ای از اطلاعات هستند که به عنوان یک موجودیت منحصر به فرد معرفی میشوند. ما در این مقاله در این زمینه کمی عمیق تر خواهیم شد اما اجازه دهید در ابتدا در مورد کلاس ها صحبت کنیم. کلاس ها مفهوم و تعریف اشیا را ارائه میدهند. کلاس ها حاوی لیستی از مشخصه ها هستند که وقتی تعریف میشوند به یک شی تبدیل میشوند.بیایید مثال خود را از یک بازی شطرنج مطرح کنیم. ممکن است کلاسی به نام Piece (مهره) داشته باشیم. در داخل این کلاس، لیستی از ویژگی های زیر را داریم:رنگارتفاعشکلحرکت مجازشی ایی از این کلاس زمانی که تعریف میشود شامل همه مشخصا فوق است. بنابراین می توانیم یک شی به نام WhiteQueen داشته باشیم. این شی برای هر چهار مشخصه بالا دارای تعاریف خاصی است (سفید، بلند، استوانه ای، هر تعداد از حرکت در هر جهت). این شی حتی ممکن است دارای متدها و توابع مشخصی هم باشد.?اما چه چیزی باعث میشود این روش از روش رویه ای بهتر باشد؟ به طور خلاصه، سازماندهی داده ها و کد ها در زبان های برنامه نویسی شی گرا (مانند جاوا) برای پروژه های بزرگتر آسان تر است. برای بحث و گفتگو با جزئیات بیشتر در این مورد، ما در مورد چهار اصل برنامه نویسی شی گرا صحبت خواهیم کرد.برنامه نویسی شی گرا : Abstractionوقتی میخواهید با چیزی کار کنید همیشه لازم نیست بدانید چطور کار میکند. به عنوان مثال یک دستگاه اسپرسو، ، پیچیده است. اما شما لازم نیست بدانید که چگونه کار می کند. فقط باید بدانید که هنگامی که "On" را فشار می دهید، قهوه اسپرسو را دریافت خواهید کرد.?همین مسئله در مورد برنامه نویسی شی گرا نیز صادق است. در مثال شطرنجی که در بالا به آن اشاره کردیم ممکن است متدی به نام ()move داشته باشیم. این متد ممکن است برای انجام کار خود به متدها و داده های دیگری نیاز داشته باشد.ممکن است نیاز داشته باشد موقعیت کنونی و موقعیت نهایی را بداند. اما این کار را متدی دیگر برای او انجام میدهد، او لازم نیست بداند این کار به چه طریقی انجام میشود. حتی زمانی که از متد ()move برای حرکت استفاده میکنید فقط استفاده از این متد برای حرکت کردن شما کافیست و لازم نیست بدانید این کار به شکلی انجام میشود.این مفهوم Abstraction و یا اتزاع در متد شی گرایی است که اشیا عملیات خود را از دیگران مخفی نگه میدارند. در این صورت پیچیدگی به شدت کاهش میبابد.برنامه نویسی شی گرا : EncapsulationEncapsulation یکی از راه هایی است که برنامه نویسی شی گرا از طریق آن انتزاع را ایجاد میکند. هر شی ایی مجموعه ای از داده ها است که که با آن به عنوان موجودیتی واحد رفتار خواهد شد. درون اشیا داده ها قرار دارند(هم متغیر ها و هم متد ها).متغیرهای درون یک شی به طور کلی خصوصی نگهداری می شوند، به این معنی که اشیاء و متدهای دیگر نمی توانند به آنها دسترسی پیدا کنند. اشیا تنها از طریق متدهای خود تاثیر میپذیرند. مهره فیل در بازی شطرنج میتواند شامل اطلاعات مختلفی باشد. برای مثال، می تواند متغیری با نام "position" داشته باشد. این متغیر برای استفاده در متد ()move میتواند حیاتی باشد.با خصوصی قرار دادن متغیر "position" و عمومی قرار دادن متد ()move برنامه نویس از تاثیر ناپذیری متغیر توسط چیزی غیر از متد ()move مطمئن خواهد شد و این همان مفهوم کپسوله سازی در برنامه نویسی شی گراست.برنامه نویسی شی گرا : ارث بریعلاوه بر کلاسها، زبانهای برنامه نویسی شی گرا شامل زیر کلاس ها هم هستند. زیر کلاس ها همه میتوانند همه مشخصات کلاس های والد خود را به ارث ببرند و خود نیز مستقلا دارای مشخصه های مربوط به خود باشند.در بازی شطرنج ما، زمانی که مهره سرباز به انتهای صفحه شطرنج در زمین رغیب میرسد میتواند به مهره ای دیگر تبدیل شود. در اینجا میتوانیم متدی به نام ()transformPiece را برای شی سرباز پیاده سازی کنیم. با این حال همه مهره های سرباز نمیتوانند به انتهای زمین رغیب برسند و البته بیشتر آنها نمیتوانند از این متد استفاده کنند.پس میتوان به جای تعریف این متد در کلاس اصلی ، زیر کلاسی برای کلاس سرباز ایجاد کرد که همه مشخصات کلاس والد خود را به ارث میبرد و فقط شامل متد ()transformPiece برای تبدیل به مهره ای دیگر است.برنامه نویسی شی گرا : PolymorphismPolymorphism و یا به عبارت دیگر چند ریختی نتیجه وراثت است. درک کامل مفهوم چندریختی نیاز به کمی دانش برنامه نویسی دارد، بنابراین در اینجا اصول اولیه را بیان میکنیم. به طور خلاصه، پلی مورفیسم به برنامه نویسان اجازه میدهد از متد های همنام اما به همراه اشیای مختلف استفاده کنند.برای مثال کلاس مهره در بازی شطرنج شامل متدی به نام ()move برای حرکت به اندازه یک خانه در هر جهتی است که البته برای مهره پادشاه عالی عمل میکند، اما برای مهره های دیگر مناسب نیست. برای حل مشکل میتوان در زیر کلاس های هر مهره متدی با همین نام را تعریف کرده که بسته به نوع مهره میتواند نوع حرکت را مشخص کند. اکنون برنامه نویس فقط کافی است متد ()move را بر روی مهره ای اعمال کند . در این صورت خود برنامه میداند نحوه حرکت به چه شکل است.