Interface چیست ؟
Interface یا اینترفیس یکی از مفاهیم شئی گرایی در برنامه نویسی است همانطور که می دانید شئی ها ارتباط خود را با دنیای بیرون از طریق method ها انجام می دهند در این مقاله به بررسی Interface چیست ؟ می پردازیم Interface همانند کلاس هستنید تنها فرقی که دارند در این است که دارای متغیر های ایستا و متود های Abstract هستند در ادامه با ما همراه باشید تا بیشتر با اینترفیس آشنا شوید.
در بالا گفتیم Interface در واقع شبیه کلاس است و دو تفاوت دارد دارای متغیر های ایستا و متود های Abstract است منظور از Abstract یعنی متود Body ندارد و فقط signature متود را نمایش میدهد در ادامه مثال هایی را برای درک بیشتر قرار می دهیم.
برای اینکه Concept مربوط به Interface را بهتر درک کنید به مثال زیر توجه کنید.
در نظر بگیرید یک کلاس به نام Media Player داریم و این کلاس دو زیر کلاس به نام های CD و DVD دارد همانند شکل زیر که هرکدام method های یکتای خود را برای اجرا دارند.
فرض کنید یک کلاس به نام Combo drive داریم که از DVD و CD ارث بری می کند مثل شکل زیر
مشکلی که در اینجا داریم جاوا امکان ارث بری همانند بالا را به ما نمیدهد چون DVD و CD دارای متد های شبیه به هم هستندو مشکل از همینجا شروع می شود.
بزارید یک مثال دیگر براتون بزنم
فرض کنید شما یک کلاس به نام Dog دارید و این کلاس نیاز دارد از دو کلاس به نام Pet و Animal ارث بری کند خب همانطور که قبلا گفتیم جاوا این امکان را به شما نمیدهد که همزمان از دو کلاس ارث بری کنید شکل زیر را ببنید.
خب راهکار چیست ؟!!
در این حالت شما چرایی استفاده از Interface را دیدید راهکار استفاده از Interface است.
قوانین Interface شامل دو اصل است
- interface صد در صد Abstract هایی هستند که متود های Abstract دارند.
- کلاس به هر تعداد که بخواهد می تواند Interface داشته باشد.
با قانون دوم مشکل قبل ما حل می شود پس می توانیم به هر تعداد که بخواهیم Abstract درست کنیم پس در بالا Pet می تواند Abstract تعریف شوند و فقط از animal عمل ارث بری انجام شود.
یک مثال از شکل بالا که توضیح داده شد (به زبان جاوا)
1 2 3 4 5 6 7 8 9 10 11 12 | interface Pet{ public void test(); } class Dog implements Pet{ public void test(){ System.out.println("Interface Method Implemented"); } public static void main(String args[]){ Pet p = new Dog(); p.test(); } } |
تفاوت کلاس و Interface در چیست ؟
کلاس ها قابل نمونه سازی هستند ولی Interface ها خیر
دسترسی مربوط به کلاس ها اغلب به صورت private, protected و public است ولی در Interface فقط به صورت Public است.
کلاس ها شامل روش اجرا می شوند ولی Interface ها نمی توانند Body اجرایی داشته باشند.
چرا Interface (اینترفیس) در برنامهنویسی مهم ولازم است ؟
ارث بری همیشه مشکل ما را حل نمی کند و در برخی موارد لازم است که عمل implementation انجام شود.
چه زمانی از Interface و Abstract استفاده کنیم ؟
زمانی که یک الگو نیازمند استفاده از تعداد زیادی Subclass هست از Abstract استفاده کنید.
زمانی از Interface استفاده کنید که نقش یا role برای کلاس دیگر نیازمند تعریف باشد و زمانی که باید از ارث بری صرف نظر شود.
موفق و پیروز باشید.