برنامه نویسی و طراحی سایت

کلاس Abstract در پایتون — به زبان ساده

کلاس Abstract در پایتون — به زبان ساده

علاقمندان به یادگیری برنامه نویسی به خصوص برنامه نویسی با زبان پایتون، حتما با مفهومی به نام شئ‌گرایی برخورد کرده‌اند. شئ‌گرایی یکی از بنیادهای مهم توسعه نرم‌افزارهای مدرن به حساب می‌آید و پایتون نیز این امکان را برای کاربران خود فراهم کرده است. شئ‌گرایی چهار اصل مهم را شامل می‌شود که یکی از این اصول، «انتزاع» (Abstraction) نام دارد. در زبان برنامه نویسی پایتون برای استفاده از اصل انتزاع در شئ‌گرایی از کلاس ‌انتزاعی یا همان کلاس Abstract در پایتون استفاده می‌شود که در این مقاله به آن پرداخته شده است.

فهرست مطالب این نوشته
مفهوم انتزاع در شی گرایی

مثالی از دنیای واقعی برای درک بهتر مفهوم انتزاع در شی گرایی

مزیت های اصل Abstract

معرفی فیلم های آموزش پایتون

نحوه استفاده کاربردی از اصل انتزاع در برنامه نویسی شی گرا

کلاس انتزاعی در برنامه نویسی شی گرا چیست ؟

متد انتزاعی در برنامه نویسی شی گرا چیست ؟

کلاس Abstract در پایتون

تعریف کلاس Abstract در پایتون

کاربرد عبارت pass در پایتون چیست؟

تعریف متد انتزاعی برای کلاس Abstract در پایتون

جمع‌بندی

faradars mobile

مفهوم انتزاع در شی گرایی

در برنامه نویسی شئ‌گرا، اصل انتزاع فرآیندی است که در پی آن جزئیات پیاده‌سازی و عملکرد برنامه پنهان می‌شود و فقط می‌توان به اطلاعات درخواستی و اساسی دسترسی داشت. به بیان دیگر، چنانچه چندین شئ از یک کلاس ایجاد شده باشد، می‌توان با استفاده از اصل انتزاع این امکان را فراهم کرد که هر شئ تنها با استفاده از «رابط» (Interface)، به عناصر اصلی اشیاء دیگر دسترسی داشته باشد و نتواند جزئیات «خصوصیت‌ها» (Properties) و متدهای سایر اشیاء را تغییر دهد.

مفهوم انتزاع در شی گرایی

مثالی از دنیای واقعی برای درک بهتر مفهوم انتزاع در شی گرایی

می‌توان مفهوم انتزاع را با ارائه یک مثال از دنیای واقعی، ملموس‌تر کرد. میزبانی قصد دارد برای تدارک یک دورهمی دوستانه، از مهمانان خود با شیرینی خانگی پذیرائی کند. میزبان برای پخت شیرینی خانگی، شکر کافی ندارد و می‌خواهد دو بسته شکر سفارش بدهد. فروشنده فقط به اطلاعات مربوط به تعداد بسته‌های مورد نیاز خریدار و آدرس منزل او احتیاج دارد تا سفارش خریدار را ارسال کند.

فروشنده لازم نیست بداند چرا میزبان دو بسته شکر سفارش می‌دهد و از شکر برای چه کاری استفاده خواهد کرد؛ به عبارتی دیگر، جهت خرید یک محصول، فقط اطلاعات مورد نیاز خریدار در اختیار فروشنده قرار می‌گیرد. به این ترتیب، به مفهوم پنهان‌سازی جزئیات و اطلاعات غیرمرتبط و حفظ اطلاعات حساس از دیگران در طی یک روند، انتزاع گفته می‌شود. در ادامه، به مزیت اصل انتزاع و نحوه استفاده از ویژگی Abstract در برنامه نویسی شئ‌گرا به طور جامع پرداخته شده است.

مزیت های اصل Abstract

