Site icon آکادمی آمانج

همه چیز درباره الگوهای طراحی در پایتون

الگوهای طراحی در پایتون

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

چیزی که خواندید مفهوم اصلی و ساده شده ی الگوهای طراحی است. استفاده از الگوهای طراحی در زبان های برنامه نویسی شی گرا مختلف مرسوم است. در این مقاله تمرکز ما بر الگوهای طراحی در پایتون است.

 


بیشتر بخوانید: “مفهوم شی‌گرایی به زبان ساده


الگوهای طراحی در برنامه نویسی چیست؟

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

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

 

 

مزایای استفاده از الگوهای طراحی در پایتون

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

 

 

تفاوت الگو طراحی و الگوریتم

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

 

 

انواع الگوهای طراحی در پایتون

به طور کلی الگوهای طراحی به سه دسته کلی تقسیم می شوند:

در ادامه این مقاله به بررسی هر نوع از الگوهای طراحی در پایتون خواهیم پرداخت و تعدادی از پر استفاده ترین الگوهای طراحی را معرفی خواهیم کرد.

 

Creational

الگوهای طراحی Creational با نمونه سازی کلاس یا اشیا سروکار دارند. الگوهای طراحی Creational بیشتر به الگوهای Class-creational و الگوهای Object-creational تقسیم می شوند. الگوهای Class-creational از وراثت در فرآیند نمونه سازی استفاده می کنند در حالی که الگوهای Object-creational از واگذاری وظایف بین اشیا برای انجام کار استفاده می کنند.

الگوهای طراحی Creational عبارتند از:

نمونه پیاده سازی الگوی طراحی Singleton

class Singleton:
    def __new__(cls):
        if not hasattr(cls, 'instance'):
            cls.instance = super(Singleton, cls).__new__(cls)
        return cls.instance


if __name__ == "__main__":
    s = Singleton()
    print("Object created:", s)

    s1 = Singleton()
    print("Object created:", s1)

 

 

Structural

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

الگوهای طراحی سازه عبارتند از:

 

نمونه پیاده سازی الگوی طراحی Decorator

class my_decorator:
    def __init__(self, func):
        print("inside my_decorator.__init__()")
        func() # Prove that function definition has completed

    def __call__(self):
        print("inside my_decorator.__call__()")


@my_decorator
def my_function():
    print("inside my_function()")


if __name__ == "__main__":    
    my_function()

 

 

Behavioral

الگوهای رفتاری در مورد شناسایی الگوهای ارتباطی مشترک بین اشیا هستند. این الگوها با الگوریتم ها و تخصیص مسئولیت ها بین اشیا سروکار دارند.

الگوهای رفتاری عبارتند از:

 

نمونه پیاده سازی الگوی طراحی Iterator

from __future__ import annotations
from collections.abc import Iterable, Iterator
from typing import Any, List


class AlphabeticalOrderIterator(Iterator):
    _position: int = None
    _reverse: bool = False

    def __init__(self, collection: WordsCollection, 
                 reverse: bool = False):
        self._collection = collection
        self._reverse = reverse
        self._position = -1 if reverse else 0

    def __next__(self):
        try:
            value = self._collection[self._position]
            self._position += -1 if self._reverse else 1
        except IndexError:
            raise StopIteration()
        return value


class WordsCollection(Iterable):
    def __init__(self, collection: List[Any] = []):
        self._collection = collection

    def __iter__(self) -> AlphabeticalOrderIterator:
        return AlphabeticalOrderIterator(self._collection)

    def get_reverse_iterator(self) -> AlphabeticalOrderIterator:
        return AlphabeticalOrderIterator(self._collection, True)

    def add_item(self, item: Any):
        self._collection.append(item)


if __name__ == "__main__":
    collection = WordsCollection()
    collection.add_item("First")
    collection.add_item("Second")
    collection.add_item("Third")

    print("Straight traversal:")
    print("\n".join(collection))

    print("Reverse traversal:")
    print("\n".join(collection.get_reverse_iterator()))

 


بیشتر بخوانید: “راهنمای جامع بازارکار و درامد برنامه نویسی پایتون


نتیجه گیری

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

 

برای تهیه این مقاله از منابع زیر استفاده شده است:

geeksforgeeks.org

refactoring.guru

 

 

مشاهده نسخه گرافیکی و کامل