برنامه نویسی شی گرا (oop ) چیست؟
برنامه نویسی شی گرا (oop ) چیست؟
?برنامه نویسی شی گرا (Object Oriented Programming) که به اختصار OOP نیز نامیده میشود، در حقیقت نوعی منطق یا الگوست که برگرفته از زندگی روزمرهی ما است. در اطراف خود به هر کجا بنگرید اشیایی را می بینید. پس انسان بر اساس اشیا فکر می کند. در برنامه نویسی شی گرا نیز ما می کوشیم که مفاهیم برنامه نویسی را، همانند اشیای دنیای واقعی مدل کنیم. زیرا ذهن انسان توانایی بالایی در انتزاع یا تجرید دارد و مدل سازی اشیا دارد.
?OOP یا Object Orient Programming شیوه ای از برنامه نویسی است که موجودیتهای نرم افزار را به صورت شی یا Object میبیند. قبل از ظهور برنامه نویسی شی گرا ، برنامهها اغلب به شکل Procedural یا رویه ای نوشته میشد. در برنامه نویسی رویه ای برنامهها به توابع تقسیم میشدند. یعنی برنامه از متغیرهایی که اطلاعات را ذخیره و توابعی که عملیات مورد نظر را روی اطلاعات انجام میدادند تشکیل میشد.
?اما با بزرگ شدن نرم افزار برنامه نویسان مجبور به تکرار کدها به صورت مکرر میشدند. توابع در قسمتهای مختلف به صورت نامرتب و تو در تو یکدیگر را صدا میزدند و برنامه به اصلاح به یک کد Spagetti تبدیل میشد. کد اسپاگتی به کدی اطلاق میشود که در آن توابع و قطعات کد مختلف به هم وابسته و در هم ریخته اند و در نتیجه ایجاد تغییر در یک تابع باعث به هم ریختن توابع زیادی میشود
?پس از ظهور برنامه نویسی شی گرا توابع و متغیرهای مرتبط در واحد هایی به اسم کلاس (Class) تجمیع شدند. اشیا از روی این کلاسها ساخته میشوند. و به این ترتیب صاحب متدها (Method) و ویژگیهای (Attribute) آن کلاسها میشوند. همینطور کلاسها میتوانند ویژگیها یا توابع را از یکدیگر به ارث ببرند. به این ویژگی ارث بری یا Inheritance میگوییم.
مفاهیم پایه ای در شی گرایی
⭕️شی (Object) : ﺷﯽ ﻳﮏ ﻣﻮﺟﻮدﯾﺖ ﻓﯿﺰﯾﮑﯽ ﯾﺎ ﻣﻔﻬﻮم ﮐﻠﯽ اﺳﺖ ﺑﮕﻮﻧﻪ ای ﮐﻪ دارای ﻫﻮﻳﺖ ﺑﻮده و ﻗﺎدر ﺑﻪ ﺑﺮوز رﻓﺘﺎر و ﺛﺒﺖ ﺣﺎﻻت ﺧﻮد ﻣﯽ ﺑﺎﺷﺪ.
⭕️صفت (property): ﻫﺮ ﺷﯽ ﯾﮑﺴﺮی ﺧﺼﻮﺻﯿﺎت دارد ﮐﻪ ﺑﻪ آﻧﻬﺎ ﺻﻔﺖ ﮔﻔﺘﻪ ﻣﯽ ﺷﻮد. ﮐﻪ در واﻗﻊ ﯾﮏ مقدار و ارزش مشخصی برای آن به ازای هر شی می تواند وجود داشته باشد. مانند طول، ارتفاع، رنگ و … .
⭕️روش (Method) : هر شی در واقع یک سری رفتار دارد که به آن ها روش یا متد، گفته می شود. ﻣﺘﺪ در واﻗﻊ ﭘﺎﺳﺦ ﻫﺎﯾﯽ اﺳﺖ ﮐﻪ آن ﺷﯽ در ﻣﻘﺎﺑل تحریکات ﻣﺤﯿﻂ از ﺧﻮد ﻧﺸﺎن می دهد.
⭕️کلاس (Class) : به مجموعه ای از اشیا که دارای ویژگی و رفتار مشترک باشند، کلاس می گویند. یک class نمونه ی اولیه ای است که هر object از روی آن ساخته می شود.کلاس دانشجو، کلاس انسان، کلاس ماشین و …
کلاس ها مانند نقشه های ساختمان هستند. .ﯾﻚ ﻛﻼس، ﻧﻘﺸﻪ اﯾﺠﺎد ﯾﻚ ﺷﯽ از ﻛﻼس است. همانطور که می توانیم خانه های زیادی از روی یک نقشه بسازیم، می توانیم تعدادی شی از روی یک کلاس، نمونه سازی کنیم.
اصول برنامه نویسی شی گرا(oop)
1- تجرید یا انتزاع (Abstraction)
2- كپسوله سازی (Encapsulation)
3- وراثت (Inheritance)
4- چند ریختی (Polymorphism)
⚜️تجرید یا انتزاع (Abstraction):در این اصل نکته اصلی نمایش جزییات و امکانات مرتبط و مورد نیاز به کاربر و پنهان کردن مواردی است که کاربر نیازی به مشاهده و اطلاع از وجود آنها ندارد. مثالهای بسیاری دراطراف ما وجود دارد که با این تعریف و اصل هماهنگ میباشد. همه شما با ریموت کنترل تلویزیون کار کردهاید و حتی شاید جای تمام دکمههای آن راهم حفظ باشید و به قول معروف چشم بسته با آن کار میکنید! صدا رو کم و زیاد میکنید، کانال را تغییر میدهد و تمام مواردی که برای شما درنظر گرفته شده و در دسترس شما هست را انجام میدهید. اما آیا میدانید و یا نیازی هست بدانید در پشت صحنه با فشردن هر کدام از این دکمهها واقعا چه روندی انجام میشود و چه اتفاقاتی خواهد افتاد تا عملکرد آن دکمه انجام و شما نتیجه آن را ببینید؟
⚜️زمانی که در حین رانندگی ترمز میکنید چطور؟ آیا نیازی هست بدانید چطور سرعت ماشین کاسته میشود؟ اگر هم بدانید آیا نیازی هست درگیر آن اتفاقات بشوید؟ زمانی که دکمه پاور کامپیوتر، لپتاپ ، موبایل و … نیازی هست درگیر اتفاقات پشت صحنه آن بشوید؟! به طور قطع جواب این سوالها و خیلی از سوالهایی که از این دسته هستند خیر میباشد. در نتیجه ما هم به عنوان طراح و یا برنامهنویس باید این اصل مهم را رعایت و به کار ببریم.
⚜️كپسوله سازی (Encapsulation):اصل کپسولهسازی بسیار نزدیک به اصل تجرید یا انتزاع میباشد. در این اصل میگوییم که موارد مرتبط به هم باید در یک ساختار قرار بگیرند. این ساختار را در مفاهیم شیگرایی کلاس مینامیم . یک کلاس شامل خصوصیات، رفتارها و توابع مرتبط با هم میباشد که در قالب یک واحد گرد هم آمدهاند. در این اصل با استفاده از دادن حق دسترسی به اجزای مختلف کلاس امکان پنهان کردن جزییات درون آن را با دنیای بیرون خواهیم داشت. چرا که مواردی وجود دارد که نیازی نیست از خارج از کلاس، کسی از وجود آنها خبر داشته باشد. دقیقا مثل یک قرص کپسول، که داخل آن قابل مشاهده نمیباشد.
انطور که میبینید این دو اصل خیلی به هم نزدیک هستند به زبان دیگر اصل Abstraction میگوید چه جزییاتی باید قابل مشاهده باشند و اصل Encapsulation میزان حق دسترسی آن جزییات را مشخص میکند. درواقع میتوان گفت پیادهسازی سطح انتزاع مورد نظر با کپسولهسازی انجام میشود.
⚜️وراثت (Inheritance):مفهوم ارثبری عبارت است از مشتق کردن یک کلاس جدید از کلاس موجود و ارثبردن تمام ویژگیهای قابل دسترس آن و افزودن ویژگیهای جدید به کلاس مشتق شده. همانطور که در تصویر نیز مشخص است رابطه ارثبری به رابطه is-a معروف است. به این معنی که گفته میشود کلاس فرزند هست از نوع کلاس پدر. به عنوان مثال ماشین مسابقهای از نوع ماشین میباشد. نکته دیگری که در پیادهسازی اصل ارثبری در زبان سیشارپ وجود دارد این است که هر کلاس فقط میتواند فرزند یک کلاس دیگر باشد. که در اصطلاح گفته میشود سیشارپ فقط از Single Inheritance پشتیبانی میکند.
⚜️وراثت این امکان را به ما میدهد بجای آن که اطلاعات تکراری را در چندین جا کپی کنیم، که سختیهای خودش را دارد مخصوصا زمانی که قرار به تغییر بخشی از این اطلاعات باشد، میتوانیم تمام اطلاعات مشترک بین موجودیتهای مختلفی که از یک گروه هستند را جدا کرده و در یک کلاس واحد قرار دهیم. مثل اطلاعات مشترک بین تمام کارمندها، تمام ماشینها و غیره. سپس به ازای هر نوع خاص از آن موجودیت یک کلاس دیگری تعریف کنیم و از کلاس اول اطلاعات مشترک و البته قابل مشاهده رو ارث ببریم.
⚜️به عنوان نمونه کارمند رسمی، کارمند قراردادی و یا ماشین مسابقهای، ماشین سنگین و مواردی از این قبیل. به این شکل تمام این کلاسها اطلاعات مشترک را خواهند داشت بدون آنکه نیازی به کپی کردن آنها داشته باشیم. اگر نیازی به تغییر هم باشد فقط در کلاس والد این کار انجام میشود. حال نوبت میرسد به اضافه کردن خصوصیات و رفتارهای مخصوص به هر فرزند که دیگر مشترک نمیباشد. در واقع همین اطلاعات مخصوص به هر گروه باعث شد تا ما از اصل ارثبری استفاده کنیم. ماشینهای مسابقهای خصوصیات و رفتارهای خود را دارند و ماشینهای سنگین نیز همچنین.
⚜️چند ریختی (Polymorphism) : اصل چندریختی نیز یکی دیگر از اصول کاربردی و مهم شیگرایی میباشد. به این معنی است که یک موجودیت دارای چندین شکل یا رفتار باشد. همانطور که ما در برابر والدین یک نوع رفتار و در برابر دوست و همکار نوع دیگری رفتار خواهیم کرد.
⚜️یکی از ملموسترین و معروفترین مثالهایی که دراین مورد میتوان داشت زمانی است که مسئله شما محاسبه محیط و مساحت شکلهای هندسی متفاوت میباشد. یکی از معروفترین روشها داشتن یک کلاس والد میباشد به نام Shape که دارای متدهای محاسبه محیط و مساحت میباشد. حال برای هر شکل هندسی مثل مربع و مستطیل و دایره کلاس جداگانهای تعریف کرده و متدهای والد را با توجه به فرمول هر شکل پیادهسازی میکنیم. در نتیجه ما متدهایی داریم که رفتارهای گوناگونی دارند بر اساس اینکه کدام یک از فرزندان آنها را فراخوانی میکنند.
مدل شی گرا
?ﯾﮏ ﻣﺪل ﺷﯽ ﮔﺮا ﻣﺠﻤﻮﻋﻪ ای اﺳﺖ از اﺷﯿﺎء و ﮐﻼس ﻫﺎ ﮐﻪ در ﺟﻬﺖ ﭘﯿﺎده ﺳﺎزی رﻓﺘﺎر ﮐﻞ ﺳﯿﺴﺘﻢ ﺑﻪ ﯾﮑﺪﯾﮕﺮ ﭘﯿﻐﺎم ﻣﯽ ﻓﺮﺳﺘﻨﺪ و اﻋﻤﺎﻟﯽ را انجام ﻣﯽ دﻫﻨﺪ .ﯾﮏ ﺷﯽ، ﺳﺎﺧﺘﻤﺎن داده و رفتار مربوطه اش را یک جا و به طور مجتمع در خود نگاه می دارد.
مزایای برنامهنویسی شی گرا چیست؟
✳️افزایش امنیت برنامه
✳️کاهش هزینه نگهداری
✳️قابلیت استفاده مجدد
✳️تحلیل سادهتر برنامه
✳️قابلیت سازمان دهی بهینه تر کدها
✳️عدم نیاز به نوشتن کدهای تکراری و قابلیتهایی که قبلا پیادهسازی شدهاند و صرف جویی در استفاده از منابع
✳️قابلیت تقسیم برنامه به برنامههای کوچک تر اما مستقل
دیدگاهتان را بنویسید