آشنایی با مفهوم Interface در زبان برنامهنویسی جاوا
Interface مفهومی است در زبانهای برنامهنویسی که این امکان را در اختیارمان میگذارد تا توسعهٔ کلاسها هرگز به صورت سلیقهای صورت نگیرد بلکه کلیهٔ دولوپرهایی که در یک تیم نرمافزاری روی پروژهای واحد کار میکنند موظف به تبعیت از چارچوبی خواهند بود که در اینترفیسهای مختلف ترسیم شدهاند. در واقع، اینترفیسها مشابه کلاسها تعریف میشوند اما برخی تفاوتهایی با یکدیگر دارند که در ادامه به بررسی این شباهتها و تفاوتها میپردازیم.
به طور کلی، از جمله شباهتهای مابین کلاسها و اینترفیسها میتوان به موارد زیر اشاره کرد:
- همچون کلاسها، در یک اینترفیس میتوان به تعداد دلخواه متد تعریف کرد.
- همچون کلاسها، در یک اینترفیس میتوان متغیرهای فیلد تعریف کرد.
- همچون کلاسها، یک اینترفیس قابلیت ارثبری از روی اینترفیسی دیگر را دارا است.
- نام فایل مربوط به اینترفیس دقیقاً همنام با اینترفیس میباشد به علاوه اینکه پسوند فایل مذکور نیز java.
است.
همانطور که پیشتر اشاره کردیم، اینترفیسها در زبان برنامهنویس جاوا همانند کلاسها میباشند اما برخی تفاوتها نیز مابین آنها وجود دارد که برخی از مهمترین آنها عبارتند از:
- یک کلاس فقط و فقط میتواند از یک کلاس دیگر ارثبری کند در حالی که در یک کلاس میتوان بیش از یک اینترفیس را به اصطلاح ایمپلیمنت کرد.
- یک کلاس میتواند حاوی متدهایی دارای نام و بدنۀ مربوط به دستورات داخلی باشد اما در اینترفیسها دستوری داخل بدنهٔ متدها نوشته نمیشود که چنین متدهایی تحت عنوان متدهای Abstract نامیده میشوند (در عین حال، در نسخۀ 8 به بعد جاوا امکان تعریف دستورات داخلی برای برخی متدهای فراهم شده است.)
- بر خلاف کلاسها، از روی اینترفیسها نمیتوان آبجکت ساخت اما چنانچه کلاسی از روی اینترفیسی ایمپلیمنت شده باشد، میتوان از روی اینترفیس مد نظر آبجکتی ساخته و از آن به عنوان جایگزینی برای آبجکت ساختهشده از روی کلاسی استفاده کرد که اینترفیس مذکور را ایمپلیمنت کرده است.
- بر خلاف کلاسها، اینترفیسها قابلیت ارثبری از روی چندین اینترفیس را دارند که این امر قابلیت Multiple Inheritance یا «ارثبری چندگانه» را برای زبان برنامهنویسی جاوا فراهم کرده است.
- بر خلاف کلاسها، یک اینترفیس صرفاً سطح دسترسی public
میتواند داشته باشد.
نحوۀ ایجاد یک اینترفیس در زبان برنامهنویسی جاوا
در ادامۀ این آموزش قصد داریم تا نحوۀ ایجاد یک اینترفیس در زبان برنامهنوسی جاوا را تشریح نماییم که برای این منظور پروژهای تحت عنوان Interface ایجاد کرده و اینترفیسی به نام ProgrammerOne
در آن میسازیم به طوری که در این اینترفیس قصد داریم تا وظایف کاری یک برنامهنویس را پیادهسازی کنیم که وظیفۀ طراحی رابط کاربری یک نرمافزار را بر عهده دارد که در ابتدا کد مربوط به آن را به صورت زیر تکمیل میکنیم:
public interface ProgrammerOne {
public String myString = "Programmer one has to design the UI.";
public void designTheUI();
}
همانطور که در کد فوق ملاحظه میکنیم، برای ساخت یک اینترفیس میباید از کلیدواژۀ public
استفاده کرده سپس کلیدواژهٔ interface
را آورده و در ادامه یک نام (در این مثال ProgrammerOne
) برای آن انتخاب میکنیم که بدین معنی است که این اینترفیس توسط تمامی کلاسهای موجود در تمامی پکیجهای پروژه قابلدسترسی است و در ادامه همانند ساختار یک کلاس، از علائم { }
استفاده کرده و متدهای مورد نیاز را داخل آن تعریف میکنیم.
به طور مثال، در کد فوق آبجکتی تحت عنوان myString
از روی کلاس String
ساخته و استرینگ «.Programmer one has to design the UI» را بدان منتسب کردهایم که به منزلۀ یک متغیر فیلد برای این اینترفیس میباشد و در ادامه متدی تحت عنوان ()designTheUI
تعریف کردهایم که بر خلاف متدهای تعریفشده در داخل کلاسها، دارای علائم { }
نیست و این مسئله از آنجایی ناشی میشود که متدهای داخل یک اینترفیس صرفاً دارای یک Signature (نام متد و پارامترهای ورودی مد نظر) میباشند و دستورات داخلی آنها در کلاسهایی پیادهسازی میشوند که از اینترفیس مد نظر به اصطلاح ایمپلیمنت شده باشند. به عبارت دیگر، متدهای داخل اینترفیس فقط به صورت انتزاعی تعریف شده سپس وظایف متد مد نظر داخل دو علامت { }
در کلاسی پیادهسازی میشود که قرار است تا آن اینترفیس را ایمپلیمنت کند (جهت کسب اطلاعات بیشتر در رابطه با متغیرهای فیلد به آموزش آشنایی با متغیرهای Local و Field در زبان برنامهنویسی جاوا مراجعه نمایید.)
در این آموزش ابتدا به بررسی نحوۀ ایجاد یک اینترفیس پرداخته و در ادامه دیدیم که چگونه میتوان آن را در کلاسی دیگری به اصطلاح ایمپلیمنت کرد؛ سپس نحوۀ ایمپلیمنت کردن چند اینترفیس در یک کلاس را تشریح کردیم. در ادامه، نحوۀ ارثبری دو اینترفیس از یکدیگر را مورد بررسی قرار دادیم و گفتیم که برای این منظور نیز مشابه ارثبری دو کلاس از یکدیگر عمل کرده و از کیورد extends
استفاده مینماییم و در پایان نیز به بررسی مهمترین وجه تمایز اینترفیسها با کلاسها پرداخته و دیدیم که چگونه میتوان برای یک اینترفیس قابلیت ارثبری از چندین اینترفیس را فراهم نمود و گفتیم که این موضوع قابلیت ارثبری چندگانه را برای کلاسها در زبان جاوا نیز فراهم مینماید.