مترجم : حبیب الله علیخانی
منبع:راسخون
منبع:راسخون
Abstract ( انتزاعی- مجرد )
Abstract یعنی چکیده یا خلاصه. در واقع یعنی نپرداختن به جزئیات.مثلا پرندگان دارای انواع گوناگون اند. کلمه ی پرندگان یک abstraction ای از تمامی پرندگان دنیا است. چون مشخص نکرده ایم کدام پرنده.
گاهی می خواهید یک کلاس پدر ایجاد کنید که فقط یک شکل عمومی شده را تعریف کند که توسط کلیه زیرکلاسهایش (فرزندانش) به اشتراک گذاشته خواهد شد و پر کردن جزئیات این شکل عمومی بعهده هر یک از کلاسهای فرزند واگذار می شود . یک شیوه برای وقوع این شرایط زمانی است که یک کلاس پدر توانایی ایجاد یک پیاده سازی با معنی برای یک متد را نداشته باشد.
در جاوا می توانیم متد هایی داشته باشیم که این متد ها کد اجرایی ندارند وصرفا نام آنها تعریف می شوند. کلاسی که آن متدها را دربرمی گیرد ، کلاس abstract(مجرد) است وخود متدها نیز abstract است. کلاسی که از آن کلاس مشتق می شود(فرزند) باید آن متدها را پیاده سازی کند. هر کلاسی که در برگیرنده یک یا چند متد abstract باشد، باید خود به عنوان abstract اعلان می شود. هر فرزند که از یک کلاس abstract ارث بری می کند، یا باید کلیه ی متد های abstract موجود در کلاس پدر را پیاده سازی کند یا باید خودش هم abstract باشد تا به بعدی برسد تا در نهایت آخری باید همه ی متد های به ارث برده را پیاده سازی کند.(در کلاس وراثت چند گانه نداریم و در آن واحد هر کلاس فقط می تواند از یک مشتق شود).
مفاهیم گفته شده را با ذکر مثال دنبال می کنیم.
مثال:
فرض کنید چند نفر می خواهند پروژه ی دانشگاه را انجام دهند.در این پروژه کلاسهای student و teacherو employeeو library را داریم و هرنفرقرار است یک کلاس را طراحی کند. مثلا یک نفر student و دیگری teacher و الی آخر. در هر کلاس موجودیت ها و رفتارهای آن کلاس را می نویسیم. به عنوان مثال دانشجو باید بتواند اضافه شود، حذف شود، تغییر کند، ثبت نام کندوprint شودو....
بعد از طراحی همه ی افراد :
کلاس student : فرضا شامل مشخصه های name وfamilyو address و...و رفتارهای add برای اضافه کردن دانشجو ، delete برای حذف دانشجو، edite برای تغییر اطلاعات دانشجو، find برای جستجوی دانشجو و .....کلاس teacher : شامل مشخصه های name وfamilyو address و...و رفتارهای insert برای اضافه کردن استاد ، remove برای حذف استاد، update برای تغییراطلاعات استاد، ...
کلاس employee : شامل مشخصه های name وfamilyو address و...و رفتارهای ezafe برای اضافه کردن کارمند، Clear برای حذف کارمند ، checkprofile برای تغییراطلاعات کارمند، search برای جستجوی کارمندو....
می بینیم که همه در یک گروه کار می کنیم اما کلاسهایی که می نویسیم در نام گذاری، متدها، نوع بازگشتی و پارامترهای ورودی با هم فرق می کند. ما نمی توانیم ازاین ساختار در پروژه استفاده کنیم ونمی توانیم کسی را مجبور کنیم که از دیگری تبعیت کند.
اینجا است که مدیر پروژه با استفاده از abstraction گروه را یکپارچه می کند و کلاسی به نام univercity می نویسد. که در آن هر آبجکتی در دانشگاه باید رفتارهای add ، delete ، update ، find و... داشته باشد. می توان گفت حد اقل هایی را که باید همه داشته باشند را استاندارد سازی می کند و یک یا چند امضای متد (method signature) در کلاس پدر می سازد و هر کسی میتواند چیزهایی به کلاس خود اضافه کند. اکنون همه ی افراد باید کلاسهایشان را از این کلاس univercity مشتق کنند و به ارث ببرند.
پیاده سازی یک پروژه در netbeans :
اکنون درnetbeans پروژه ای به نام abstract به همراه کلاس main ایجاد می کنیم و در آن کلاسهای student و teacher وhuman می سازیم که کلاسهای student و teacher ، human را به ارث می برند. کد های هر کدام به صورت زیر است:کلاس human دارای مشخصه های name , family , birthyear ,address و رفتارprint می باشد :
را کلیک کرد تا به صورت خودکار کلمه ی کلیدی abstract در جای خود اضافه شود و یا به صورت دستی کلمه کلیدی abstract را قبل از کلمه ی class تایپ کرد مانند تصویر زیر :
به همین صورت برای متد ها ی edit و delete انجام می دهیم.
تذکر : برای یک کلاس abstract هیچ شی ای نمی توان ایجاد کرد یعنی یک کلاس abstract نباید به طورمستقیم با عملگر new نمونه سازی شود چون این اشیا بلا استفاده است و علت آن این است که یک کلاس abstract به طور کامل تعریف نشده است.
در مثال قبل در main کد های زیر را می نویسیم و سعی می کنیم که یک شی یا نمونه از روی human بسازیم (abs یعنی این کلاس abstract است) :
تذکر: همچنین نمی توانید سازندگان (constructor) abstract یا متدهای ایستای abstract اعلان کنید.
Abstract بیشتر در کارهای تیمی استفاده می شودو کاربرد چندانی ندارد.استفاده از مطالب این مقاله با ذکر منبع راسخون بلامانع می باشد.
/ج