اگر بخواهیم یکی از تفاوت های اصلی بین ماشین و انسان را بیان کنیم، این خواهد بود که اگر با انسان به زبان قابل فهم وی سخن بگوییم، و آن سخن ما مربوط به حوزه ناشناخته وی نباشد، درصد بسیار بالایی از سخن ما را خواهد فهمید. اما برای ماشین، زبانی که برای آن قابل فهم است زبانی نیست که ما بدان سخن می گوییم. زبان برنامه نویسی کامپیوتر تنها روشی است که خواسته های خود از ماشین را با آن بیان میکنیم. در این زمینه نمونههای مختلفی داریم، مانند: برنامه نویسی رویهای (Procedural Programming)، برنامه نویسی شیگرا (Object oriented programming)، برنامه نویسی تابعی (Functional Programming) و …
آنچه در این نوشته خواهیم داشت
برنامه نویسی شی گرا
برنامه نویسی شئ گرا (Object Oriented Programming) که به اختصار OOP نیز نامیده میشود، در حقیقت نوعی منطق یا الگوست که برگرفته از زندگی روزمرهی ما بوده و در حدود دههی ۱۹۶۰ میلادی مطرح شد. در برنامه نویسی شی گرا، برنامه را شبیه به دنیای اطراف و زندگی روزمره خودمان میبینیم، در حقیقت برپایهی مدلسازی اشیا.
در ابتدا برنامه نویسی رویه ای یا (Procedural) بود که در این روش کد ها بصورت پشت سر هم و بدون ترتیب و ساختار خاصی نوشته و استفاده می شدند که خب مسلما مشکلات زیادی به همراه داشت، مثلا تصور کنید در حال نوشتن کد به صورت پشت سرهم هستید و میخواهید که عملیات پرداخت رو پیاده سازی کنید. طبیعتا هرجا که کاربر نیاز به پرداخت دارد شما باید کد های مربوط به پرداخت رو تکرار کنید. فکر میکنم اصلی ترین مشکل برنامه نویسی رویه ای را درک کرده اید. با مثال زیر راحت تر متوجه اهمیت برنامه نویسی شی گرا خواهید شد.
مثال ملموس برنامه نویسی شی گرا
بیاید برای آنکه برنامه نویسی شی گرا را کامل متوجه شویم بیایید با یک مثال شروع کنیم: در یک آشپزخانه وسایل زیادی وجود دارد؛ شما یخچال داخل خانه تان را در نظر بگیرید. ویژگی هایی از قیبل وزن، فوت، رنگ، نوع کمپرسور و … از جمله مواردی هستند که می توان به عنوان ویژگی های یک یخچال در نظر گرفت. در ادامه یخچال مثال ما شامل مجموعه رفتارهایی است که مثلا در درجه مشخصی شروع به خنک کردن فضای یخچال میکند. شاید حتی در برخی از مدل های یشرفته تر یخچال با سنسوری که دارد شروع به یخ سازی کند.
به هر موجودیتی (در مثال ما یخچال) که دارای خصوصیت، اطلاعات، وضعیت یا رفتار خاصی باشد یک شئ یا Object گفته میشود، این آبجکت را میتوان به صورت فیزیکی یا منطقی در نظر گرفت.
به اطلاعات و ویژگیهای موجود برای یک شئ خصوصیت یا Attribute میگویند و اعمالی که یک شئ میتواند از خود بروز دهد رفتار یا Behavior نام دارند.
پس در مثال ما Object همان یخچال ما هست و خصوصیات این شی از قبیل مقدار فوت، بالا یا پایین بودن فریزر attribute و در آخر اینکه در چه دمایی شروع به خنک سازی کند را می توان رفتار یا Behavior دانست.
در شی گرایی مفهوم کلاس به چه معناست؟
به زبان ساده میتوان کلاس را به عنوان قالبی برای اشیا در نظر گرفت، مثلا یخچال فریز ساید بای ساید یک نمونه شئ از کلاس یخچال است، کلاسها معمولا در بردارندهی خصوصیات و رفتار اشیا هستند، مثلا کلاس یخچال دربردارندهی ویژگیهای یک یخچال مثل فوت، وزن، رنگ، نوع کمپرسور و… است و هر مدل یخچالی که از این کلاس در نظر بگیریم تمامی ویژگیهای گفته شده در کلاس را درون خود خواهد داشت.
اگر دقت کنید متوجه میشوید که شناسهها و رفتارهایی که تعریف کردیم مخصوصِ یک مدل خاص نیستند. در اینجا تلاش میکنیم یک یخچال را به طور کلی تعریف کنیم؛ میگوییم که یخچالِ برنامهی ما دارای این شناسهها و رفتارهاست.
ممکن است یک یخچال شناسهها و رفتارهای دیگری هم داشته باشد، اما این شناسهها و رفتارهای مورد نیاز کار ماست. این به ما کمک میکند تا نقشهی یک یخچال را طراحی کنیم و در ادامه از این کلاس برای ساخت شئ استفاده میکنیم؛ شئهای یخچال را با جزئیات میسازیم.
Public Class Refrigerator { Private String _color; Private String _model; Private String _makeyear; Private String _Compressortype; Public Void Start () { .. } Public Void Turbo Cooling () { .. } }
برای مثال، با استفاده از یک کلاس Refrigerator میتوانیم اشیاء یخچال مختلفی بسازیم که مدل، نوع موتور آن و سال ساخت متفاوتی دارند، اما رفتارهای همهشان یکسان است.
شی 1 | |
برند | Daewoo 0028SS |
نوع موتور | کمپرسور پربازده(HE)
|
سال ساخت | 1399 |
Start() Break() |
به این ترتیب، برنامه نویسی شیگرا به شما این اجازه را میدهد که به سادگی رفتارهای پیچیدهی یک سیستم واقعی را مدل کنید. با برنامه نویسی شیگرا، داده و تابع (شناسهها و متدها (method)) با هم در یک شئ جمع میشوند.
این مسئله نیاز به داشتن دادههای مشترک (shared data) یا دادههای سراسری (global data) را در برنامه کم میکند. این تفاوت اصلی برنامه نویسی شیگرا و رویکردهای رویهای است.
اصول برنامه نویسی شی گرا
برنامه نویسی شی گرا بر اساس چهارمورد که به شرح آن پرداخته میشود، شکل گرفته است:
۱) کپسوله سازی ( Encapsulation )
ویژگی های مربوط به هر شی در محدوده و کلاس مربوط به خود شی قرار می گیرد. اشیا دیگر قدرت دسترسی و ایجاد تغییرات در داده های کلاس را ندارند و فقط می توانند به لیستی از توابع کلاس که بصورت عمومی تعریف شده اند دسترسی داشته باشند. این ویژگی در برنامه نویسی شی گرا باعث بالا رفتن امنیت و جلوگیری از فساد ناخواسته اطلاعات شده است.
۲) انتزاع ( abstraction)
با خاصیت abstraction، در برنامه نویسی شی گرا در بدنه اصلی هیچ کدی نوشته نمی شود و به همین دلیل نمی توانیم مستقیما از روی کلاس های انتزاعی اشیا را بسازیم. مفهوم انتزاعی چون کد مشخصی ندارد به برنامه نویسان کمک می کند تا به راحتی بتوانند تغییرات و افزودنی های خود را در طول زمان انجام دهند. برای مثال اگر در برنامه ای متد چاپ داشته باشیم می توانیم بدنه این متد را تعریف نکنیم. سپس کلاس های فرزند از این متد بسازیم و کدهای بدنه را در این کلاس های فرزند تعریف کنیم و به راحتی از آنها شی بسازیم.
۳) ارث بری و وراثت (Inheritance)
در مفهوم وراثت میتوانیم برای یک شی اشیا و روابط منحصر به فردی را پیاده سازی کنیم اگر این ویژگی ها در شی دیگری تکراری بود به راحتی می تواند از کلاس بالاتر خود ویژگی های مشترک را ارث بری کند بدون اینکه به خاصیت منحصر به فرد هردو لطمه ای وارد شود. این ویژگی در برنامه نویسی شی گرا، یک تحلیل داده دقیق تر را به برنامه نویس ارائه می کند و زمان توسعه را کاهش داده و سطح دقت را بالاتر می برد. برای مثال: اگر انسان را به عنوان یک شی در نظر بگیریم پدر خانواده ممکن است موی رنگی و چشم رنگی داشته باشد این ویژگی می تواند به فرزندان او تعلق بگیرد ضمن اینکه برای هرکدام یک ویژگی منحصر به فرد در نظر گرفته می شود.
۴) چندریختی(Polymorphism)
با استفاده از مفهوم چند ریختی به راحتی می توانیم یک متد عمومی تعریف کرده که هربار ورودی های متفاوتی داشته باشد. برای مثال اگر انسانها را اشیا در نظر بگیریم همه آنها غذا می خورند پس می توانیم یک متد به نام FOOD برای آنها در نظر گرفت اما باید به این نکته دقت داشت که همه افراد غذاهای یکسانی نمی خورند. بنابراین متد FOOD می تواند هربار و برای هرکدام از افراد با ورودی های متفاوتی استفاده شود.
این چهار اصل از اصول برنامه نویسی شی گرا هستند که در این مدل از برنامه نویسی به کار برده می شوند. بنابراین میتوان گفت که با برنامه نویسی شی گرا کدنویسی بسیار قابل انعطاف و سازمان دهی شده میشود. به همین دلیل برنامه نویسان این مدل را به مدل های قدیمی ترجیح می دهند. در ادامه مطلب چند زبان برنامه نویسی که بر پایه اصول و مفاهیم شی گرایی شکل گرفته و از مفهوم شی گرایی استفاده می کنند را فقط نام میبریم.
مزایای برنامهنویسی شیگرا
افزایش امنیت برنامه
کاهش هزینه نگهداری
قابلیت استفاده مجدد
تحلیل سادهتر برنامه
قابلیت سازمان دهی بهینه تر کدها
عدم نیاز به نوشتن کدهای تکراری و قابلیتهایی که قبلا پیادهسازی شدهاند و صرف جویی در استفاده از منابع
قابلیت تقسیم برنامه به برنامههای کوچک تر اما مستقل
جمع بندی
در این مقاله به اختصار در مورد آنکه برنامه نویسی شی گرا چیست و چه کاربردی دارد توضیح دادیم. اصول برنامه نویسی شی گرا را توضیح دادیم و مثالی از کلاس در این برنامه نویسی را آوردیم. در سایت آمانج آکادمی مقالات دیگری برای سایر الگوریتم های برنامه نویسی وجود دارد. هدف از این مقاله آشنایی ابتدایی با مفهوم برنامه نویسی شی گرایی بود. ما در کلاس های آنلاین برنامه نویسی اندروید ، طراحی سایت، جاوااسکریپت و پایتون که با همکاری اساتید مجرب کشور برگزار میشود، تمامی این مفاهیم را به صورت کامل به صورت تئوری همراه با مثال برای شما ارائه خواهیم نمود تا بتوانید در پروژه های عملی پایان دوره از آنها با خوبی استفاده کنید.