برنامه نویسی شی گرا

آشنایی با برنامه نویسی شی گرا (Object Oriented Programing)

برنامه نویسی شی گرا (Object Oriented Programming) که به اختصار OOP نیز نامیده می‌شود، در حقیقت نوعی منطق یا الگوست که برگرفته از زندگی روزمره‌ی ما است. در اطراف خود به هر کجا بنگرید اشیایی را می بینید. پس انسان بر اساس اشیا فکر می کند. در برنامه نویسی شی گرا نیز ما می کوشیم که مفاهیم برنامه نویسی را، همانند اشیای دنیای واقعی مدل کنیم. زیرا ذهن انسان توانایی بالایی در انتزاع یا تجرید دارد و مدل سازی اشیا دارد پس در ادامه با این مقاله جالب از گروه تبلیغاتی فورسی همراه باشید.

اولین زبان برنامه نویسی شی گرا

اولین زبان برنامه نویسی شی گرا در دهه ۱۹۶۰ در مرکز محاسباتی نروژی در اسلو تحت عنوان Simula طراحی شد. با این که این برنامه اولین بود ولی Smaslltalk را باید به عنوان تنها محیط واقعی OOP در نظر گرفت. این محیط برای مصارف آموزشی در مرکز پژوهش Palo Alto در شرکت Xerox در اواخر دهه ۱۹۶۰ طراحی شد و در سال ۱۹۷۲ منتشر شد.

زبان های برنامه نویسی شی گرا و غیر شی گرا

زبان های برنامه نویسی رو از نظر های مختلف به دسته های مختلف تقسیم می کنن. یکی از این دسته بندی ها، بر اساس شی گرا بودن یا نبودنه. بخشی از این دسته بندی:

شی گرا: تقریبا تمام زبان های کاربردی امروزی مثل: C# و پایتون

غیر شی گرا: زبان های قدیمی مثل C و قدیمی تر از اون

شی گرایی

مفهوم کلاس (Class) در شی گرایی چیست؟

به زبان ساده می‌توان کلاس را به عنوان قالبی برای اشیا در نظر گرفت، مثلا خودروی BMW یک نمونه شئ از کلاس خودرو است، کلاس‌ها معمولا در بردارنده‌ی خصوصیات و رفتار اشیا هستند، مثلا کلاس خودرو دربردارنده‌ی ویژگی‌های یک خودرو مثل سرعت، وزن، رنگ و… است و هر مدل خودرویی که از این کلاس در نظر بگیریم تمامی ویژگی‌های گفته شده در کلاس را درون خود خواهد داشت، برای درک بهتر این مفهوم تصویر زیر را ببینید:

oop example car.png hamyarit.com oop example car min

مفاهیم پایه ای دیگر در شی گرایی

شی (Object) : ﺷﯽ ﻳﮏ ﻣﻮﺟﻮدﯾﺖ ﻓﯿﺰﯾﮑﯽ ﯾﺎ ﻣﻔﻬﻮم ﮐﻠﯽ اﺳﺖ ﺑﮕﻮﻧﻪ ای ﮐﻪ دارای ﻫﻮﻳﺖ ﺑﻮده و ﻗﺎدر ﺑﻪ ﺑﺮوز رﻓﺘﺎر و ﺛﺒﺖ ﺣﺎﻻت ﺧﻮد ﻣﯽ ﺑﺎﺷﺪ.

صفت (property):  ﻫﺮ ﺷﯽ ﯾﮑﺴﺮی ﺧﺼﻮﺻﯿﺎت دارد ﮐﻪ ﺑﻪ آﻧﻬﺎ  ﺻﻔﺖ ﮔﻔﺘﻪ ﻣﯽ ﺷﻮد. ﮐﻪ در واﻗﻊ ﯾﮏ مقدار و ارزش مشخصی برای آن به ازای هر شی می تواند وجود داشته باشد. مانند طول، ارتفاع، رنگ و … .

روش (Method) : هر شی در واقع یک سری رفتار دارد که به آن ها روش یا متد، گفته می شود. ﻣﺘﺪ در واﻗﻊ   ﭘﺎﺳﺦ ﻫﺎﯾﯽ اﺳﺖ ﮐﻪ آن ﺷﯽ در ﻣﻘﺎﺑل تحریکات ﻣﺤﯿﻂ از ﺧﻮد ﻧﺸﺎن می دهد.

چرا از برنامه‌نویسی شی گرا استفاده می‌کنیم؟

