آنچه در این صفحه می خوانید:
- معرفی برنامه نویسی شی گرا (OOP)
- مزایای برنامه نویسی شی گرا (OOP)
- زبان های برنامه نویسی شی گرا (OOP)
- مقایسه برنامه نویسی شی گرا (OOP) با برنامه نویسی تابعی (Functional)
معرفی برنامه نویسی شی گرا (OOP)
برنامه نویسی شی گرا (OOP) یک الگوی برنامه نویسی مبتنی بر مفهوم "اشیاء" است. OOP، برنامه های رایانه ای با ساختن اشیایی که با یکدیگر در تعامل هستند، طراحی شده اند. زبان های OOP متنوع هستند، اما محبوب ترین آن ها مبتنی بر کلاس است، به این معنی که اشیاء نمونه هایی از کلاس ها هستند که نوع آنها را نیز تعیین می کنند. همچنین برنامه نویسی شی گرا پارادایم برنامه نویسی که یک برنامه کامپیوتری را به عنوان ترکیبی از ساختارهای داده (به نام آبجکت) که می تواند اطلاعات را به شیوه ای استاندارد مبادله کند و می تواند به عنوان ماژول ها یا بلوک ها ترکیب شود نشان می دهد. هر آبجکت مستقل است و می تواند بدون تأثیر بر بلوک های دیگر تغییر کند. همچنین می تواند خودش اجرا شود و می تواند به آبجکت های دیگر متصل شود. آبجکت ها با انتقال اطلاعات بین یکدیگر تعامل دارند و هر آبجکت شامل اطلاعاتی درباره خود و آن دسته از آبجکت هایی است که می تواند با آنها تعامل داشته باشد.
Object-oriented programming به اختصار OOP، یک مدل زبان برنامه نویسی است که آبجکت ها به جای action و داده ها به جای منطق سازماندهی شده است. از لحاظ تاریخی، یک برنامه به عنوان یک روش منطقی مورد توجه قرار گرفته است که داده ورودی را دریافت می کند، پردازش می کند و داده های خروجی را تولید می کند. اولین گام در OOP این است که تمام آبجکت هایی که برنامه نویسان می خواهند دستکاری کنند و نحوه ی ارتباط آنها با یکدیگر را شناسایی کنند. این امر اغلب به عنوان مدل سازی داده شناخته می شود. هنگامی که یک آبجکت شناسایی می شود، به عنوان یک کلاس از آبجکت ها تعریف می شود که نوع داده ای که در آن وجود دارد و هر توالی منطقی که می تواند آن را دستکاری کند تعریف می کند. هر توالی منطقی مختلف به عنوان یک متد شناخته می شود. آبجکت ها با رابط های تعریف شده به نام پیام ها ارتباط برقرار می کنند.
مزایای برنامه نویسی شی گرا (OOP)
برنامه نویسی شی گرا از اشیاء استفاده می کند، اما همه تکنیک ها و ساختارهای مرتبط به طور مستقیم در زبان هایی پشتیبانی نمی شوند که ادعا می کنند OOP را پشتیبانی می کنند. ویژگی های ذکر شده در زیر بین زبان هایی که به شدت طبقاتی و شی گرا (یا چند پارادایم با پشتیبانی OOP) مورد استفاده قرار می گیرند مشترک است:
مشترک با زبان های غیر OOP
- متغیرهایی که می توانند اطلاعات قالب بندی شده را در تعداد کمی از انواع داده های داخلی مانند اعداد صحیح و شخصیت های الفبا ذخیره کنند. این ممکن است شامل ساختار داده مانند رشته ها، لیست ها و جداول هش باشد که به صورت داخلی ساخته شده اند یا ناشی از ترکیب متغیرها با استفاده از نشانگرهای حافظه است.
- رویه ای، همچنین به عنوان توابع، متد ها، روتین ها یا ساب روتین ها شناخته می شوند؛ که ورودی، تولید خروجی و دستکاری داده ها را انجام می دهد. زبان های مدرن شامل سازه های برنامه نویسی ساخت یافته مانند حلقه ها و شرطی ها هستند.
برنامه نویسی مدولار امکان گروه بندی رویه ای به پرونده ها و ماژول ها را برای اهداف سازمانی فراهم می کند. ماژول ها به اسامی نام قرار می گیرند بنابراین شناسه های موجود در یک ماژول با یک رویه یا متغیر به اشتراک گذاری همان نام در پرونده یا ماژول دیگر تضاد ندارند.
اشیاء و کلاس ها
زبان هایی که از برنامه نویسی شی گرا پشتیبانی می کنند (OOP) به طور معمول از ارث برای استفاده مجدد از کد و قابلیت توسعه در قالب کلاس یا نمونه های اولیه استفاده می کنند. کسانی که از کلاس ها استفاده می کنند از دو مفهوم اصلی پشتیبانی می کنند:
- کلاس ها: تعاریف مربوط به قالب داده ها و رویه ایی موجود برای یک نوع یا کلاس از شی خاص. همچنین ممکن است شامل داده ها و رویه ای (معروف به روش های کلاس) باشد ، یعنی کلاس ها شامل اعضای داده ها و توابع عضو هستند
- اشیاء(موارد کلاس): اشیاء گاه با چیزهایی که در دنیای واقعی یافت می شوند مطابقت دارند. به عنوان مثال، یک برنامه گرافیکی ممکن است دارای اشیایی مانند "دایره"، "مربع"، "منو" باشد. یک سیستم خرید آنلاین ممکن است دارای اشیایی مانند "سبد خرید"، "مشتری" و "محصول" باشد. بعضی اوقات اشیاء نمایانگر اشخاص انتزاعی تر هستند، مانند یک شی که یک پرونده باز را نشان می دهد، یا شیئی که سرویس ترجمه اندازه گیری ها را از ایالات متحده معمولی به متریک ارائه می دهد.
برنامه نویسی شی گرا چیزی بیش از کلاس ها و اشیاء نیست. این یک پارادایم کاملاً برنامه نویسی است که مبتنی بر اشیاء (ساختارهای داده) است که شامل فیلد و روش داده است. درک این موضوع ضروری است؛ استفاده از کلاسها برای سازماندهی دسته ای از روش های نامربوط در کنار هم جهت گیری شی نیست. گفته می شود که هر شی نمونه ای از یک کلاس خاص است (برای مثال، ممکن است یک شیء با نام "Mary" نمونه ای از کلاس Employee باشد). روش های برنامه نویسی شی گرا به عنوان "متد" شناخته می شوند. متغیرها همچنین به عنوان فیلدها، اعضا، ویژگی ها یا ویژگی ها شناخته می شوند. این به شرایط زیر منجر می شود:
- متغیرهای کلاس: به طور کلی به کلاس تعلق دارند؛ فقط یک نسخه از هر یک وجود دارد
- متغیرهای instance یا attributes: داده هایی که به اشیاء فردی تعلق دارند. هر شیء نسخه خاص خود را از هر یک دارد.
- متغیرهای عضو: به متغیرهای کلاس و نمونه اشاره دارد که توسط یک کلاس خاص تعریف شده است.
- متد های کلاس: به طور کلی به کلاس تعلق دارند و فقط به متغیرهای کلاس و ورودی های فراخوانی دسترسی دارند.
- متد های instance: متعلق به اشیاء مجزا است و برای متغیرهای instance برای شی خاص مورد استفاده، ورودی ها و متغیرهای کلاس به آنها دسترسی دارند.
کپسوله سازی
Encapsulation یک مفهوم برنامه نویسی شی گرا است که داده ها و توابعی را که داده ها را دستکاری می کند، به هم متصل می کند و هم از دخالت و سوء استفاده در خارج محافظت می کند. رمزگذاری داده ها منجر به مفهوم مهم OOP از مخفی سازی داده ها شد. اگر یک کلاس اجازه دسترسی به کد را نمی دهد تا به داده های داخلی دسترسی داشته باشد و فقط از طریق روش ها اجازه دسترسی دارد، این یک شکل قوی از انتزاع یا اطلاعاتی است که به عنوان encapsulation شناخته می شود. بعنوان مثال برخی از زبانها (جاوا) اجازه می دهند کلاس ها محدودیتهای دسترسی را صریحاً اعمال کنند، به عنوان مثال نشان دادن داده های داخلی با کلمه کلیدی خصوصی و روش های تعیین شده برای استفاده توسط کدهای خارج از کلاس با کلمه کلیدی عمومی. متد ها همچنین ممکن است سطوح عمومی، خصوصی یا واسطه ای مانند محافظت شده طراحی شوند (که اجازه می دهد از همان کلاس و زیر کلاس های آن دسترسی داشته باشید، اما اشیاء یک کلاس متفاوت نیستند). در زبانهای دیگر (مانند پایتون) این فقط توسط کنوانسیون اعمال می شود (برای مثال، روش های خصوصی ممکن است دارای اسامی باشند که با یک زیرخط شروع می شوند). محصور کردن از نگرانی کد خارجی با کار داخلی یک شی جلوگیری می کند. این امر قابلیت تغییر کارایی کد را تسهیل می کند، برای مثال به نویسنده کلاس اجازه می دهد تا نحوه تغییر اشیاء آن کلاس داده های خود را به صورت داخلی و بدون تغییر کد خارجی تغییر دهد (تا زمانی که روش "عمومی" به همان روش کار کند). همچنین برنامه نویسان را ترغیب می کند تا کلیه کدهای مربوط به مجموعه مشخصی از داده ها را در همان کلاس قرار دهند، که آنها را برای درک آسان سایر برنامه نویسان سازماندهی می کند. كپسوله كردن روشی است كه جداسازی را ترغیب می كند.
پلی مورفیسم
subtyping، نوعی از پلی مورفیسم، هنگامی است که فراخوانی کد می تواند آگاه باشد که در کدام کلاس در سلسله مراتب پشتیبانی شده که در آن فعالیت می کند، کلاس والدین یا یکی از فرزندان آن باشد. در همین حال، ممکن است همین نام عملیاتی در بین اشیاء موجود در یک سلسله مراتب ارث متفاوت باشد. به عنوان مثال، اشیاء از نوع Circle و Square از یک کلاس معمولی به نام Shape گرفته می شوند. عملکرد Draw برای هر نوع شکل، آنچه را که برای ترسیم خود در حین فراخوانی کد لازم است، پیاده سازی می کند، نسبت به نوع خاصی از شکل که بی تفاوت است، بی تفاوت باقی می ماند. این نوع دیگری از انتزاع است که کدهای بیرونی را نسبت به سلسله مراتب طبقاتی ساده می کند و separation of concerns را ممکن می کند. از دیگر ویژگی های برنامه نویسی شی گرا می توان به موارد زیر اشاره کرد:
- مدولاسیون برای عیب یابی آسان تر
- استفاده مجدد از کد از طریق وراثت
- انعطاف پذیری از طریق پلی مورفیسم
- موثر در حل مسئله
- ارائه فریمورک خوبی برای کتابخانه های کد
- مفهوم کلاس های داده، برنامه نویس را قادر می سازد هر نوع داده جدیدی را ایجاد کند که قبلا در آن زبان مشخص نشده است.
زبان های برنامه نویسی شی گرا (OOP)
اولین زبان برنامه نویسی شی گرا بود. جاوا، پایتون، سی پلاس پلاس، ویژوال بیسیک دات نت و روبی امروز محبوب ترین زبان های OOP هستند. زبان برنامه نویسی جاوا به خصوص برای استفاده در برنامه های توزیع شده در شبکه های شرکتی و اینترنت طراحی شده است. Ruby در بسیاری از برنامه های وب مورد استفاده قرار می گیرد. Curl ،Smalltalk ،Delphi و Eiffel نیز نمونه هایی از زبان های برنامه نویسی شی گرا هستند.
بسیاری از زبان های برنامه نویسی که به طور گسترده مورد استفاده قرار می گیرند مانند C++ ، Java ،Python و غیره، چند پارادایم هستند و آنها از برنامه نویسی شی گرا تا حد بزرگتر یا کمتری پشتیبانی می کنند، معمولاً در ترکیب با برنامه نویسی ضروری و رویه ای استفاده می شوند.از دیگر زبان های مهم شی گرا شامل C# ،PHP ،JavaScript ،Ruby ،Perl ،Object Pascal ،Objective-C ،Dart ،Swift ،Scala ،Common Lisp ،MATLAB و Smalltalk می باشد.
مقایسه برنامه نویسی شی گرا (OOP) با برنامه نویسی تابعی (Functional)
برنامه نویسی تابعی تکنیکی از برنامه نویسی است که بر ارزیابی عملکردها و ایجاد ساختار و عناصر برنامه های رایانه ای تأکید دارد. برنامه نویسی تابعی بر روی اجرای دستورات یا المنت ها کار نمی کند بلکه به بیان آن می پردازد. برنامه نویسی کاربردی پشتیبانی زیادی از برنامه نویسی ساخت یافته می کند. OOP به برنامه نویسی شی گرا گفته می شود. برنامه نویسی شی گرا یک روش برنامه نویسی مبتنی بر ایجاد اشیاء است. اشیاء نمونه هایی از کلاس ها هستند که داده های مربوط به فیلد ها، توابع و متدها را در اختیار دارند. در برنامه نویسی شی گرا، از اشیاء به عنوان ساکنین درجه یک یاد می شود.
در زیر لیست نکاتی که تفاوت بین برنامه نویسی کاربردی و OOP را توضیح می دهد، آورده شده است:
- برنامه نویسی تابعی برای انجام بسیاری از عملیات های مختلف که داده ها برای آنها ثابت شده است، استفاده می شود. برنامه نویسی شی گرا برای انجام چند عملیات که دارای رفتار مشترک و انواع مختلفی هستند، استفاده می شود.
- برنامه نویسی تابعی داشتن یک مدل برنامه نویسی بدون تابعیت است. برنامه نویسی شی گرا، دارای یک مدل برنامه نویسی حالتمند است.
- در برنامه نویسی تابعی، یک حالت وجود ندارد. در برنامه نویسی شی گرا حالت وجود دارد.
- در برنامه نویسی تابعی، یک تابع واحد اصلی کاربردی است. در شیء گرا، یک شی واحد اصلی کاربردی است.
- در برنامه نویسی تابعی، تابع های آن عوارض جانبی ندارند به این معنی که هیچ تأثیری روی کدی که در چندین پردازنده اجرا می شود ندارد. در برنامه نویسی شی گرا، روش های آن می توانند عوارض جانبی داشته و بر پردازنده ها تأثیر بگذارد.
- در برنامه نویسی تابعی، تمرکز اصلی برنامه نویسی کارهایی است که ما انجام می دهیم. در برنامه نویسی شی گرا، محور اصلی برنامه نویسی این است که ما چگونه انجام می دهیم.
- برنامه نویسی تابعی عمدتا از انتزاع بیش از داده ها و انتزاع بر رفتار پشتیبانی می کند. برنامه نویسی شی گرا به طور عمده از انتزاع بیش از داده ها پشتیبانی می کند.
- برنامه نویسی تابعی عملکرد بالایی در پردازش داده های بزرگ برای برنامه ها دارد. برنامه نویسی شی گرا برای پردازش داده های بزرگ مناسب نیست.
- برنامه نویسی تابعی از عبارات شرطی پشتیبانی نمی کند. در برنامه نویسی شی گرا می توان از عبارات شرطی مانند عبارت if-other و عبارت switch استفاده کرد.