جلسه دوازدهم-وراثت (inheritance)-انتزاع (abstraction)-رابط (interface)

جلسه دوازدهم : وراثت (inheritance)، انتزاع (abstraction)و رابط (interface)

وراثت(inheritance):

همان طور که گفته شد یکی از ویژگیهای بارز برنامه نویسی شی گرایی وراثت می باشد. در جاوا برای ارث بردن از یک کلاس دیگر ، از کلید واژه extends پس از نام کلاس مورد نظر استفاده می شود.

هر کلاس در جاوا تنها می تواند از یک کلاس ارث بری نماید.

به کلاس اصلی که کلاسهای دیگر از آن ارث بری می نمایند Super Class و به کلاسهایی که از یک کلاس ارث بری می نمایندSub Class می گویند.

مثال:

Override:

چنانچه نام و در اصطلاح امضا (signature)متدی در زیر کلاسی با سوپر کلاسش یکسان باشد در آن صورت اصطلاحاً می‌گوییم که متدموجود در زیرکلاس، متد موجود در سوپر کلاس را Override می‌کند.

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

مثال:

خروجی:

k: 3

متدهای Override شده ویژگی چندریختی شی گرایی را پشتیبانی می نمایند.

نکته : وقتی بخواهیم متد سازنده Super Class را در Sub Class اجرا نماییم از کلمه کلیدی Super استفاده میکنیم.

مثال:

 

 

خروجی:

Inside Area for Rectangle.

Area is 45

Inside Area for Triangle.

Area is 40

Area for Figure is undefined.

Area is 0

کلاس انتزاعی (Abstract):

کلاسی است که درون آن میتوان متدهایی تنها با نام و امضا(معرفی متد بدون بدنه) قرار داد . هنگامی که یک کلاس abstract می شود امکان ساختن شی از روی آن وجود ندارد و فقط میتوان از این کلاسها ارث بری کرد و متدهای درون آنها را میتوان به شکل های متفاوت و متناسب با کاربرد کلاس مورد نظر override نمود .

متدهای abstract فاقد بدنه بوده و بدنه آن در کلاس فرزند پیاده سازی میشوند.

برای Abstract کردن کلاس کافیست قبل از تعریف کلاس از کلمه کلیدی abstract استفاده نمود.

مثال:

 

خروجی:

B’s implementation of callme.

This is a concrete method.

 

final

گاهی اوقات لازم است از ارث بری کلاسی توسط کلاسهای دیگر جلوگیری نمود بدین منظور کلاس مورد نظر به صورت final تعریف میگردد همچنین متدهایی هم که final تعریف می شوند امکان override کردنشان وجود ندارد. برای تعریف ثابت (const) در برنامه کافیست از کلمه کلیدی final قبل از تعریف متغیر در سطح کلاس استفاده نمود.

برای final کردن کلاسها و متدها کافیست قبل از تعریفشان از کلمه کلیدی final استفاده نمود.

مثال:

 

رابط(interface)

Interface ها شباهت زیاذی به کلاسهای abstract دارند و امکان آن وجود ندارد که بتوان از رابط ها شی سازی کرد .یکی از تفاوتهایی که بین کلاسهای abstract با interface ها وجود دارد این است که در کلاسهای abstract متدها می توانند دارای بدنه باشند اما در interface ها متدها باید فاقد بدنه و به صورت public تعریف شوند .

برای ارث بری از یک interface به جای کلمه extends از کلمه کلیدی implements استفاده می نماییم.

نکته:در جاوا امکان ارث بری همزمان از چندین interface برای یک کلاس وجود دارد.

 

نحوه تعریف interface (رابط):

interface Callback {

void callback(int param);

}

 

مثال نحوه پیاده سازی interface (رابط):

 

 

مدیریت استثنائات در جاوا (Exception Handling) :

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

برای آنکه از توقف برنامه در حین اجرا جلوگیری کنیم و از طرفی در زمان وقوع خطا بتوان آن را مدیریت کرد باید از دستور try و catch استفاده نمود.

این دستور شامل دو بلوک میباشد . بلوک اول try که در آن احتمال بروز خطاها بررسی میگردد و بلوک دوم catch که دستورات آن در صورت بروز خطا اجرا میگردد.

مثال :

خروجی:

Division by zero.

After catch statement.