در بحث برنامه نویسی شی گرایی با مفاهیم به نام اینترفیس ( Interface ) و کلاس های Abstract روبرو هستیم که کارکرد و شباهت های زیادی به هم دارند.
افراد تازه کار معمولا تفاوت این دو مورد را نمیتوانند به خوبی درک کنند و در این مقاله به این مورد میپردازیم.
مثال های این بخش به زبان کاتلین است و مناسب کسانی که در حال آموزش برنامه نویسی اندروید هستند.
اینترفیس در برنامه نویسی چیست؟
اینترفیس (Interface) در برنامهنویسی یک قرارداد (Contract) است که تعیین کنندهی مشخصهها و عملکردهایی است که یک کلاس باید پیادهسازی کند.
به عبارت دیگر، اینترفیس یک نوع مشخص برای ارتباط بین کلاسها است که تضمین میکند که کلاسهایی که آن را پیادهسازی میکنند، مشخصهها و عملکردهای مورد نیاز را دارند.
در برنامهنویسی شیءگرا، Interface به عنوان یک قرارداد میان کلاسها عمل میکند.
در برنامه نویسی شی گرا، اینترفیسها برای تعریف رفتارهای مشترک بین کلاسها استفاده میشوند. استفاده از اینترفیسها میتواند به بهبود انعطافپذیری و قابلیت استفاده از کد کمک کند.
پیاده سازی اینترفیس در زبان کاتلین
در زبان کاتلین Kotlin نیز میتوان از اینترفیسها برای تعریف قراردادهای مشترک استفاده کرد.
در زیر یک مثال از چگونگی تعریف و استفاده از اینترفیس در کاتلین آورده شده است:
interface MyInterface {
fun myMethod()
}
class MyClass : MyInterface {
override fun myMethod() {
println("MyMethod implementation in MyClass")
}
}
fun main() {
val myObject = MyClass()
myObject.myMethod()
}
در این مثال، MyInterface
یک اینترفیس با یک متد به نام myMethod
است. سپس کلاس MyClass
این اینترفیس را پیادهسازی میکند و متد myMethod
را پیادهسازی میکند.
در نهایت، یک نمونه از MyClass
ایجاد شده و متد myMethod
از طریق این نمونه فراخوانی میشود.
توضیحات تکمیلی داکیومنت رسمی کاتلین: Kotlin Interface
مزایا استفاده از Interface در برنامه نویسی
با استفاده از اینترفیسها، میتوانید کد خود را به گونهای بنویسید که مستقل از کلاسهای خاص باشد. به این ترتیب، میتوانید کد خود را بدون نیاز به تغییر آن برای کلاسهای جدید، مجدداً استفاده کنید.
در اینجا چند مزیت استفاده از اینترفیسها در برنامه نویسی شی گرا آورده شده است:
- انعطافپذیری: استفاده از Interfaceها میتواند به بهبود انعطافپذیری کد کمک کند. به این ترتیب، میتوانید کد خود را بدون نیاز به تغییر آن برای کلاسهای جدید، مجدداً استفاده کنید.
- قابلیت استفاده: استفاده از Interfaceها میتواند به بهبود قابلیت استفاده از کد کمک کند. به این ترتیب، میتوانید کد خود را آسانتر برای دیگران درک کنید.
- تستپذیری: استفاده از Interfaceها میتواند به بهبود قابلیت تستپذیری کد کمک کند. به این ترتیب، میتوانید کد خود را آسانتر تست کنید.
کلاس Abstract در زبان کاتلین
یک کلاس Abstract (که به عنوان “کلاس انتزاعی” هم نامیده میشود) در برنامهنویسی یک نوع کلاس است که نمیتوانید از آن یک نمونه مستقیم ایجاد کنید.
این کلاسها معمولاً برای ارائه یک پایه انتزاعی برای کلاسهای زیرمجموعه (subclasses) استفاده میشوند.
یک کلاس Abstract میتواند شامل متدهایی با بدنههای (implementations) ناقص یا حتی بدون بدنه (abstract) باشد.
ساخت کلاس Abstract در زبان کاتلین
در کاتلین یک کلاس Abstract نیاز به کلمه کلیدی abstract
دارد. متدهای Abstract با استفاده از کلمه کلیدی abstract
بدون بدنه تعریف میشوند.
abstract class MyAbstractClass {
// متد Abstract بدون بدنه
abstract fun myAbstractMethod()
// متد با بدنه
fun myConcreteMethod() {
println("Concrete method in abstract class")
}
}
اهمیت کلاسهای Abstract در این است که اجازه میدهند یک ساختار ارثبری (inheritance) برای کلاسهای زیرمجموعه ایجاد شود و میتوانند به عنوان یک پایه مشترک برای کلاسهای مشتق شده عمل کنند.
استارتاپ چیست؟ نکات مهم برای یادگیری
به بیان دیگر سایر کلاس ها نیز میتوانند از این نوع کلاس ها ارث بری کنند.
فرق اینترفیس با کلاس Abstract
تا اینجا با ساختار هر دو مورد به خوبی آشنا شدیم و دیدیم که تقریبا کارهای مشابهی انجام میدهند. اما چه تفاوتی باهم دیگر دارند؟
- متد سازنده: در کلاس های Abstract میتوانید متدسازنده داشته باشید اما برای Interface نمیتوانید متد سازنده تعریف کنید.
- متدها: در کلاس های Abstract میتوانید متدهایی داشته باشید بخش بدنه آنها نیز پیاده سازی شده اما در اینترفیس فقط متدها تعریف میشوند.
- ارث بری: کلاس های Abstract میتوانند توسط کلاس های دیگر ارث برده شوند اما اینترفیس چنین قابلیتی ندارد.
- نوع متد: متدها در کلاس های Abstract میتوانند بصورت عمومی یا خصوصی تعریف شوند اما در اینترفیس متدها حتما باید بصورت عمومی تعریف شوند.
به طور کلی، اینترفیسها برای ارائه یک قرارداد برای پیادهسازی متدها و ایجاد ارتباطات چندگانه (multiple inheritance) مناسب هستند، در حالی که کلاسهای Abstract بیشتر برای ارائه یک پایه مشترک برای کلاسهای مشتق شده و افزودن قابلیتهای مشترک استفاده میشوند.
در صورت نیاز به پروژه برنامه نویسی میتوانید به بخش سفارش طراحی اپلیکیشن مراجعه کنید.