در حالت عادی شما کل برنامه را در قالب دستورات و توابع پشت سر هم می‌نویسید (Procedural) و برای تغییر هرچیزی از برنامه احتیاج دارید تا کل ساختار برنامه را بررسی کرده و موارد مورد نیاز را تغییر دهید.

فرض کنید در حال نوشتن برنامه‌ای در خصوص مدیریت خودروها هستید، شما برای هر مدل خودرو چندین خط کد می‌نویسید، در ادامه تصمیم می‌گیرید ویژگی جدیدی به خودروهای خود اضافه کنید، مثلا میزان شتاب خودرو، در این صورت باید کل دستورات برنامه را جستجو کرده و در تمام خطوط این ویژگی جدید را به تمامی خودروها اضافه کنید.

اما اگر برنامه‌ی خود را با استفاده از مفهوم شئ‌گرایی نوشته باشید در این صورت تنها کافیست این ویژگی (Attribute) جدید را به کلاس اصلی برنامه اضافه کنید تا سایر اشیا (خودروها) نیز این ویژگی جدید را به ارث ببرند و آن را درون خود داشته باشند، در این صورت دیگر احتیاجی نیست تک به تک خطوط برنامه را دستخوش تغییر کنید.

علاوه بر آن به دلیل ویژگی‌های خاصی که در برنامه‌نویسی شئ‌گرا حاکم است، دسترسی به داده‌های درون کلاس از بیرون امکان‌پذیر نیست و این مورد می‌تواند در حفظ امنیت برنامه‌ها به شما کمک کند.

اما چه چیزی باعث میشود این روش از روش رویه ای بهتر باشد؟ به طور خلاصه، سازماندهی داده ها و کد ها در زبان های برنامه نویسی شی گرا (مانند جاوا) برای پروژه های بزرگتر آسان تر است. برای بحث و گفتگو با جزئیات بیشتر در این مورد، ما در مورد چهار اصل برنامه نویسی شی گرا صحبت خواهیم کرد.

شی گرایی

برنامه نویسی شی گرا : Abstraction

وقتی میخواهید با چیزی کار کنید همیشه لازم نیست بدانید چطور کار میکند. به عنوان مثال یک دستگاه اسپرسو، ، پیچیده است. اما شما لازم نیست بدانید که چگونه کار می کند. فقط باید بدانید که هنگامی که “On” را فشار می دهید، قهوه اسپرسو را دریافت خواهید کرد.

همین مسئله در مورد برنامه نویسی شی گرا نیز صادق است. در مثال شطرنجی که در بالا به آن اشاره کردیم ممکن است متدی به نام ()move داشته باشیم. این متد ممکن است برای انجام کار خود به متدها و داده های دیگری نیاز داشته باشد.

ممکن است نیاز داشته باشد موقعیت کنونی و موقعیت نهایی را بداند. اما این کار را متدی دیگر برای او انجام میدهد، او لازم نیست بداند این کار به چه طریقی انجام میشود. حتی زمانی که از متد ()move برای حرکت استفاده میکنید فقط استفاده از این متد برای حرکت کردن شما کافیست و لازم نیست بدانید این کار به شکلی انجام میشود.

این مفهوم Abstraction و یا اتزاع در متد شی گرایی است که اشیا عملیات خود را از دیگران مخفی نگه میدارند. در این صورت پیچیدگی به شدت کاهش میبابد.

برنامه نویسی شی گرا : Encapsulation

Encapsulation یکی از راه هایی است که برنامه نویسی شی گرا از طریق آن انتزاع را ایجاد میکند. هر شی ایی مجموعه ای از داده ها است که که با آن به عنوان موجودیتی واحد رفتار خواهد شد. درون اشیا داده ها قرار دارند(هم متغیر ها و هم متد ها).

متغیرهای درون یک شی به طور کلی خصوصی نگهداری می شوند، به این معنی که اشیاء و متدهای دیگر نمی توانند به آنها دسترسی پیدا کنند. اشیا تنها از طریق متدهای خود تاثیر میپذیرند. مهره فیل در بازی شطرنج میتواند شامل اطلاعات مختلفی باشد. برای مثال، می تواند متغیری با نام “position” داشته باشد. این متغیر برای استفاده در متد ()move میتواند حیاتی باشد.

با خصوصی قرار دادن متغیر “position”  و عمومی قرار دادن متد ()move برنامه نویس از تاثیر ناپذیری متغیر توسط چیزی غیر از متد ()move مطمئن خواهد شد و این همان مفهوم کپسوله سازی در برنامه نویسی شی گراست.

برنامه نویسی شی گرا : ارث بری