برنامه نویسی شی گرا، به عنوان یکی از رویکردهای اصلی توسعه نرم‌افزار تلقی می‌شود که هر یک از اصول آن در راستای بهبود کیفیت برنامه نویسی، مزیت‌های متفاوتی دارند. مزیت‌های اصل Abstract به شرح زیرند:

  • در برنامه نویسی شئ‌گرا، ویژگی انتزاع به برنامه نویس این امکان را می‌دهد تا پیچیدگی فرآیند طراحی و پیاده‌سازی نرم‌افزار را کاهش دهد.
  • با استفاده از ویژگی Abstract نیازی به نوشتن کدهای تکراری نیست و از یک کد می‌توان چندین بار در سراسر برنامه استفاده کرد.
  •  از آنجا که ویژگی انتزاع در شئ‌گرایی مانع دسترسی به جزئیات مهم برنامه می‌شود، میزان امنیت در برنامه نویسی افزایش می‌یابد.
  • با استفاده از ویژگی انتزاع می‌توان چندین کلاس مرتبط به یکدیگر را گروه‌بندی کرد و خوانایی کد را افزایش داد.

معرفی فیلم های آموزش پایتون

فیلم های آموزش پایتون تم آف

افراد علاقمند به یادگیری برنامه نویسی پایتون می‌توانند از مجموعه فیلم‌های جامع آموزشی پایتون سایت تم آف استفاده کنند. سایت تم آف پلتفرمی را برای آن دسته از افرادی فراهم کرده است که قصد یادگیری پایتون را دارند. دوره‌های گردآوری شده در مجموعه آموزش پایتون، فیلم‌های آموزشی مقدماتی تا پیشرفته و پروژه‌محور زبان پایتون را شامل می‌شوند. افراد می‌توانند از دوره‌های جامع پایتون در راستای تقویت مهارت برنامه نویسی خود استفاده کنند و از آموزش‌های پروژه‌محور تم آف بهره بگیرند. در تصویر فوق تنها برخی از دوره‌های آموزشی مجموعه آموزش پایتون تم آف مشاهده می‌شوند.

  • برای دسترسی به همه آموزش های پایتون تم آف + اینجا کلیک کنید.

نحوه استفاده کاربردی از اصل انتزاع در برنامه نویسی شی گرا

در برنامه نویسی شئ‌گرا، «کلاس انتزاعی» (Abstract Class) و «متد انتزاعی» (Unimplemented Method | Abstract Method) امکاناتی هستند که برای پیاده‌سازی و استفاده از اصل انتزاع به کار گرفته می‌شوند.

کلاس انتزاعی در برنامه نویسی شی گرا چیست ؟

در برنامه نویسی شئ‌گرا دو نوع کلاس وجود دارد:

  • «کلاس عینی» (Concrete Class): در کلاس عینی یا «کلاس عادی» (Normal Class)، می‌توان متدها و خاصیت‌های عادی را «تعریف» (Define) کرد و با استفاده از «نمونه‌سازی» (Instantiation) به اجزای کلاس دسترسی داشت.
  • «کلاس انتزاعی» (Abstract Class): کلاس انتزاعی، کلاسی محدود شده است که نمی‌توان با استفاده از شئ‌، «نمونه‌ای» (Instance) را از آن تعریف کرد. برای استفاده از این نوع کلاس، باید از کلاس فرزند استفاده شود تا از کلاس Abstract ارث‌بری کند.

متد انتزاعی در برنامه نویسی شی گرا چیست ؟

متد انتزاعی، تابعی است که در کلاس انتزاعی استفاده می‌شود. تنها تفاوت این نوع متد با «متد عادی» (Concrete Method | Implemented Method) در این است که متدهای انتزاعی در کلاس انتزاعی فقط «اعلان» (Declare) می‌شوند. اعلان کردن متد یا تابع در برنامه نویسی به معنای معرفی اولیه‌ای از عنوان متد یا تابع است، بدون آن که بدنه‌ای برای آن‌ها تعریف شود.

به منظور تعریف بدنه متدهای انتزاعی، باید کلاس‌های فرزندی را از کلاس Abstract ایجاد کرد. با استفاده از نمونه‌سازی یک شئ از کلاس فرزند می‌توان به متدهای انتزاعی نیز دسترسی داشت. لازم به ذکر است که کلاس‌های Abstract، حداقل شامل یک متد Abstract هستند و می‌توان درون این کلاس‌ها از متدهای عادی نیز استفاده کرد.

کلاس Abstract در پایتون

