آموزش پایتون - رابط (Interface)

در مهندسی نرم‌افزار، رابط (Interface) یک الگوی معماری نرم‌افزار است. رابط شبیه یک کلاس است، اما متدهای آن فقط شامل تعریف امضای اولیه (Prototype Signature) هستند و هیچ کد اجرایی یا بدنه پیاده‌سازی ندارند. عملکردهای موردنیاز باید توسط متدهای کلاسی که از رابط ارث‌بری می‌کند، پیاده‌سازی شوند.

متدی که بدون هیچ کد اجرایی تعریف شده باشد، متد انتزاعی نامیده می‌شود.

رابط‌ها در پایتون

در زبان‌هایی مانند جاوا و گو، کلمه کلیدی‌ای به نام interface وجود دارد که برای تعریف یک رابط استفاده می‌شود. پایتون چنین کلمه کلیدی یا کلمه کلیدی مشابهی ندارد. در پایتون برای ایجاد رابط‌ها از کلاس‌های پایه انتزاعی (به‌اختصار، ماژول ABC) و دکوراتور @abstractmethod استفاده می‌شود.

نکته: در پایتون، کلاس‌های انتزاعی نیز با استفاده از ماژول ABC ایجاد می‌شوند.

کلاس انتزاعی و رابط در پایتون ظاهری مشابه دارند. تنها تفاوت آن‌ها این است که کلاس انتزاعی می‌تواند تعدادی متد غیرانتزاعی داشته باشد، درحالی‌که تمام متدهای رابط باید انتزاعی باشند و کلاسی که رابط را پیاده‌سازی می‌کند، باید تمام متدهای انتزاعی را بازنویسی کند.

قوانین پیاده‌سازی رابط‌ها در پایتون

هنگام ایجاد و پیاده‌سازی رابط‌ها در پایتون، باید نکات زیر را در نظر بگیریم:

  • متدهای تعریف‌شده درون یک رابط باید انتزاعی باشند.
  • ایجاد شیء از یک رابط مجاز نیست.
  • کلاسی که یک رابط را پیاده‌سازی می‌کند، باید تمام متدهای آن رابط را تعریف کند.
  • اگر کلاسی تمام متدهای تعریف‌شده درون رابط را پیاده‌سازی نکند، آن کلاس باید به‌صورت انتزاعی تعریف شود.

روش‌های پیاده‌سازی رابط‌ها در پایتون

می‌توانیم رابط‌ها را به دو روش ایجاد و پیاده‌سازی کنیم:

  • رابط رسمی
  • رابط غیررسمی

رابط رسمی

رابط‌های رسمی در پایتون با استفاده از کلاس پایه انتزاعی (ABC) پیاده‌سازی می‌شوند. برای استفاده از این کلاس، باید آن را از ماژول abc وارد کنید.

مثال

در این مثال، یک رابط رسمی با دو متد انتزاعی ایجاد می‌کنیم.

from abc import ABC, abstractmethod

# creating interface
class demoInterface(ABC):
   @abstractmethod
   def method1(self):
      print ("Abstract method1")
      return

   @abstractmethod
   def method2(self):
      print ("Abstract method1")
      return

اکنون کلاسی تعریف می‌کنیم که هر دو متد انتزاعی را پیاده‌سازی کند.

# class implementing the above interface
class concreteclass(demoInterface):
   def method1(self):
      print ("This is method1")
      return

   def method2(self):
      print ("This is method2")
      return

# creating instance      
obj = concreteclass()

# method call
obj.method1()
obj.method2()

خروجی

با اجرای این کد، خروجی زیر تولید می‌شود:

This is method1
This is method2

رابط غیررسمی

در پایتون، رابط غیررسمی به کلاسی اشاره دارد که متدهای آن قابلیت بازنویسی دارند. بااین‌حال، کامپایلر نمی‌تواند پیاده‌سازی تمام متدهای ارائه‌شده را به‌طور قطعی تضمین کند.

این نوع رابط بر اساس اصل تایپ‌سازی اردکی (Duck Typing) کار می‌کند. این اصل به ما اجازه می‌دهد بدون بررسی نوع یک شیء، هر متدی را روی آن فراخوانی کنیم؛ به‌شرط آنکه آن متد وجود داشته باشد.

مثال

در مثال زیر، مفهوم رابط غیررسمی را نشان می‌دهیم.

class demoInterface:
   def displayMsg(self):
      pass

class newClass(demoInterface):
   def displayMsg(self):
      print ("This is my message")

# creating instance      
obj = newClass()

# method call
obj.displayMsg()

خروجی

با اجرای کد بالا، خروجی زیر تولید می‌شود:

This is my message

پیشرفت مطالعه: وضعیت خوانده‌شدن این درس فقط در همین مرورگر ذخیره می‌شود؛ بدون نیاز به حساب کاربری.