علاوه بر کلاسها، زبانهای برنامه نویسی شی گرا شامل زیر کلاس ها هم هستند. زیر کلاس ها همه میتوانند همه مشخصات کلاس های والد خود را به ارث ببرند و خود نیز مستقلا دارای مشخصه های مربوط به خود باشند.

در بازی شطرنج ما، زمانی که مهره سرباز به انتهای صفحه شطرنج در زمین رغیب میرسد میتواند به مهره ای دیگر تبدیل شود. در اینجا میتوانیم متدی به نام  ()transformPiece را برای شی سرباز پیاده سازی کنیم. با این حال همه مهره های سرباز نمیتوانند به انتهای زمین رغیب برسند و البته بیشتر آنها نمیتوانند از این متد استفاده کنند.

پس میتوان به جای تعریف این متد در کلاس اصلی ، زیر کلاسی برای کلاس سرباز ایجاد کرد که همه مشخصات کلاس والد خود را به ارث میبرد و فقط شامل متد ()transformPiece برای تبدیل به مهره ای دیگر است.

برنامه نویسی شی گرا : Polymorphism

Polymorphism و یا به عبارت دیگر چند ریختی نتیجه وراثت است. درک کامل مفهوم چندریختی نیاز به کمی دانش برنامه نویسی دارد، بنابراین در اینجا اصول اولیه را بیان میکنیم. به طور خلاصه، پلی مورفیسم به برنامه نویسان اجازه میدهد از متد های همنام اما به همراه اشیای مختلف استفاده کنند.

برای مثال کلاس مهره در بازی شطرنج شامل متدی به نام ()move برای حرکت به اندازه یک خانه در هر جهتی است که البته برای مهره پادشاه عالی عمل میکند، اما برای مهره های دیگر مناسب نیست. برای حل مشکل میتوان در زیر کلاس های هر مهره متدی با همین نام را تعریف کرده که بسته به نوع مهره میتواند نوع حرکت را مشخص کند. اکنون برنامه نویس فقط کافی است متد ()move را بر روی مهره ای اعمال کند . در این صورت خود برنامه میداند نحوه حرکت به چه شکل است.

مزایای برنامه‌نویسی شی گرا چیست؟

  •  افزایش امنیت برنامه
  • کاهش هزینه نگهداری
  • قابلیت استفاده مجدد
  • تحلیل ساده‌تر برنامه
  • قابلیت سازمان دهی بهینه تر کدها
  • عدم نیاز به نوشتن کدهای تکراری و قابلیت‌هایی که قبلا پیاده‌سازی شده‌اند و صرف جویی در استفاده از منابع
  • قابلیت تقسیم برنامه به برنامه‌های کوچک تر اما مستقل

شی گرایی

انتقادها از زبان برنامه نویسی شی گرا

به چند دلیل از این مدل برنامه نویسی، انتقاد شده است. این مدل در حوزه توسعه نرم افزار بیش از حد روی داده تأکید دارد و به اندازه کافی روی محاسبات و الگوریتم‌ها متمرکز نیست. بعلاوه کد OOP بسیار پیچیده تر است و تکمیل آن زمان بیشتری می‌برد.

روش‌های جایگزین برنامه نویسی شی گرا شامل موارد زیر هستند:

  • برنامه نویسی تابعی (functional programming)
  • برنامه نویسی ساختار یافته (structured programming)
  • برنامه نویسی دستوری (imperative programming)

پیشرفته ترین زبان‌های برنامه نویسی امکان ترکیب این مدلها را در اختیار توسعه دهندگان نرم افزار قرار می‌دهند.

جمع بندی

برنامه نویسی شی گرا به عنوان یکی از روش‌های برنامه نویسی کامپیوتری در طراحی نرم افزار امکان تعریف کردن انواع داده و عملیات‌های مدنظر در ساختار داده را در اختیار برنامه نویسان و توسعه دهندگان نرم افزار قرار می‌دهد. با این روش، ساختار داده به یک شی تبدیل می‌شود که داده‌ها و توابع را در بر می‌گیرد. برنامه نویسان روابط بین شی‌ها را تعریف می‌کنند. برای مثال یک شی می‌تواند ویژگی‌هایش را از شی‌های دیگر ارث ببرد.

0 0 دادگاه‌ها
امتیاز مطلب
اشتراک در
اطلاع از
guest
0 دادگاه‌ها
بازخورد (Feedback) های اینلاین
نمایش همه دیدگاه‌ها
0
با نوشتن دیدگاهتان ما را مهمان کنید.x
()
x