به منظور رعایت اصول شئ‌گرایی در Python و استفاده از ویژگی Abstraction در این زبان، نمی‌توان به صورت مستقیم متدهای Abstract را اعلان کرد. برای استفاده از این نوع متدها، از ماژول abc

 استفاده می‌شود.

تعریف کلاس Abstract در پایتون

برای تعریف یک کلاس Abstract در پایتون ، ابتدا باید ماژول abc

را به صورت زیر فراخوانی کرد:

from abc import ABC
class     AbstractClassName
    
     (ABC):
   pass

کلمه کلیدی pass

 در مثال بالا به این معنی است که در کلاسAbstractClassName، کدی وجود ندارد.

کاربرد عبارت pass در پایتون چیست؟

اگر از عبارت pass

 در مثال بالا استفاده نشود، کامپایلر خطا می‌دهد. به بیان دقیق‌تر، هنگام تعریف موجودیت‌هایی شامل کلاس‌ها، متدها، حلقه‌ها و دستورهای شرطی if

  در پایتون باید کدهای درونی آن‌ها نیز نوشته شوند؛ در غیر این صورت، باید از کلمه کلیدی pass

 به جای نوشتن دستورات درونی آن‌ها استفاده کرد تا خطای کامپایلر ایجاد نشود.

تعریف متد انتزاعی برای کلاس Abstract در پایتون

پیش از هرچیز، برای تعریف متد انتزاعی پایتون باید از دکوراتور @abstractmethod

  به صورت زیر استفاده کرد:

from abc import ABC, abstractmethod
class AbstractClassName(ABC):
   @abstractmethod
   def abstractMethod(self):
       pass

در اینجا باید به این نکته اشاره کرد که برخلاف زبان جاوا، در پایتون می‌توان برای متدهای انتزاعی بدنه تعریف کرد و با استفاده از «متد بازنویسی» (Overriding Method) و به کاربردن متد super()

 به بدنه متد انتزاعی واقع در کلاس انتزاعی دسترسی داشت.

import abc
class AbstractClass(ABC):
     def __init__(self, value):
       self.value = value
       super().__init__()   
   @abc.abstractmethod
   def some_action(self):
       print("This is the parent implementation.")
class MySubclass(AbstractClass):
   def some_action(self):
       super().some_action()
       print("This is the subclass implementation. ")
x = MySubclass()
x.some_action()

همچنین، مطابق مثال بالا می‌توان یک تابع «سازنده» (Constructor) در کلاس Abstract در پایتون تعریف کرد. به علاوه، در این مثال می‌توان از عبارت @abc.abstractmethod

 به عنوان دکوراتور متد انتزاعی نیز استفاده کرد.

آموزش برنامه نویسی شی گرا در پایتون Python
فیلم آموزش برنامه نویسی شی گرا در پایتون Python در تم آف

کلیک کنید

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

from abc import ABC, abstractmethod
#Abstract Class
class Bank(ABC):
   def bank_info(self):
       print("Welcome to bank")
   @abstractmethod
   def interest(self):
       "Abstarct Method"
       pass
#Sub class/ child class of abstract class
class SBI(Bank):
   def balance(self):
       print("Balance is 100")
s= SBI()
s.bank_info ()
s.balance()

در مثال بالا، Bank

  یک کلاس Abstract است که شامل یک متد انتزاعی با نام interest()

 است. کلاس SBI

 نیز کلاس فرزند مربوط به کلاس والد Bank

 است. در کلاس SBI

بدنه متد انتزاعی interest()

تعریف نشده است. بدین ترتیب، کلاس SBI

نیز یک کلاس انتزاعی محسوب می‌شود و نمی‌توان از این کلاس نمونه‌سازی کرد.

جمع‌بندی

در مقاله حاضر با عنوان «کلاس Abstract در پایتون — به زبان ساده» به توضیح مفهوم انتزاع در برنامه نویسی شئ‌گرا پرداخته شد. این اصل از شئ‌گرایی در قالب دو مفهوم کلاس Abstract و متد Abstract در زبان برنامه نویسی پایتون به کار می‌رود که به مثال‌های کاربردی درباره نحوه استفاده از  آن‌ها در مطلب فعلی اشاره شد.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.