برنامه نویسی شی گرا چیست ؟
برنامه نویسی شی گرا (OOP) یک پارادایم برنامه نویسی است که بر مفهوم کلاس ها و اشیاء تکیه دارد. و از آن برای ساده تر کردن ساختار کدنویسی برنامه ها استفاده می شود ساختار کلی برنامه نویسی شگرا بر پایه کلاس ها و آبجت هاست و یک کلاس به عنوان یک blue print شناخته می شود که در طول پروسه توسعه نرم افزار بر پایه شی گرایی می توان از آن شی جدید ساخته و استفاده کرد. برنامه نویسی شی گرا یا Object-Oriented Programming به توسعه دهندگان اجازه می دهد تا بخش های مشابه به را در مفهومی به اسم کلاس، دسته بندی نمایند و این دسته بندی به برنامه نویسان کمک می کند تا به مفهوم DRY یا همان Don’t Repeat Yourself بیشتر نزدیک گردند، و علاوه بر آن نگهداری کدها یا مدیریت و تغیرشان در آینده راحت تر خواهد بود. (به این مفهوم در زبان انگلیسی easy-to-maintain گفته می شود). یکی از مهم ترین مزیت های این سبک از برنامه نویسی، آن است که اگر قرار باشد تکه ای از کدهای برنامه شما تغییر کند، فقط بخش مورد نظر در کدهای شما بروز رسانی و یا یا تغییر می کند و نیازی به تغییر در سایر بخش های نیست. بطور کلی زبان های برنامه نویسی زیادی وجود دارد که از شی گرایی پشتیبانی می کنند مانند جاوا, پایتون, جاوااسکریپت, سی پلاس پلاس, PHP و ...

ساختار برنامه نویسی شی گرا چیست؟
بطور کلی ساختار برنامه نویسی شی گرا شامل 4 بخش زیر می باشد:
- کلاس ها ( class ) : انواع داده های تعریف شده توسط توسعه دهند هستند که به عنوان طرح اولیه ( blue print ) برای اشیا، ویژگی ها استفاده می شود.
- اشیاء ( object ) : نمونه هایی از یک کلاس هستند که با داده های مشخصاً تعریف شده ایجاد شده اند. اشیاء می توانند با اشیاء دنیای واقعی یا یک موجود انتزاعی مطابقت داشته باشند.
- متدها ( method ) : در واقع همان توابع هستند که در یک کلاس با نام متد تعریف می شوند و هر کدام رفتارهای خاصی از یک شی را توصیف می کنند.
- پراپرتی ها ( property ) : در واقع همان متغیرها هستند که در یک کلاس با نام پراپرتی تعریف می شوند و در قالب کلاس ها تعریف می شوند و مشخص کننده ویژگی ها یک کلاس هستند.

اصول و مفاهیم اصلی در شی گرایی چیست؟
کپسوله سازی ( Encapsulation ) : این اصل بیان می کند که تمام اطلاعات مهم و مرتبط با یکدیگر در داخل یک کلاس قرار دارد و فقط اطلاعات مورد نیاز پس از ساخت شی از کلاس مورد نظر در معرض دید و دسترس سایر بخش های برنامه قرار می گیرند. این بدان معناست که کلاس ها و اشیا دیگر به اطلاعات این کلاس دسترسی و یا اختیار ایجاد تغییرات در اطلاعات آن را ندارند. آنها فقط می توانند لیستی از توابع یا متدهای عمومی از کلاس مورد نظر را را فراخوانی کنند. این ویژگی پنهان کردن داده ها امنیت برنامه را بیشتر می کند و از خراب شدن ناخواسته داده ها جلوگیری می کند.
انتزاع ( Abstraction ) : این اصل بیان می کند که ما به جای تمرکز روی یک شی عینی از چیزی، روی مفهوم چیزها متمرکز شویم و مفهومی کلی را در نظر بگیریم. Abstraction به مفهومی انتزاعی در ذهن برنامه نویس گفته میشود که کلی است و هیچ ارتباطی با یک آبجکت ( شی ) خاص ندارد.
ارث بری ( Inheritance ) : این اصل بیان می کند که کلاس ها می توانند از کدهای کلاس های دیگر استفاده مجدد کنند. این امر توسعهدهندگان را قادر میسازد تا از متدهای مشترک در سایر کلاس ها استفاده مجدد کنند . این ویژگی در شی گرایی باعث تجزیه و تحلیل دقیق تر داده ها می شود و زمان توسعه را کاهش می دهد و سطح بالاتری از دقت را تضمین می کند.
چندریختی یا چند شکلی ( Polymorphism ) : این اصل بیان می کند که یک کلاس به هنگام ارث بری یک سری از خصوصیات از کلاس والد خود علاوه بر استفاده از موارد به ارث برده شد توانایی ایجاد تغییر در مقادیر و رفتار خوصیات والد خود را برای گسترش رفتار خود را داراست که به اصطلاح به آن override گفته می شود.

