شی گرایی چیست؟
در دنیای فناوری و برنامهنویسی، یکی از مفاهیم اساسی و حیاتی، شی گرایی یا OOP است. این روش برنامهنویسی به ما امکان میدهد تا کدهایمان را به شیءها یا Objects تقسیم کنیم و ارتباطات بین آنها را مدل کنیم. اصول شی گرایی، از جمله انتزاع، پلیمورفیسم، وراثت، و یکپارچگی، به ما کمک میکنند تا بهتر و قابلتوسعهتر برنامه نوشته و مدیریت کنیم.
در این مقاله از سبز لرن، به بررسی مفهوم شی گرایی، اصول و مزایای آن، و کاربردهای مختلف در صنعت و توسعه نرمافزار خواهیم پرداخت.
شی گرایی چیست
برنامه نویسی شی گرا چیست؟ به صورت کلی واژه شی گرایی یا OOP مخفف Object-Oriented Programming است. شی گرایی یک روش برنامهنویسی است که بر اساس مفهوم ایجاد شیءها و انجام عملیات بر روی آنها میباشد. در این روش، دادهها و کد مرتبط با هم درون یک شیء ترکیب شده و به صورت مستقل از دیگر شیءها مدیریت میشوند.
برای مثال، بگذارید به صورت ساده تصور کنیم که یک شیء به نام “خودرو” داریم. این خودرو شامل ویژگیهایی مانند سرعت، رنگ، وضعیت موتور و متدهایی مانند شتاب دادن یا توقف کردن است؛ در ادامه مثال های بهتری را بررسی خواهیم کرد.
مثال 1 | خودرو
فرض کنید یک خودرو دارید. این خودرو میتواند ویژگیهایی مانند رنگ، سرعت و وضعیت موتور داشته باشد. همچنین، عملیاتی مانند شتاب دادن یا توقف کردن را میتوانید بر روی آن انجام دهید.
مثال 2 | حساب بانکی
تصور کنید یک حساب بانکی دارید. این حساب شامل ویژگیهایی مانند موجودی، شماره حساب و نام صاحب حساب است. همچنین، شما میتوانید عملیاتی مانند واریز و برداشت وجه را بر روی این حساب انجام دهید.
مثال 3 | فیلم
فرض کنید یک فیلم دارید. این فیلم دارای ویژگیهایی مانند عنوان، نوع و بازیگران است. همچنین، شما میتوانید عملیاتی مانند پخش کردن یا توقف دادن فیلم را انجام دهید.
با این مثالها، میتوانید بهتر مفهوم شی گرایی را درک کنید. ایده اصلی این است که هر شیء دارای ویژگیها و عملیات مشخصی است که میتوانید بر روی آن انجام دهید. این ایده در برنامهنویسی به ما کمک میکند تا برنامهها را به صورت منظم و سازمان یافته طراحی و توسعه دهیم.
ساختار برنامه نویسی شی گرا چیست؟
ساختار برنامهنویسی شیءگرا معمولاً با استفاده از اشیاء (Objects) و کلاسها (Class) ساخته میشود. در برنامهنویسی شیءگرا، هر کلاس شامل ویژگیها (Properties) و عملیات (Methods) است که به کمک آنها میتوانیم اشیاء را ایجاد کنیم و با آنها تعامل داشته باشیم.
یکی از ساختارهای اصلی برنامهنویسی شیءگرا، ترکیب چند کلاس با یکدیگر است. این به ما امکان میدهد که روابط بین اشیاء را بسیار سادهتر و قابل فهمتر ایجاد کنیم. به عنوان مثال، یک کلاس “ماشین” میتواند شامل اشیاء مربوط به “موتور”، “چرخ”، و “درب” باشد، که هر کدام ویژگیها و عملیاتهای خود را دارند.
همچنین، یکی از ویژگیهای اصلی برنامهنویسی شیءگرا، وراثت (Inheritance) است. این به ما امکان میدهد که یک کلاس جدید را از یک کلاس موجود به ارث ببریم و ویژگیها و عملیات آن را ارث بری کنیم. به عنوان مثال، اگر یک کلاس “خودرو” داریم، میتوانیم یک کلاس “اتوبوس” را از آن ارث ببریم و ویژگیها و عملیات خاص خودرو را بازنویسی کنیم.
ساختار برنامهنویسی شیءگرا همچنین شامل پلیمورفیسم (Polymorphism) است که امکان اجرای متد های مشابه در کلاسهای مختلف را فراهم میکند. این ویژگی به ما اجازه میدهد که با استفاده از یک نام متد، عملیاتهای متفاوت را بر روی اشیاء انجام دهیم.
با استفاده از این ساختارها و اصول برنامهنویسی شیءگرا، برنامهنویسان قادرند برنامههای پیچیده و بزرگی را با استفاده از اشیاء و کلاسها به صورت منظم و سازمان یافته ایجاد کنند.
پیشنهاد مقاله: آموزش شی گرایی در پایتون
اصول شی گرایی
اصول شی گرایی یک روش طراحی در برنامهنویسی است که به ما کمک میکند برنامهها را به شکل ساختارمند و منظم طراحی کنیم. این اصول شامل موارد زیر است:
1 | کپسوله سازی (Encapsulation)
این اصل بیان میکند که داده و عملیات مرتبط باید در یک واحد منطقی ترکیب شوند. به عبارت دیگر، اطلاعات و روشهای پردازش این اطلاعات باید در یک کلاس یا شیء قرار بگیرند. این باعث میشود که اطلاعات محافظت شوند و فقط از طریق روشهای مشخصی به آنها دسترسی داشته باشیم.
مثال | فرض کنید یک گوشی همراه دارید:
در یک گوشی همراه، معمولاً دارای دادهها (اطلاعات شماره تلفن، پیامها، تصاویر و …) و عملیات (تماس گرفتن، پیام فرستادن، عکس گرفتن و …) مختلفی است. حال اگر فرض کنیم که گوشی همراه یک شیء است، اصل کپسولهسازی بیان میکند که باید این دادهها و عملیاتهای مرتبط به صورت منطقی درون این شیء ترکیب شوند.
به عنوان مثال، فرض کنید میخواهید شماره تلفن یک فرد را در گوشی خود ذخیره کنید. بجای اینکه مستقیماً به داده شماره تلفن دسترسی داشته باشید و آن را تغییر دهید، بهتر است یک متد یا تابع در این شیء (گوشی) ایجاد کنید که امکان دسترسی، تغییر و حذف شماره تلفن را فراهم کند. به این ترتیب، داده شماره تلفن از دسترسی مستقیم به بیرون محافظت شده و فقط از طریق این متد یا تابع در دسترس خواهد بود.
با کپسوله سازی، انعطافپذیری و ایمنی کد افزایش مییابد. اگر نیاز به تغییرات در آینده وجود داشته باشد، میتوانید تنها متدها و توابع مربوط به دادهها را تغییر دهید، بدون اینکه به کد بیرونی نیاز داشته باشید. این اصل کمک میکند تا برنامهنویسی را قابلتر درک کرده و از اشکالات و مشکلات در آینده جلوگیری کنیم.
2 | وراثت (Inheritance)
یکی از اصول مهم در برنامهنویسی شیءگرا است که به شما امکان میدهد از ویژگیها و عملیات یک کلاس موجود استفاده کنید و آنها را گسترش دهید یا تغییر دهید بدون نیاز به نوشتن کدهای تکراری.
مثال 1 | پدر و فرزند
فرض کنید که یک پدر و یک فرزند دارید. در اینجا، پدر میتواند ویژگیها و خصوصیتهای خود را به فرزند ارث بدهد. بنابراین، فرزند میتواند از ویژگیها و عملیات پدر (که به عنوان کلاس والد شناخته میشود) بهره مند شود و در صورت نیاز، آنها را گسترش دهد یا تغییر دهد.
مثال 2 | خودرو
فرض کنید که یک کلاس “خودرو” داریم که ویژگیهایی مانند سرعت، رنگ، وزن و عملیاتی مانند حرکت، توقف، و تعویض رنگ را دارد. حالا، با ایجاد یک کلاس “اتومبیل” که از کلاس “خودرو” ارث برده است، می توانیم ویژگیها و عملیات کلاس “خودرو” را به فرزندمان “اتومبیل” انتقال دهیم. از آنجا که اتومبیل یک نوع خاص از خودرو
است، ممکن است نیاز به اضافه کردن ویژگیها یا عملیات خاص به این کلاس داشته باشیم، که با استفاده از اصل وراثت، میتوانیم این تغییرات را اعمال کنیم بدون تکرار کد.
از این اصل برای افزایش قابلیت گسترش و کاهش تکرار کد استفاده میشود و باعث افزایش انعطافپذیری و بهرهوری در توسعه نرمافزار میشود.
3 | پلیمورفیسم (Polymorphism)
پلیمورفیسم یا چندریختی یکی دیگر از اصول مهم در برنامهنویسی شیءگرا است که به شما امکان میدهد یک عملیات یا ویژگی به شکلهای مختلف در کلاسهای مختلف پیادهسازی شود. به این ترتیب، میتوانید با استفاده از یک نام مشترک برای عملیات یا ویژگیها، برنامه خود را به شکلی پویا و قابل تغییر طراحی کنید.
مثال 1 | پخش
فرض کنید که یک عملیات به نام “پخش” داریم که بر روی اشیاء از نوعهای مختلف اعمال میشود. با استفاده از اصل پلیمورفیسم، میتوانیم عملیات “پخش” را در هر کلاسی که نیاز دارد، به شکل خاص و منحصر به فردی پیادهسازی کنیم، بدون نیاز به تغییر کد برنامه اصلی.
مثال 2 | محاسبه مساحت و محیط
فرض کنید که یک کلاس “شکل” داریم که ویژگیها و عملیاتی مانند محاسبه مساحت و محیط را دارد. حالا، اگر سه کلاس “مثلث”، “مستطیل” و “دایره” داشته باشیم که هرکدام از این کلاسها بر اساس شکلات مختلف هستند، میتوانیم عملیات محاسبه مساحت و محاسبه محیط را در هریک از این کلاسها به شکل مناسب برای آن شکل پیادهسازی کنیم. این امر به ما اجازه میدهد که بدون تغییر در اصل کد، عملیاتهای مختلف را بر روی شکلات مختلف اعمال کنیم.
با استفاده از اصل پلیمورفیسم در برنامهنویسی شیءگرا، میتوانیم کد برنامهی خود را به شکلی انعطافپذیر و تغییر پذیر طراحی کنیم و به راحتی ویژگیها و عملیاتهای جدید را بر اساس نیازهای جدید اضافه کنیم.
4 | انتزاع (Abstraction)
انتزاع از اصول اساسی برنامهنویسی شیءگرا است که به شما امکان میدهد جزئیات پیچیده و فنی یک کلاس را مخفی کنید و تنها ویژگیها و عملیات اساسی و مهم را بروز دهید. در واقع، انتزاع به شما این امکان را میدهد که یک مدل سادهتر و قابل فهمتر از یک کلاس یا یک شیء را ارائه دهید.
مثال 1 | خودرو
برای توضیح بهتر، فرض کنید که یک کلاس “خودرو” داریم. این کلاس ممکن است ویژگیهایی مانند سرعت، تعداد چرخ، رنگ و… را داشته باشد. با استفاده از اصل انتزاع، میتوانیم جزئیات پیچیدهتر مربوط به نحوه کارکرد موتور، سیستم ترمز، و غیره را از دید کاربر مخفی کنیم و تنها ویژگیهای اساسی و مهم خودرو را نمایش دهیم. به این ترتیب، از کاربردن یک سطح انتزاع برای کلاس “خودرو” استفاده میکنیم تا پیچیدگی را کاهش دهیم و کد را بهتر مدیریت کنیم.
مثال 2 | پرندگان
مثال دیگری از انتزاع میتواند در یک کلاس “پرندگان” باشد. در این کلاس ما میتوانیم ویژگیهای مشترک بین پرندگان مانند نام، رنگ، وزن و… را ارائه دهیم و جزئیاتی مانند نحوه پرواز یا نوع تغذیه را پنهان کنیم. این امر به ما کمک میکند که یک مدل ساده و قابل فهم از پرندگان ارائه دهیم و همچنین فرصتی برای افزودن انواع مختلف پرندگان به کدمان را فراهم میکند.
به این ترتیب، استفاده از اصل انتزاع در برنامهنویسی شیءگرا به ما این امکان را میدهد که یک مدل ساده، قابل فهم و قابل استفاده از یک شیء یا کلاس ایجاد کنیم و جزئیات پیچیدهتر را پنهان کنیم.
این اصول، باعث افزایش خوانایی، قابلیت تعمیر و توسعه کد، بهبود قابلیت استفاده مجدد و کاهش پیچیدگی در طراحی و توسعه برنامهها میشوند.
پیشنهاد مقاله: آموزش شی گرایی در جاوا اسکریپت
مزایا و معایب شی گرایی چیست
برنامهنویسی شیءگرا دارای مزایا و معایب خود است که در زیر به برخی از آنها اشاره میکنم:
مزایا برنامه نویسی شیگرا
- قابلیت استفاده مجدد از کد
- صرفهجویی در زمان
- کدنویسی بهینه و تمیز
- بالا رفتن امنیت
- ارتقا سادهتر پروژه
معایب برنامه نویسی شیگرا
- پیچیدگی در پروژههای بزرگتر
- مصرف منابع بیشتر
- کنترل پنهان
با این حال، برنامهنویسی شیءگرا همچنان یکی از روشهای اصلی و محبوب برنامهنویسی است که به برنامهنویسان امکان میدهد برنامههای کیفی و قابل توسعهای ایجاد کنند.
زبان های برنامه نویسی شی گرا
زبانهای برنامهنویسی شیءگرا بسیار متنوع هستند و در زیر به برخی از معروفترین زبانهای برنامهنویسی شیءگرا اشاره میکنم:
- جاوا (Java)
- سی پلاس پلاس (++c)
- پایتون (Python)
- سی شارپ (#C)
- پی اچ پی (php)
- جاوا اسکریپت (JavaScript)
- روبی (Ruby)
- سوئیفت (Swift)
- کاتلین (Kotlin)
- اسکالا (Scala)
این فقط چند نمونه از زبانهای برنامهنویسی شیءگرا هستند و هر کدام با قابلیتها و کاربردهای خاص خود مورد استفاده قرار میگیرند.
جمع بندی
در این مقاله به سوال اصلی “شی گرایی چیست” پاسخ دادیم و به معرفی ساختار و اصول برنامه نویسی شی گرا پرداختیم و همینطور مزایا و معایب این روش را مورد بررسی قرار دادیم.
در این مقاله تلاش بر این بوده اطلاعات کاملی در اختیار شما قرار بگیره با این حال اگر هنوزم سوالی دارید در بخش نظرات بپرسید تا در اولین فرصت پاسخ آن را دریافت کنید.
نظری برای این مقاله ثبت نشده است