منوی سریع

مفاهیم شی گرایی در برنامه نویسی C++ - OOP(Object Oriented Programming) :

ما در ابتدای مطالب کلی در مورد C++ صحبت کردیم و گفتیم که بد ترکونده، نه برای اینکه 1 در صد از این زبان را بنده شاید بلد باشم. بلکه برای اینکه این جز حقیقت چیزی نیست .

تنها اختلاف بین زبان C و C++ مبحثی است بنام شی گرایی یا OOP(Object Oriented Programming) که همین مورد کافی است که دنیای نرم افزار شاهد تحول عظیمی در طراحی و پیاده سازی نزم افزارهای کنونی باشد .

بد نیست بدانید که اندیشه شی گرایی در زبان C++ آنقدر قوی است که به جرئت می توان گفت تمامی نرم افزارهای موجود مدیون این دید از برنامه نویسی هستند. اکثر سیستم عامل های رایج مانند Linux, Macintosh, ... بر گرفته از تفکر C++ هستند و Windows را صرفا با C++ و مبانی C نوشته اند .

نرم افزار های غولی مانند Office, Photoshop, Nero, ... را با این زبان طراحی و پیاده سازی کرده اند .

بیشتر زبان های کاربری امروزی توانایی های خود را بدون تفکر C++ هیچ می دانند مثل Java, Javascript, PHP, Delphi, C#, .NET, ... !!!

خوب این شی گرایی چی هست و به چه دردی می خورد که جناب آقای بی یارنه استراس تروپ دانمارکی را در جهان برنامه نویسی با جای دادن این مفاهیم در دل C وتکامل آن زبان به C++ جاودانه کرد .

بیشترین دغدغه توسعه دهندگان نرم افزارها و نیاز برنامه ها این بود که هر چه بیشتر ساختار برنامه ها را به دنیای واقعی انسان نزدیک نمایند و آنرا مفهومی کنند. اقداماتی در زمینه برنامه نویسی ساخت یافته انجام گرفت اما جوابگوی نیاز آنروز جهان نبود. با ورود OOP و اشیاء در تفکر برنامه نویسی صنعت نرم افزار پا به عرصه جدیدی از برنامه نویسی مبتنی بر اشیاء دنیای واقعی گذاشت و توانست تا به امروز با همین مبحث تا بدینجا پیش رود .

مثال) یک مثال ساده را میتوان DragDrop در درون محیط Windows در نظر گرفت. این کار را با Copy,Paste نیز می توان انجام داد اما عمل کشیدن و رها کردن یک فایل یا فولدر و قرار دادن آن در محلی دیگر نیاز نرم افزارهای پیشرفته و کاربران پر توقع امروزی است .

مفهوم شی گرایی

یک اتومبیل BMW را در نظر بگیرید. یک طرح و سیستم آن در کارخانه طراحی و پیاده سازی شده و با توجه به نیاز بازار از آن ساخته می شود .

به کارخانه BMW سازنده و طراح آن اتومبیل گفته می شود و به طرح و سیستم کلی آن طرح و الگوی ساخته شده از آن، مدل گفته می شود هر چند که مدل ها و طرح های دیگری نیز برای BMW وجود دارد. به اتومبیل BMW740Li که در همین تهران زیر پای یک آقا یا خانم توانمند است شیی از آن مدل گفته می شود. در این بین ممکن است فردی توانمندتر، از همان مدل با ویژگی های بهتری را به شرکت سازنده سفارش دهد که با کمی تغییر در جزئیات طرح اصلی شرکت آنرا به مشتری تحویل می دهد .

در برنامه نویسی شی گرا نیز همین طرز تفکر برقرارا است. در این مورد چهار مفهوم اساسی وجود دارد که هر یک را بررسی می کنیم :

نوع داده انتزاعی یا تجریدی (Data Abstract)

در زبان C++ انواع داده ای مختلفی مانند int,char,... تعریف شده اند و می توان از آنها در طول برنامه استفاده نمود اما نوع داده انتزاعی نوعی است که صرفا توسط خود کاربر تعریف می شود و نوع خاصی را شامل نمی شود و با ایجاد یک شی از آن نوع داده انتزاعی یا تجریدی می توان از داده ها و روال ها و رخدادهای درون آن بهره گرفت .

از این دسته می توان به Class, struct اشاره نمود که صدها و هزاران نوع از آنها را می توان با داده ها و روالهای مختلف تعریف نمود و با استفاده از یک یا چند شی آنها را در برنامه پیاده سازی کرد .

محرمانگی یا بسته بندی (Encapsulation)

این مفهوم دقیقا این است که در خارج از کارخانه BMW نمیتوان مدلی از آن اتومبیل را ساخت مگر اینکه تمامی شرایط را فراهم نمود و این یعنی ساخت یک کارخانه دیگر با همان امکانات و طرح و یعنی دیوانگی محض. یا اینکه خریدار با فشار دادن پدال ترمز، اتومبیل را متوقف می سازد در حالی که از چگونگی اجرای سیستم ترمز بی خبر است .

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

وراثت (Inheritance)

در کارخانه BMW ممکن است از یک سری خصوصیات و روالهای معینی برای مدلهای مختلف تولیدی استفاده نمود مانند آرم آن شرکت که در تمامی مدلهای تولیدی موجود است و در اصطلاح به آنها ارث رسیده است .

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

چند ریختی (polymorphism)

طرف میره کارخانه BMW و تقاضا می کند که روی همین دنده ای که وجود دارد یک دنده هوایی برای پرواز کردن هم قرار بگیرد. شرکت هم سیستمی را پیاد سازی می کند که مثلا دنده X مثل قبل کار کند و در این شرایط به دنده هوایی تبدیل شود .

در برنامه نویسی شی گرا هم این مورد صادق است و میتوان برای یک نمونه چندین تعریف مجزا را بیان نمود مثل عملگر جمع یا ... !!!

کلاس (Class)

همان طرح با خصوصیات و روالهای مشخص و تعریف شده در کارخانه است که با استفاده از آن یک نمونه را ساخته و به بازار وارد می کنند .

شی (Object)

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

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

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

با استفاده از برنامه نویسی مبتنی بر شی، یک نوع داده انتزاعی مثل Class تعریف شده و تمامی پارامترها، متغیرها، روالها، توابع، رخدادها و ... در همان Class تعریف می شود و برای دسترسی به هر یک از بیمه شدگان و کار با داده های آنها با تعریف یک Object از آن Class براحتی با تعداد بیشماری از بیمه شدگان می توان کار کرد و در صورت بروز مشکل یا ایجاد تغییر تنها کافی است که Class را تغییر داد .

ممکن است بیمه شدگانی دارای بیمه تکمیلی باشند پس از Class عمومی بیمه شدگان استفاده می کنند و Class جدیدی برای آنها تعریف می شود که از Class کلی خصوصیات و روالها را به ارث می برد یعنی دارای تمامی خصوصیات دیگر بیمه شدگان است به اضافه خصوصیات تعریفی برای خود. پس فرزند دارای کل خصوصیات و توابع پدر است بعلاوه خصوصیات خود و کاملتر از پدر .

با برنامه نویسی شی گراست که می توان به راحتی و مثل دنیای واقعی با برنامه تعامل داشت .

آموزش برنامه نویسی C++   آموزش برنامه نویسی C++