مزیت های برنامه نویسی شی گرا چیست ؟
یکی از مهم ترین مزیت برنامه نویسی شی گرا که باعث می شود که اکثر برنامه نویسان و توسعه دهندگان از آن استفاده کنند، شباهت این سبک از برنامه نویسی با مفاهیم دنیای واقعی است. در واقع برنامه نویس و توسعه دهند قادر است مفاهیم بسیار پیچیده برنامه نویسی را با مفاهیم شی گرایی به نکات قابل فهم در دنیا واقعی تبدیل کرده و یا مصداق آنرا در قالب مثال بیان کنید. اگر دقت کرده باشید اطراف ما اشیا فراوانی از قبیل ماشین ها ,ساختمان ها و ... وجود دارد که هر کدام از آن ها خواص منحصر به فردی دارند که آنها را از شی و یا اشیا مشابه خود متمایز می کند و هر شی می تواند رفتاری از خود بروز دهد که مختص همان شی است. این مفاهیم باعث شد تا همه این ها در دنیای برنامه نویسی شی گرا استفاده شود. در واقع در این سبک از برنامه نویسی, برنامه نویس با پیروی از الگوهای شی گرا به شکل محسوسی از آشفتگی لاجیک و ساختار کدها جلوگیری می نماید ، در حقیقت برنامه نویسی شی گرا ( OOP ) روش برنامه نویسی است که در آن برنامه نویس، تمامی متغیرها و توابعی که بهم مرتبط می باشند را در قالب یک کلاس منفرد، سازمان دهی می کند البته این کار تنها بخش کوچکی از قابلیت های برنامه نویسی شی گرا می باشد در طول این دوره به طور مفصل به این مفاهیم خواهیم پرداخت . همانند تمام پارادایم های برنامه نویسی، این پارادایم نیز مزایا و معایب خود را دارد. به صورت مختصر می توان گفت که در پروژه های ساده و کوچک که توسعه چندانی هم در آینده نخواهند داشت، استفاده از پارادایم رویه ای ( Procedural ) که بر اساس استفاده از توابع می باشد، ممکن از مناسب تر باشد, اما در پروژه هایی با ابعاد متوسط و بزرگ و پیچیده ، قطعا باید از پارادایم شی گرایی در برنامه نویسی استفاده کرد چون هم باعث کاهش پیچیدگی کدها در آینده خواهد شد و هم نگهداری و عیب یابی آن به مراتب ساده تر از روش های برنامه نویسی رویه ای می باشد.
بطور کلی برنامه نویسی شگرا :
- موارد پیچیده را به ساختارهای تکرارپذیر و ساده مدل می کند.
- قابلیت استفاده از اشیا ساخته شده در سراسر کدها و برنامه که به آن Reusibilty گفته می شود میسر می سازد.
- اجازه دادن به کلاس ها برای انجام عمل یا رفتاری خاص در ساختار Polymorphism فراهم می سازد.
- عیب یابی کدها و نگهداری آنها را آسان تر می کند.
- ماژولار سازی بخش های مختلف برنامه را در قالب مفهوم کپسوله سازی فراهم می کند که در نتیجه باعث عیب یابی آسانتر کدها می شود.
- برنامه نویسان را قادر می سازد تا به پیادسازی کدهایی با قابل استفاده مجدد در سایر برنامه ها بپردازند.
فراز توانا
دانشجوی : دوره مفاهیم شی گرایی در php
تو این سالها ویدیو های آموزشی زیادی خریدم تنها آموزشی که میشه به کیفیتش اطمینان پیدا داشت آموزش های استاد صالحی هست .
رضا
دانشجوی : دوره مفاهیم شی گرایی در php
سلام این دوره بسیار خوب و کاربردی بود و مفاهیم بسیار خوب منتقل شد . از استاد گرامی به خاطر تدریس خوبشان کمال تشکر را دارم .
mahdi falahati
دانشجوی : دوره مفاهیم شی گرایی در php
سلام همه چی خوبه فقط زمان قسمت ها زیاده به نظر من بیشتر از بیست دقیقه دیگه خسته کننده میشه
محمدحسین مهریار
دانشجوی : دوره مفاهیم شی گرایی در php
با سلام دوره ی بسیار عالی و کاربردی با بیان شیوای استاد صالحی عزیز.به همه ی دوستان توصیه میکنم. در حال یادگیری این دوره هستم و همچنین منتظر ویدئو های دوره ی پروژه محور PHP MVC. با تشکر از آقای مهندس صالحی