مترجم : حبیب الله علیخانی
منبع:راسخون
منبع:راسخون
Interface
در زبان برنامه نویسی جاوا چون وراثت چندگانه نداریم، برای رفع این محدودیت قابلیتی به نام Interface وجود دارد (مانند قابلیت Trait در زبانهایی مثل PHP و Scala )interface در لغت یعنی رابط اما یک سینتکس (خلاصه) برای تعریف یک کلاس که تمام متد های آن abstract هستند می باشد.
کلاس های interfaceمانند کلاسهای abstract، در مواردی کاربرد دارند که یک یا چند امضای متد (methodsignature) در یک کلاس پدر حتما وجود داشته باشد ولی پیاده سازی (بدنه متد) نداشته باشد و تمام کلاس های فرزند مجبور باشند آن متدها را به روش خود پیاده سازی کنند (و یا اینکه خود abstract یا interface باشند(. اما کلاس های abstract می توانند متدهایی داشته باشند که پیاده سازی دارند.
یکی از کاربرد های دیگر کلاس های abstract و interface ها تعریف متد های callback است. برای این کار متد callback بصورت abstract در یک کلاس abstract تعریف می شود و یا بصورت یک متد در یک interface تعریف می شود.
متدهای یک interface همگی abstract هستند و پیاده سازی ندارند ولی یک کلاس abstract می تواند هیچ متد abstract ای نداشته باشد یا چند تا متد abstract داشته باشد و چند تا متد غیر abstract.
یک کلاس غیر abstract برای ارث بردن از یک interface باید آن را implements کند (یعنی از کلمه ی کلیدی implements برای به ارث بردن از یک interface استفاده می کند.) ولی برای ارث بردن از یک کلاس abstract باید آن را extends کند.
یک کلاس abstract علاوه بر اینکه می تواند یک یا چند interface را implements کند می تواند یک کلاس غیر abstrat و یا همچنین یک کلاس abstract را نیز extend کند ولی یک interface فقط می تواند یک interface دیگر را extends کند.
interface دو کاربرد دارد: 1- در وراثت 2- برای Eventها یا رویدادها (Event ها مبتنی بر interface ها هستند)
پیاده سازی یک پروژه در netbeans :
اکنون درnetbeans پروژه ای به نام interface به همراه کلاس main ایجاد می کنیم و در آن کلاسهای student و teacher وhuman می سازیم که کلاسهای student و teacher ، کلاس human را به ارث می برند دیاگرام زیر این ارث بری را نشان می دهد :اکنون می خواهیم برای student رفتاری به نام انتخاب واحد و teacher رفتاری به نام ارائه ی درس استاندارد سازی کنیم. اگر این را به صورت abstract در human قرار دهیم، آنگاه student و هر کلاس دیگری که از human ارث بری می کند مانند کارمندان و.... باید ارائه درس کند و رفتار ارائه درس را در خود پیاده سازی کند. و همچنین teacher هر کلاس دیگری که از human ارث بری می کند مانند کارمندان و.... باید انتخاب واحد کند و رفتار انتخاب واحد را هم در خود پیاده سازی کند. اما این خوب نیست. می خواهیم هر رفتار مربوط به کلاس خودش شود. در نتیجه از interface کمک می گیریم. چون در جاوا امکان وراثت چندگانه وجود ندارد با کمک interface عمل مشابه وراثت چندگانه را انجام می دهیم.
پس یک interface به نام Forstudent برای کلاس student می نویسیم که رفتار های اختصاصی دانشجو مانند ثبت نام، حذف، انصراف و.. را در این می نویسیم و یک interface به نام Forteacher برای کلاس teacher می نویسیم که رفتار های اختصاصی استاد مانند ارائه درس، اعلام نمرات و.. را در این می نویسیم.
از یک شاخه وراثت (به human) را انجام می دهد و از شاخه ی دیگر پیاده سازی را انجام می دهد (interface فقط پیاده سازی است). دیاگرام زیر را در نظر بگیرید:
کلاس human دارای مشخصه های name , family , birthyear ,address و رفتارprint می باشد :
می خواهیم interface ، Forstudent را از روش اول ایجاد کنیم. مسیر زیر را طی می کنیم:
راست کلیک روی پروژه > new > java Interface…
مانند همیشه یک کلاس با نام Forteacher ایجاد می کنیم و کلمه کلیدی interface را بجای کلمه ی کلیدی Class جایگزین کنیم:
به محض تایپ اینها، علامت hint (تذکر) ظاهر می شود که رفتن موس روی آن پیغامی می دهد که می گوید بدنه ی متد abstract (این interface ) را در خود پیاده سازی کند همان عمل override می باشد :
روش اتوماتیک (override) برای کلاس student :
با کلیک روی hint دو عمل را می توانیم انجام دهیم: یا متد abstract شده ( همان interface) رااینجا implement کنیم یعنی بدنه ی آن را اینجا پیاده سازی کنیم و یا خود این کلاس student را abstract تعریف کنیم. ما گزینه ی اول را انتخاب می کنیم:روش دستی(override) برای کلاس teacher :
کد هایی که در کادر قرمز مشخص شده در تصویر زیر را تایپ می کنیم:پایان بخش interface ها
استفاده از مطالب این مقاله با ذکر منبع راسخون بلامانع می باشد./ج