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

اشیاء کانون توجه برنامه نویسان هستند. یک شیئ ساختاری است شامل داده ها و متدهایی که روی داده ها عمل می کنند. تقریبا هر عملی که در یک زبان برنامه نویسی شیئ گرا انجام می دهید مرتبط با اشیاء است.

۱-۱- کلاس ها و اشیاء

            کلمات کلاس و شیئ در برنامه نویسی شیئ گرا بسیار زیاد استفاده می شوند و همین برای اشتباه گرفتن این دو مفهوم با هم دیگر کافیست.

در اصل، کلاس، تعریف مجرد یک چیز است در صورتی که شیئ، یک نمونه قابل استفاده از آن چیزی است که کلاس آن را تعریف نموده. تنها استثناء این قانون اعضاء به اشتراک گذاشته شده کلاس یعنی اعضایی که با کلمه کلیدی Shared در یک کلاس تعریف شده اند، هستند که در هر دو دسته یعنی نمونه کلاس و متغیرهای شیئ تعریف شده از نوع همان کلاس قابل استفاده اند.

۱-۲- فیلد ها، صفت ها ، متد ها و رویداد ها

هر کلاسی از فیلدها، ویژگی ها، متد ها و رویداد هایی تشکیل شده است. فیلدها و صفت ها امکان ذخیره و بازیابی اطلاعات موجود در یک شیئ را فراهم می کنند. فیلد ها شبیه به متغیر ها هستند زیرا می توان مقدار آن ها را مستقیما خواند یا تغییر داد. برای مثال اگر شیئی به نام خودرو (Car) وجود داشته باشد، می توان رنگ آن را در فیلدی به نام Color  ذخیره نمود.

صفت ها نیز مانند فیلد ها برای ذخیره و بازیابی داده های یک شیئ قابل استفاده اند، اما به همراه دو زیربرنامه بازیابی صفت (property get) و تغییر صفت (property set) پیاده سازی می شوند. این زیربرنامه ها امکان کنترل بیشتری بر چگونگی ذخیره و بازیابی اطلاعات در شیئی فراهم می کنند. بنابراین صفت ها مانند فیلدها به صورت مستقیم خوانده یا نوشته نمی شوند بلکه این کار به واسطه دو زیربرنامه یادشده انجام می شود. این دو زیر برنامه با ایجاد لایه ای به ایزوله کردن داده های درون شیئ از محیط بیرون شیئ کمک می کنند و به برنامه نویس – طراح شیئ – اجازه می دهند تا قبل از ذخیره و بازیابی مقادیر داده ها آنها را اعتبار سنجی نماید.

متد ها عملیات و رفتاری که یک شیئ می تواند انجام دهد را به وجود می آورند. برای مثال یک شیئ خودرو (Car) می تواند متدهایی به نام روشن کردن موتور(StartEngine) ، حرکت کردن (Drive) و توقف (Stop) داشته باشد.

رویداد ها، پیام هایی هستند که یک شیئ از سایر اشیاء یا برنامه ها دریافت می کند یا به آنها ارسال می نماید. رویدادها اشیاء را قادر می سازند تا در صورت رخداد واقعه ای خاص عملی را انجام دهند. به عنوان مثال رویدادی به نام Check_Engine برای کلاس Car. از آنجا که ویندوز مایکرسافت یک سیستم عامل رویداد گردان است، رویدادها ممکن است از سایر اشیاء، نرم افزارها یا ورودی کاربر مانند کلیک ماوس یا فشردن کلیدی در صفحه کلید به شیئ مورد نظر ما برسند.

۱- ۳- کپسوله سازی، وراثت و چند ریختی

            فیلدها، صفت ها، متدها و رویداد ها تنها یک نیمه معادله برنامه نویسی شیئ گرا هستند. برنامه نویسی شیئ گرای واقعی نیازمند پشتیبانی از سه ویژگی می باشد: کپسوله سازی، وراثت و چندریختی.

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

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

            چندریختی یعنی آنکه شما می توانید چندین کلاس با وظایف نزدیک به هم داشته باشید که می توانند هر کدام یک صفت یا متد یکسان را به شیوه های متفاوت پیاده سازی کنند. چندریختی در برنامه نویسی شیئ گرا دارای اهمیت است زیرا اجازه استفاده از آیتم های با نام یکسان را علی رغم تفاوت نوع شیئ مورد استفاده می دهد. به عنوان مثال برای کلاس داده شده Car چندریختی برنامه نویس را قادر می سازد تا متد  StartEngine را برای کلاس های مشتق شده از کلاس Car به طور کاملا متفاوتی پیاده سازی نماید. مثلا ممکن است متد StartEngine کلاس DieselCar با همین متد در کلاس اصلی کاملا متفاوت باشد. سایر زیربرنامه ها و متدها می توانند متدStartEngine  از یک شیئ را به شیوه یکسانی فراخوانی کنند بدون آنکه نوع کلاس آن شیئ اهمیتی داشته باشد.

۱-۴- بیش بارگذاری(آورلودینگ)، بازنویسی(آوررایدینگ) و سایه گذاری(شادوینگ)

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

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

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

            اعضاء شادو شده برای جایگزینی محلی یک عضو به کار می رود.هر نوعی می تواند نوع دیگر را شادو کند. برای مثال شما می توانید یک صفت تعریف کنید که یک متد ارث برده شده را با همان نام شادو کند. اعضای شادو شده ارث برده نمی شوند.