python, آموزش قدم به قدم پایتون, پایتون

abstraction در پایتون (مفهوم انتزاع)

abstraction در پایتون


انتزاع (Abstraction)
یکی از اصول مهم در برنامه‌نویسی و به ویژه در برنامه‌نویسی شیءگرا است. این مفهوم به برنامه‌نویسان این امکان را می‌دهد که جزئیات پیچیده را پنهان کنند و تمرکز خود را بر روی ویژگی‌های مهم و کلان برنامه بگذارند. در این مقاله، با مفهوم abstraction در پایتون آشنا می‌شویم و نحوه استفاده از آن در برنامه‌نویسی شیءگرا را مورد بررسی قرار می‌دهیم. همچنین پیشنهاد می‌کنیم از دیگر آموزش های ما نیز دیدن فرمایید:

مفهوم انتزاع

انتزاع به معنای پنهان کردن جزئیات پیچیده و جزئی یک واحد (مانند یک کلاس یا تابع) و نمایش ویژگی‌ها و عملکرد مهم آن است. با استفاده از انتزاع، برنامه‌نویسان می‌توانند به صورت سطح بالا تر و انتزاعی به مسائل نگاه کنند، بدون آن که به جزئیات پیاده‌سازی وارد شوند. abstraction در پایتون به ترتیب به موارد زیر کمک می‌کند:

  1. ساده‌تر کردن کد: با پنهان کردن جزئیات پیچیده و استفاده از واسط‌ها و تعاریف انتزاعی، کد ساده‌تر و قابل مدیریت‌تر می‌شود.
  2. مقیاس‌پذیری: انتزاع به برنامه‌نویسان این امکان را می‌دهد که کد را به راحتی گسترش دهند و ویژگی‌های جدید را اضافه کنند بدون این که به کد قدیمی و جزئیات پیاده‌سازی دست بزنند.
  3. تست و اعتبارسنجی: با پنهان کردن جزئیات پیچیده، تست و اعتبارسنجی برنامه ساده‌تر و مؤثرتر می‌شود. برنامه‌نویسان می‌توانند تست را بر روی واحد‌های انتزاعی انجام دهند بدون این که به جزئیات پیچیده نیاز داشته باشند.
  4. تعامل با بقیه برنامه: انتزاع به برنامه‌نویسان این امکان را می‌دهد که با بقیه برنامه به صورت سطح بالا و با ویژگی‌های کلان تعامل کنند، بدون این که جزئیات پیاده‌سازی را بدانند.

abstraction در پایتون

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


انتزاع با استفاده از کلاس‌ها

کلاس‌های انتزاعی (Abstract Classes) در پایتون به عنوان کلاس‌هایی تعریف می‌شوند که تنها به منظور ارائه یک الگوی برنامه‌نویسی برای کلاس‌های دیگر وجود دارند و نمی‌توانند نمونه‌ای (instance) مستقیم از خودشان ایجاد کنند. این کلاس‌ها معمولاً دارای یک یا چند تابع انتزاعی (abstract method) هستند که باید توسط کلاس‌های فرزند آن‌ها پیاده‌سازی شوند. تابع انتزاعی یک تابع است که تنها دارای نام و پارامترهای ورودی است و بدنه آن خالی است.

در اینجا یک مثال کلاس انتزاعی به زبان پایتون را ارائه می‌دهیم و سپس توضیح می‌دهیم:

from abc import ABC, abstractmethod

class Animal(ABC):
    def __init__(self, name):
        self.name = name

    @abstractmethod
    def speak(self):
        pass

class Dog(Animal):
    def speak(self):
        return f"{self.name} واو واو!"

class Cat(Animal):
    def speak(self):
        return f"{self.name} میاو میاو!"

# سطر زیر به خطای TypeError منجر می‌شود.
# animal = Animal("Unknown")

dog = Dog("Rex")
cat = Cat("Whiskers")

print(dog.speak())  # خروجی: "Rex واو واو!"
print(cat.speak())  # خروجی: "Whiskers میاو میاو!"

در این مثال:

  1. ما یک کلاس انتزاعی به نام Animal تعریف می‌کنیم که از کلاس پایه انتزاعی ABC ارث‌بری می‌کند. این کلاس دارای یک تابع سازنده (constructor) با پارامتر name است که نام حیوان را تعیین می‌کند. همچنین، دارای یک تابع انتزاعی به نام speak() است که باید توسط کلاس‌های فرزند پیاده‌سازی شود.
  2. ما دو کلاس فرزند، Dog و Cat، از کلاس Animal ایجاد می‌کنیم و تابع انتزاعی speak() را در هر کدام از این کلاس‌ها پیاده‌سازی می‌کنیم.
  3. در خطوط آخر، نمونه‌هایی (instance) از کلاس‌های فرزند Dog و Cat ایجاد می‌شوند و تابع speak() بر روی آنها فراخوانی می‌شود تا صداهای مخصوص هر کلاس چاپ شود.

توجه داشته باشید که کلاس انتزاعی Animal نمی‌تواند مستقیماً نمونه‌ای از خودش ایجاد کند؛ این کار باعث ایجاد خطای TypeError می‌شود. وظیفه‌ی این کلاس،ایجاد الگوی برنامه‌نویسی برای کلاس‌های فرزند است.

توابع و انتزاع

توابع abstract همانطور که در قسمت قبل دیدید هیچگونه بدنه‌ای ندارند و در کلاس‌های Abstract از آن‌ها استفاده می‌شود.

انتزاع و وراثت

برای پیاده سازی کلاس‌های abstract حتماً باید ارث‌بری انجام شود چراکه از کلاس‌های abstract نمی‌توان نمونه‌ای (instance) ساخت. دقت کنید در مثال قبل از ارث‌بری به همراه انتزاع استفاده کردیم.

مزایای استفاده از انتزاع

استفاده از انتزاع در برنامه‌نویسی پایتون دارای مزایای بسیاری است:

  1. سادگی کد: با انتزاع دخالت در جزئیات کمتر می‌شود و این خود کد را ساده‌تر می‌کند.
  2. مدیریت‌پذیری: با پنهان کردن جزئیات پیچیده، کد قابل مدیریت‌تری خواهیم داشت و تغییرات راحت‌تر اعمال می‌شوند.
  3. مقیاس‌پذیری: انتزاع به برنامه‌نویسان این امکان را می‌دهد که برنامه را به راحتی گسترش دهند و ویژگی‌های جدید اضافه کنند.
  4. تست و اعتبارسنجی: تست و اعتبارسنجی کد ساده‌تر و مؤثرتر می‌شود زیرا می‌توان تنها به ویژگی‌ها و خروجی‌های انتزاعی توجه کرد.
  5. تعامل و همکاری: انتزاع به برنامه‌نویسان امکان تعامل با بقیه برنامه به صورت سطح بالا و با ویژگی‌های کلان را می‌دهد

نوشته های مشابه

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

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