برنامه نویسی شیء گرا چیست ؟
برنامهنویسی شیء گرا پس از برنامهنویسی خطی و برنامهنویسی ساختیافته سومین روش برنامهنویسی است که برای نظمدادن به کدهای برنامه به کار گرفته شده است.
امروزه اغلب برنامههای نوشته شده در محیطهای گوناگون با روش شیء گرا نوشته میشوند. در این نوشته با مفهوم شیء گرایی و اینکه چرا توانسته به عنوان متداولترین روش برنامهنویسی به حساب آید آشنا خواهیم شد.
برنامهنویسی شیء گرا چیست
در شروع کار برنامهنویسی و زمان ظهور زبانهای برنامهنویسی مانند بیسیک و اسمبلی، برنامههای نوشته شده به صورت خطی اجرا میشدند. به این معنی که دستورات برنامه خط به خط در امتداد یکدیگر نوشته میشدند و تنها ساختارهای شرطی، حلقهها و پرشها بودند که محل اجرای این مسیر مستقیم را تغییر میدادند.
برنامهنویسی به این روش کاری بسیار دشوار و در مواجهه با نرمافزارهای بزرگ کاری جانفرسا به شمار میرود.
برنامهنویسی ساختیافته
برای حل این مشکل روش دیگری به نام برنامهنویسی ساختیافته که مفهوم توابع را به برنامهنویسی خطی اضافه میکرد، ابداع شد. در برنامهنویسی ساختیافته یا تابعی، بخشهای کوچک برنامه که هر یک وظیفهای خاص را به انجام میرساندند در قالب یک تابع که یک یا چند ورودی و معمولا یک خروجی دارد، ایجاد میشوند.
امکان استفادهی مکرر از این توابع در برنامهی فعلی و در برنامههایی که در آینده توسعه پیدا میکنند، برنامهنویسی را اندکی آسانتر کرد.
برنامهنویسی شیء گرا
با توسعهی صنعت و دانش نرمافزار، روش سوم به نام برنامهنویسی شیء گرا ابداع و پیادهسازی شد.
برنامهنویسی شیء گرا روشی است که از جهتی شبیه به برنامهنویسی تابعی یا ساختیافته است و امکاناتی به آن اضافه میکند. در این روش برنامهنویسی، برنامه به بخشهای کوچکتری به نام شیء یا کلاس تقسیمبندی میشوند. هر شیء در برنامهنویسی شیء گرا مجموعهای توابع و متغیرها است که میتواند چندین کار را به صورت همزمان به انجام برساند.
مثالهایی از برنامهنویسی شیء گرا در دنیای واقعی
خودرو
یک خودرو یک شیء است. درون این شیء بزرگ، اشیای کوچکتری نیز وجود دارند که هر یک تنها با ورودی و خروجیهای خود با سایر بخشها در ارتباط هستند. بخشهایی مثل موتور، کاربراتور، پمپ آب، پمپ بنزین و سایر قسمتها.
هر شیء برای انجام یک یا چند وظیفه طراحی شده است. برای مثال پمپ آب خودرو تنها وظیفه دارد آب را درون موتور خودرو به گردش درآورد و هیچ اطلاعی از عملکرد پمپ بنزین ندارد. پمپ آب به کار رفته در خودروی X ممکن است به همین شکل در خودروی Y نیز نصب شود و به عملکرد خود ادامه دهد.
یک پمپ آب دو ورودی آب و برق را قبول میکند و با ترکیب آنها، آب را با فشار درون مداری به گردش در میآورد. پمپ آب از مبدا برق و آب اطلاعی ندارد و تنها وظایف محول شده را به انجام میرساند.
آشپزی در رستوران
هنگامی که قصد آشپزی برای جمعیتی کوچک را داشته باشیم، یک نفر تمام کارها را انجام میدهد. از خرید اقلام گرفته تا شستشو و پخت و سرو و تزئین غذا. ولی اگر بخواهیم برای جمعیتی بزرگ غذا درست کنیم، مشکلات جدیدی به وجود میآیند که از عهدهی یک نفر خارج است. در یک رستوران، افراد مختلفی با یکدیگر همکاری میکنند تا یک غذا در حجم بزرگ آماده شود. در کار گروهی هر نفر مسئولیتهای مشخصی دارد و دیگران ممکن است این مسئولیتها را ندانند و نتوانند که آن را انجام بدهند.
در این مدل کار هر نفر مثل یک شیء در برنامهنویسی است که مسئولیتی مشخص دارد و نتیجهی کار تمام این اشیاء در کنار هم به یک نتیجهی مشخص میرسد.
برای مثال کسی که اقلام را خریداری میکند و به رستوران میآورد، ممکن است چیزی از پخت آنها نداند ولی بخشی از کار برای آمادهشدن محصول نهایی را انجام میدهد.
همکاری گروهی در برنامهنویسی شیء گرا
در برنامهنویسی شیء گرا از این مفهوم برای کوچکتر کردن هدف کلی و شکستن آن به بخشهای ساده و قابل انجام استفاده میشود. یک برنامهی بزرگ ممکن از از دهها و صدها شیء کوچکتر تشکیل شود که هر شیء تنها یک یا چند کار ساده و کوچک را به انجام میرسانند و ترکیب این وظایف کوچک با یکدیگر سبب انجام کاری بزرگ میشود.
یکی از علتهای حرکت به سوی برنامهنویسی شیء گرا، آسانتر بودن حل مشکلات کوچک در مقایسه با مشکلات بزرگ است. ایجاد یک پمپ آب که تنها وظیفهی گردش آب را دارد بسیار سادهتر از ایجاد یک خودرو است. نگاه جزئی به مشکلات بزرگ برای ذهن انسان ساده و شدنیتر است.
سرعت در برنامهنویسی شیء گرا
سیستمهای کامپیوتری به صورت پیشفرض تنها دستورالعملهای خطی را میشناسند و این دستورالعملها را خط به خط و یکی پس از دیگری اجرا میکنند. بنابراین فارغ از نوع و زبان برنامهنویسی، در نهایت برنامهی قابل اجرا باید به صورت خطی در اختیار پردازنده قرار بگیرد. بدیهی است، تبدیل یک برنامهی شیء گرا یا ساختیافته به برنامهای خطی کاری دشوار است که در نهایت سبب ایجاد سرآمدی اضافی در مقایسه با کدهایی است که از ابتدا به صورت خطی نوشته شدهاند. بنابراین برنامهی شیء گرا یا ساختیافته سبب کاهش سرعت اجرای برنامهی نهایی میشوند.
با این حال مزایای دیگر برنامهنویسی شیء گرا سب میشوند این عیب چندان به چشم نیاید.
البته در برخی نیازمندیها که سرعت اولویت اساسی برنامه باشد، بخشهای حیاتی به صورت خطی و حتی در گاهی اوقات با زبان اسمبلی توسعه پیدا میکنند.
چرا برنامهنویسی شیء گرا؟
همان گونه که گفته شد، برنامهنویسی شیء گرا مزایایی دارد که مهمترین آنها عبارتند از: سادهتر بودن حل مشکلات کوچک در مقایسه با مشکلات بزرگ، امکان استفادهی مجدد از کلاسها یا اشیای تولید شده در برنامههای دیگر، افزایش سرعت توسعه و افزایش کنترل بر منابع و دسترسیها، افزایش توسعهپذیری کدهای منظم در مقایسه با کدهای خطی، امکان کار موازی و فعالیت تیمی روی پروژههای بزرگ و بسیاری مزایای دیگر.
تمامی مزایای موجود در برنامهنویسی شیء گرا در کنار هم و در نهایت سبب کاهش زمان توسعه و کاهش هزینههای پیادهسازی نرمافزار میشوند.
برنامهنویسی MVC
برنامهنویسی MVC یا Model View Controller شیوهای از برنامهنویسی شیء گرا است که سه نوع کلی برای اشیای موجود در هر برنامه تعریف میکند. در این شیوه کلاسهای برنامه به سه گروه کلی «ذخیره و بازیابی یا Model»، «کنترلر یا تصمیمگیری یا Controller» و «نمایش یا View» تقسیمبندی میشوند.
هر کلاس بسته به نوع فعالیتی که انجام میدهد در یکی از این سه گروه قرار میگیرد. چنانچه یک کلاس کاری شامل دو گروه از وظایف فوق را بر عهده بگیرد، میبایست به دو کلاس کوچکتر با وظایف قابل تعریف در گروههای بالا شکسته شود.
برنامهنویسی MVC روشی است که برنامهنویسی شیء گرا را منظمتر و بیشتر قابل مدیریت میکند.
مفهوم بالاتری از شیء نیز برای گروهبندی چند کلاس مرتبط با هم به نام Namespace در برخی زبانهای برنامهنویسی وجود دارد که کمک میکند اشیای مرتبط با هم در محدودهای محصور و ایمن با یکدیگر ارتباط برقرار کنند و تداخلی با عملکرد سایر کلاسها یا اشیا نداشته باشند.