برای شروع تعاریف قبلش باید با مفاهیم method signature و method implementation آشنا باشیم که ابتدا به این موارد میپردازم و سپس به کلاس های مذکور.
کد زیر را در نظر بگیرید:
public static int sum(int a,int b,int c) // به این قسمت میگن method signature // int is format of output { //از اینجا این میشه method implemantation return a+b+c ; }
تعریف کلی ساختار متد این است که از دو بخش تشکیل شده است :
1-method signature
2-method body(implementation body)
این تعریف زمانیکه میخواهیم abstract class رو توضیح دهیم به درد میخورد.
تعریف abstract method
در زبان فارسی abstract به معنی خلاصه است و متد Abstract متدی است که بخش بدنه(body) را ندارد.
در برنامه نویسی شی گرایی بدین صورت متدهای Abstract را تعریف میکنند:
همانطور که گفته شد بخش بادی وجود ندارد و کلمه کلیدی Abstract قبل از نام متد بدین منظور است که این متد قسمت پیاده سازی ندارد.
اگر قبل از کلاس ایجاد شود به این معناست که میتواند از 0 تا 100 درصد حاوی متد های Abstract است. به عبارتی دیگر یعنی همه ی متدهاش میتونه بصورت abstract پیاده سازی شده باشد یا هیچ متدی بصورت Abstract تعریف نشده است.
مفهوم Abstract Class در شی گرایی چیست؟
فرض کنید یک شکل هندسی دارید که کلاس است و میتواند یک سری متد داشته باشد. مانند شکل زیر.
سه تا از متدها بصورت abstract هستند و یک متد هم بصورت عمومی تعریف شده است که نام شکل هندسی را چاپ میکند.
سوالی که مطرح میشود این است که چرا سه متد را بصورت abstract تعریف کرده ایم ؟
برای اینکه شکل هندسی یک مفهوم انتزاعی دارد و میتواند هرچیزی باشد:ذوزنقه، دایره، لوزی و... اما هرچه باشد محیط و مساحت و شکل و شمایل دارد.
در اینجا سه زیرکلاس یا بچه برای کلاس شکل هندسی با استفاده از Extend ایجاد کردیم که تمام خصوصیات کلاس shape را دارند و تنها اتفاقی که می افتد هر فرزند باید متدهای abstract را درون خود پیاده سازی کند. به عبارتی دیگر پیاده سازی متدهای abstract را به فرزندان واگذار کرده است.
سوالی که ایجاد میشود این است کهabstract class ها برای چی استفاده میشوند؟ در مواردی که مفاهیم انتزاعی داریم. بطور مثال روش پرداخت، یک مفهوم انتزاعی است و از چندین روش میشود پرداخت را انجام داد. در حقیقت شما می دانید چیست اما در واقعیت روش های زیادی دارد.
در این حالت کافی است که یک abstract class برای روش پرداخت بنویسید که هر روش پرداخت یک سری کارهای مشخص انجام میدهد.
اسم abstract class روش پرداخت، pay باشد. و زیرشاخه هایی که اکستند میشوند مثلا پرداخت نقدی،آنلاین و کارت به کارت و ... باشد و متدهای abstract را باید پیاده سازی کند.
اما یک سری نکات برای تعریف abstract class ها باید درنظر گرفت که ضمن دانستن آنها باید آنها را بخاطر سپرد.