Oop چیست؟ انواع و کاربرد آن در برنامه نویسی
در جوامع فناوری محور امروزی، تقاضا برای دانش برنامه نویسی بسیار بالا است برای همین داشتن اطلاعاتی درباره برنامه نویسی شیءگرا (object-oriented programming) یا به اختصار OOP برای توسعه و نگهداری برنامه های نرم افزاری از ارزش بسیار بالایی برخوردار است. ما در این مقاله، اصول اولیه OOP را با مثال هایی ساده و قابل فهم برای شما توضیح می دهیم.
برنامه نویسی شیءگرا چیست؟
برنامه نویسی شیءگرا ترکیبی از گروهی از متغیرها (ویژگی ها) و توابع (روش ها) به شکل واحدی است که آن را یک «شی» می نامند. این اشیاء به صورت کلاس هایی طبقه بندی می شوند که هر کدام از اشیاء موجود در آن ها می تواند با دیگری تشکیل یک گروه بدهد. برنامه نویسی شیءگرا کمک می کند اشیاء را در کدهای یک برنامه پیدا کنید و کارهای مختلفی که در رابطه با هر کدام انجام می شود را تحت نظر بگیرید.
این سبک برنامه نویسی در زبان های برنامه نویسی بسیار متداول مانند جاوا، C++ و PHP به وفور استفاده می شود. این زبان ها به ساده سازی ساختار و سازمان برنامه های نرم افزاری کمک می کند. برنامه نویسان اغلب زمانی از OOP استفاده می کنند که بخواهند برنامه های پیچیده تری تولید کنند.
چهار مبانی برنامه نویسی شیءگرا چیست؟
برنامه نویسی شیءگرا دارای چهار مفهوم اساسی است: کپسوله سازی، انتزاع، وراثت و چندریختی. حتی با اینکه به نظر می رسد این اصطلاحات خیلی پیچیده هستند، اما درک چارچوب کلی چگونگی کار آن ها کمکتان می کند اصول برنامه نویسی کامپیوتری را درک کنید. در ادامه، این چهار مبانی مهم و آنچه آنها را شامل می شوند، توضیح می دهیم:
- کپسوله سازی (Encapsulation)
- انتزاع (Abstraction)
- وراثت (Inheritance)
- پلی مورفیسم یا چندریختی (Polymorphism)
کپسوله سازی (Encapsulation)
اشیاء مختلف داخل هر برنامه به طور خودکار در تلاش هستند تا با یکدیگر ارتباط برقرار کنند. اگر یک برنامه نویس بخواهد اشیا را از تعامل با یکدیگر بازدارد، باید آن ها را در کلاس های فردی کپسوله کند. به این ترتیب، این کلاس ها نمی توانند تغییر یا با متغیرهای خاص و توابع یک شی ارتباط برقرار کنند.
هر کدام از کپسول ها درست مثل یک قرص، حاوی دارویی درون پوسته خود هستند. اصل کپسوله سازی به روش دیجیتالی عمل می کند تا مانعی محافظتی حول اطلاعاتی ایجاد که آن را از سایر کدها جدا می سازد. برنامه نویس ها می توانند این شیء را در بخش های مختلف برنامه یا سایر برنامه ها تکرار کنند.
انتزاع (Abstraction)
انتزاع چیزی شبیه نوع گسترش یافته کپسوله سازی است، چون ویژگی ها و روش های خاصی را از کدهای بیرونی پنهان می کند تا رابط کاربری اشیاء را ساده تر کند. برنامه نویسان از انتزاع به چند دلیل استفاده می کنند. به طور کلی، انتزاع به ایزوله سازی تاثیر تغییرات ایجاد شده در کدها کمک می کند و این کار را طوری انجام می دهد که اگر اشتباهی رخ داد، آن تغییر فقط روی متغیرهایی تاثیر بگذارد که نمایش داده می شوند، نه کد بیرونی.
وراثت (Inheritance)
برنامه نویسان با استفاده از این مفهوم می توانند کارایی کلاس های موجود کد را طوری گسترش بدهند که کدهای تکراری حذف شود. برای مثال، عناصر کد HTML که شامل کادر متن، انتخاب فیلد و کادر انتخاب هستند دارای ویژگی های مشترکی با چند روش خاص هستند.
به جای بازتعریف ویژگی ها و روش ها برای هر نوع عنصر HTML، می توانید آن ها را یک بار در یک شیء عمومی تعریف کنید. نامگذاری شی مذکور به چیزی مانند «HTMLELEMENT» باعث می شود اشیاء دیگر هم ویژگی ها و روش های آن را به ارث ببرند و به این ترتیب، از تعداد کدهای غیرضروری بکاهید.
شیء اصلی سوپرکلاس (superclass) است و همه اشیائی که از آن پیروی می کنند، زیرکلاس (subclass) نامیده می شوند. زیرکلاس ها عناصر جداگانه ای دارند، ولی در عین حال هر چه لازم دارند را از سوپرکلاس ها می گیرند.
پلی مورفیسم یا چندریختی (Polymorphism)
این روش به این معنی است که «فرم ها و اشکال بسیاری» هستند که به برنامه نویسان اجازه رندر چندین عنصر HTML را بسته به نوع شیء می دهند. این مفهوم به برنامه نویسان اجازه می دهد روش عملکرد اشیاء را با تغییر چگونگی انجام آن یا با تغییر بخش هایی که کار در آن انجام می شود، بازتعریف کند. اصطلاحات چندریختی عبارت هستند از «رونویسی» (overriding) و «بار اضافی دادن» (overloading).
نمونه هایی از برنامه نویسی شیءگرا
استفاده از نمونه های واقعی برنامه نویسی شیءگرا به ساده سازی این مفاهیم پیچیده برای درک بیشتر خوانندگان کمک می کند. در ادامه چند مثال برای تجسم اصول نهفته در این روش برنامه نویسی ذکر می کنیم:
مثال کپسوله سازی
برنامه نویسان تازه کار در رابطه با نحوه عملکرد یک مرورگر بهتر می توانند این مفهوم را بفهمند. مرورگرها دارای اشیاء ذخیره سازی محلی هستند که این امکان را برای شما فراهم می آورد که داده ها را به طور محلی ذخیره کنید. این اشیاء دارای ویژگی هایی مانند طول هستند و تعداد اشیاء را به همراه روش هایی مانند (حذف آیتم) و (تنظیم آیتم) به محلی برای ذخیره سازی تبدیل می کند.
راه دیگر برای بررسی کپسوله سازی توجه به آن از لحاظ پرداخت کارمند است. ویژگی های یک کارمند شامل حقوق پایه، اضافه کاری و میزان است که با روشی به نام فاکتور دستمزد بررسی می شوند. کد نوشته شده در یک روش کپسوله سازی و شیءگرا با پارامترهای بسیار کمتری کار می کند. هر چه تعداد پارامترها کمتر باشد، راحت تر می توان از آن استفاده و تابع را حفظ کرد.
مثال انتزاع
یک سیستم استریو را به عنوان شیئی با یک بورد منطقی پیچیده درون آن تصور کنید. بیرون آن دکمه هایی وجود دارد تا از آن طریق با اشیاء داخل در تعامل باشید. وقتی هر کدام از دکمه ها را فشار می دهید، هیچ تصوری درباره اتفاقی که آن درون می افتد ندارید، چون نمی توانید آنجا را ببینید. حتی اگر نبینید که بورد منطقی در حال تکمیل عملکردهای ناشی از فشار دکمه است، باز هم این بورد کارهای خود را انجام می دهد. این یک انتزاع است که می توان آن را برای فهمیدن مفهوم برنامه نویسی استفاده کرد.
راه دیگر برای فهمیدن این مسئله تجسم بدن یک انسان است. پوست انسان به عنوان انتزاعی برای پنهان کردن بخش های درونی بدن استفاده می کند که مسئولیت عملکردهای اندامی چون گوارش و راه رفتن را به عهده دارند.
مثال وراثت
دو کلاس را در نظر بگیرید. یکی سوپر کلاس (والدین) و دیگری زیرکلاس (فرزند) است که ویژگی های کلاس والدین را ارث می برد و رفتار خود را اصلاح می کند. برنامه نویسانی که روش های وراثت را به کار می برند، این کلاس ها را به صورت سلسله مراتبی از روابط «این هم از نوعی از … است» مرتب می کنند.
برای مثال، در دنیای حیوانات، یک حشره یک زیرکلاس است. همه حشره های ویژگی های مشترکی دارند، مثلا اینکه ۶ پا و یک اسکلت خارجی دارند. ملخ ها و مورچه ها هر دو حشره هستند و خواص مشابهی به ارث می برند.
مثال چندریختی
برای درک بهتر دو اصطلاح چندریختی به نام های رونویسی و بار اضافه دادن بهتر است فرایند راه رفتن را در ذهن خود تجسم کنید. نوزادان ابتدا با استفاده از چهار دست و پای خود خزیدن روی زمین را می آموزند. وقتی یاد گرفتن بایستند و راه بروند، در نهایت آن بخش از بدن خود را که برای عمل راه رفتن استفاده می شود را تکامل می بخشند. این اصطلاح چندریختی را بار اضافه بخشیدن می نامند.
برای درک بهتر اصطلاح بعدی موسوم به رونویسی به این فکر کنید که به طور طبیعی در همان جهتی گام برمی دارید که پیش رویتان است. وقتی توقف می کنید و به عقب برمی گردید، این کار باعث تغییر جهت مسیر شما و نیز مکانیسم عملکرد شما می شود. در این حال، مشغول رونویسی عمل طبیعی هستید که همیشه به راحتی آن را به اتمام می رسانید.
هر زبان برنامه نویسی را از اینجا می توانید رایگان یاد بگیرید
5 زبان برنامه نویسی شیءگرا
جاوا (Java)
بدون تردید، جاوا یکی از گسترده ترین زبان های شیءگرا در بازار است. بخشی از دلیل استفاده گسترده جاوا آن است که جاوا یکی از زبان های رسمی توسعه سیستم عامل اندروید است. اکنون که اندروید محبوب ترین سیستم عامل تلفن همراه در این کره خاکی به شمار می آید، جاوا نیز قرار نیست به این زودی جایگاه خوب خود را از دست بدهد.
جاوا به عنوان زبانی با شعار «یک بار بنویس، همیشه اجرا کن» پا به عرصه وجود گذاشت و همین شعار باعث شد این زبان برنامه نویسی کاربردهای بسیاری داشته باشد. اکنون که جاوا ۱۰۰ درصد با با مفاهیم ومبانی OOP سازگار است، راحت می توان فهمید که چرا در صدر این فهرست قرار گرفته است.
پایتون (Python)
یکی از بهترین ویژگی های پایتون این است که آن زبانی عمومی است که در بسیاری از موارد کاربرد دارد. با این حال، یکی از دلایلی که این زبان خاص شیءگرا در بالای فهرست جای دارد، آن است که این زبان یکی از زبان های مهم برای یادگیری ماشین و علوم داده است. هیچ زبانی را بهتر این پایتون برای این دو مقصود پیدا نمی کنید. هم یادگیری ماشین و هم علوم داده همچنان در حال محکم تر کردن جای پای خود در فناوری هستند و به این ترتیب، پایتون نیز محکوم به محبوب تر شدن است.
سی پلاس پلاس (C++)
C++ یکی از معدود زبان های مورد استفاده برای ساخت کامپایلرها و مترجمان است که سایر زبان های برنامه نویسی را کامپایل می کنند. این زبان شامل سرعت C و مفاهیم اولیه برنامه نویسی شیءگرا است باعث سرعت و انعطاف پذیری آن می شود. یکی از اصلی ترین دلایل محبوبیت زبان فوق آن است که تمامی سیستم های عامل با ترکیبی از C و ++C نوشته شده اند. بنابراین، بدون وجود این زبان، هیچ سیستم عامل وجود ندارد که از C++ استفاده کند. به عبارت دیگر، C پلاس پلاس یک زبان حیاتی برای تکنولوژی است. این زبان برای توسعه مرورگرهای وب (مانند Chrome، Firefox و Safari) نیز استفاده می شود.
سی شارپ (C#)
C# یکی دیگر از زبان های عمومی شیءگرا است. این زبان توسط مایکروسافت در سال 2000 و به عنوان بخشی از ابتکار دات نت توسعه یافت و شباهت هایی با جاوا، C و C پلاس پلاس دارد. C شارپ نیز به گونه ای طراحی شده بود که زبان های دیگر بتوانند از آن استفاده کنند. یکی از استفاده های اولیه این زبان برای طراحی برنامه های دسکتاپ و وب است که همین ویژگی آن را تبدیل به گزینه ای محبوب برای توسعه دهندگانی می کند که خواهان ایجاد نرم افزار با GUIها هستند.
با این حال، یکی از محبوب ترین استفاده های زبان C# در صنعت بازی است. دلیل این امر این است که زبان فوق به راحتی با ویندوز ادغام می شود. از آنجا که این زبان شامل ویژگی جمع آوری اتوماتیک زباله است، ابزارهای قدرتمندی در اختیار توسعه دهندگان قرار می دهد و نیز، یک زبان شیءگرا است، پس همچنان به تسلط خود بر بخش طراحی بازی ادامه خواهد داد.
روبی (Ruby)
روبی از این لحاظ که زبانی با اهداف عام است، شبیه پایتون به نظر می رسد. این زبان که با نگاه خاص به سادگی، کمال، توسعه پذیری و قابلیت حمل طراحی و تولید شده است، یک زبان برنامه نویسی شیءگرا با منبع باز و تفسیری است که می توان از آن در پلتفرم های متعددی استفاده کرد.
روبی از دستورالعمل ساده ای استفاده می کند و هر فردی که با یک زبان برنامه نویسی مدرن کار کرده باشد به راحتی می تواند آن را بیاموزد. این زبان همان سادگی استفاده از پرل را دارد که با مفاهیم برنامه نویسی شیءگرا ترکیب شده و به تکامل رسیده اند. روبی معمولا هم برای توسعه فرانت اند (Frontend) و هم توسعه بک اند (Backend) استفاده می شود. همچنین، می توان از روبی در رشته های تحلیل داده ها، نمونه سازی و اثبات مفاهیم هم استفاده کرد.