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

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

  • جزئیات پیاده سازی داخلی داده و روتین ها از دنیای خارج قابل مشاهده نیست (مخفی سازی اطلاعات ). این خاصیت تاثیر تغییرات محیطی بر شیء را کاهش می-دهد.
  • ساختمان داده ها و اعمالی که برای دستکاری داده ها در نظر گرفته شده با هم ادغام شده و تحت یک نام (اسم کلاس) شناخته می شود و این اساس مؤلفة قابل استفاده مجدد را فراهم می نماید.
  • واسطه های ما بین اشیاء کپسوله شده ساده اند، لزومی ندارد که شئ فرستندة پیام از جزئیات ساختمان داده درونی شئ مقصد اطلاع داشته باشد.

خاصیت کلیدی بعدی که روش شیءگرا را از سایر روشها متمایز می دارد، ارث بری است. در شکل بالا زیر کلاس Graduate student همه صفات و اعمال متناظر شده با فوق کلاسش(Student) را به ارث می برد، بدین معنی که تمام ساختمان داده و الگوریتمهایی که برای فوق کلاسstudent طراحی و پیاده سازی شده برای کلاس تخصیص نیز در دسترس می باشد و هیچ کار اضافی لازم نیست انجام بگیرد . و عملاً از قابلیت استفاده مجدد استفاده می کند.

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

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

چند ریختی مشخصه ای دیگر از شئ گرا است که تا حد زیادی از کارهای لازم جهت توسعه سیستم موجود می کاهد. در واقع چند ریختی بمعنای انجام چند کار مختلف توسط یک چیز است؛ بعنوان مثال برای یک روتین که چهار شکل گرافیکی مختلف، بیضی ، دایره ، مربع و لوزی را رسم کند در حالت عادی برای هر نوع باید متد مخصوص نوشته شده و برای نوع جدیدتر نیز باید متد خاص خود را اضافه نماییم. برای پاسخ گویی به این مشکل در شئ گرایی از چند ریختی استفاده می کنیم، در اینجا همه این انواع به عنوان زیر کلاسهایی از کلاس عمومی Graphقرار می گیرند . هر زیر کلاس یک عمل بنامdraw تعریف می کند، شئ می تواند یک پیامdraw را به هر یک از اشیاء نمونه از یک زیر کلاس بفرستد، شئ گیرندة پیام از تابع draw ی خود می خواهد که رسم مناسب را تولید کند. وقتی که یک رسم الخط دیگر اضافه شود، یک زیر کلاس با تابع draw ی خاص خودش ایجاد می شود و بدین ترتیب کار طراحی ساده تر و از انجام کارهای تکراری جلوگیری می شود. بطور خلاصه، چند ریختی این توانایی را به ما می دهد که چند عمل مختلف را تحت یک نام واحد داشته باشیم.