پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (8)

مثلا پرندگان دارای انواع گوناگون اند. کلمه ی پرندگان یک abstraction ای از تمامی پرندگان دنیا است. چون مشخص نکرده ایم کدام پرنده.
يکشنبه، 24 آذر 1392
تخمین زمان مطالعه:
موارد بیشتر برای شما
پلتفرم Java SE با محیط توسعه IDE) NetBeans) ؛ (8)

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(8)

 

مترجم : حبیب الله علیخانی
منبع:راسخون



 

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 می باشد :

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(8)
کلاس student از طریق کلمه ی کلیدی extends کلاس human را به ارث می برد و دارای مشخصه ی number (شماره دانشجویی) و رفتار print می باشد که پلی مورفیسم شده:

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(8)
کلاس teacher از طریق کلمه ی کلیدی extends کلاس human را به ارث می برد و دارای مشخصه ی grade (رتبه ی استاد) و رفتار print می باشد که پلی مورفیسم شده:

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(8)
می خواهیم کلاسهای student وteacher هردو رفتار add وedit و delete داشته باشند. اگر human این رفتارها را بنویسد، student و teacher بعدش آن را پلی مورفیسم می کند چون با هم فرق می کند و در هر کدام کارایی خاص خودش را دارد. به همین خاطر human این رفتارها را برایشان استانداردسازی می کند و عمل abstract را انجام می دهد:

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(8)
طبق شکل بالا زمانیکه استاندارد add را معرفی می کنیم (کادر قرمز)، یک تذکر می دهد که با کلیک روی دایره قرمز پیغامی می دهد که ما آن را با کادر سبز نشان می دهیم. ایم پیغام می گوید این متد بدنه(body) ندارد یا آن را به صورت abstract تعریف کن. که ما آن را به صورت abstract تعریف می کنیم:

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(8)
در تصویر زیر در کلاس human یک علامت تذکر یا hint (در کادر بنفش) در ستون سمت چپ، کنار عبارت public class دیده می شود که با رفتن موس روی آن پیغام زیر(در کادر قرمز) را نشان می دهد که می گوید human ، abstract نیست و نباید در آن متد abstract نوشته شود:

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(8)
که با کلیک کردن علامت تذکر، پیغامی ظاهر می شود (در کادر قرمز) که می گوید: کلاس human را abstract تعریف کنید. (هر کلاسی که در برگیرنده یک یا چند متد abstract باشد، باید خود به عنوان abstract اعلان می شود)

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(8)
در تصویر قبل یا می توان پیغام

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(8) را کلیک کرد تا به صورت خودکار کلمه ی کلیدی abstract در جای خود اضافه شود و یا به صورت دستی کلمه کلیدی abstract را قبل از کلمه ی class تایپ کرد مانند تصویر زیر :

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(8)
به کلاس student و teacher می رویم، می بینیم که علامت تذکر یا hint (در کادر بنفش) در کنارسمت چپ ظاهر شده است. (به همین دلیل، اگر بخواهیم پروژه را تا اینجا ذخیره کنیم(با ctrl+s)، اجازه نمی دهد.) با رفتن موس روی آن، پیغامی در شکل زیر(در کادر قرمز) را نشان می دهد:

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(8)
که می گوید: یا کلاس student را باید abstract تعریف کنیم ویا در کلاس student ، متد add() تعریف نشده (override نشده). این کاررا یا می توان به صورت دستی انجام داد و متد add را خودمان تعریف کنیم:

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(8)
یا با کلیک کردن علامت تذکر، پیغامی ظاهر می شود (در کادر قرمز) که می خواهد عمل مربوطه را خودکار انجام دهد. (البته این کار را می توان به صورت دستی هم انجام داد):

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(8)
که ما گزینه ی اول را انتخاب می کنیم، تا متدهای abstract را در اینجا override کند:

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(8)
با کلیک روی دایره ی سبز در حاشیه سمت چپ، به خطی در کلاس پدرش می رود که در آنجا این متد به صورت abstract اعلان شده است. این قسمت مربوط به مبحث annotation ها است که بعدا به آن می پردازیم.
به همین صورت برای متد ها ی edit و delete انجام می دهیم.
تذکر : برای یک کلاس abstract هیچ شی ای نمی توان ایجاد کرد یعنی یک کلاس abstract نباید به طورمستقیم با عملگر new نمونه سازی شود چون این اشیا بلا استفاده است و علت آن این است که یک کلاس abstract به طور کامل تعریف نشده است.
در مثال قبل در main کد های زیر را می نویسیم و سعی می کنیم که یک شی یا نمونه از روی human بسازیم (abs یعنی این کلاس abstract است) :

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(8)
بعد از تایپ کامل این دستور، علامت hint در آن خط ظاهر می شود که با کلیک روی آن پیغام زیر نمایش داده می شود:

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(8)
و می گوید نمی توانید از روی کلاس abstract نمونه بسازید. در صورتی که student یک کلاس abstract نیست و می توان از روی آن نمونه ساخت:

پلتفرم  Java SE  با محیط توسعه ی(IDE) NetBeans(8)

تذکر: همچنین نمی توانید سازندگان (constructor) abstract یا متدهای ایستای abstract اعلان کنید.

Abstract بیشتر در کارهای تیمی استفاده می شودو کاربرد چندانی ندارد.
استفاده از مطالب این مقاله با ذکر منبع راسخون بلامانع می باشد.



 

 



مقالات مرتبط
ارسال نظر
با تشکر، نظر شما پس از بررسی و تایید در سایت قرار خواهد گرفت.
متاسفانه در برقراری ارتباط خطایی رخ داده. لطفاً دوباره تلاش کنید.