الگوهای طراحی

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

الگوهای طراحی (به انگلیسی: Design Patterns) الگوها و مستنداتی از روش‌های حل برای مشکلات رایج در برنامه‌نویسی شی‌گرا هستند. این الگوها ابتدا توسط کریستوف الکساندر ارایه شد و سپس از سوی گروهی موسوم به دسته چهار (به انگلیسی: Gang of Four) یا به اختصار GOF مورد طبقه‌بندی قرار گرفت و تحت عنوان کتابی به نام الگوهای طراحی در سال ۱۹۹۴منتشر شد.[۱].

کریستوف الکساندر الگوی طراحی را راه حلی برای مسایلی می‌داند که دایما در محیط اطراف رخ می‌دهد، از این رو می‌توان بدون دوباره کاری در آینده مسایل را با سرعت بالاتری حل نمود[۲].

تاریخچه[ویرایش]

در طراحی نرم‌افزارهای مختلف مسایلی دایما بروز می‌یابند که در پروژه‌های قبلی، که حتی دارای قلمرو کاربردی (به انگلیسی: Application Domain) مختلفی هستند، نیز وجود دارند. راه حل موجود برای این روش‌های غالبا یکسان است و یافتن طراحی مناسب برای این موارد تکراری وقت‌گیر و هزینه‌بر است. از این رو می‌توان راه‌حل‌هایی را ارایه نمود که مسایل را ساده نماید. از طرفی روح برنامه‌نویسی شی‌گرا بر مبنای قابلیت باز-استفادگی (به انگلیسی: ReUse) و جز-محوری (به انگلیسی: Component-Based) است، موجب ایجاد برنامه‌هایی قابل استفاده در آینده خواهد شد. اریک گاما ،ریچارد هلم ، رالف جانسون، جام ولیسایدز که بعدها به دستهٔ۴ معروف شدند در سال ۱۹۹۴ کتاب الگوهای طراحی را به همراه مقدمه‌ایی از سوی گریدی بوش به رشته‌ی تحریر درآوردند. این کتاب به دسته‌بندی ۲۳ الگوهای طراحی می‌پرداخت که تا آن زمان ابداع شده‌بودند. گریدی بوش در مقدمه‌ی کتاب الگوهای طراحی از الگوهای طراحی به عنوان راه حلی برای ایجاد سیستم‌های پیچیده نام می‌برد و از آن به عنوان زبانی نام می‌برد که می‌تواند بر روی دامنه‌های مختلفی مورد استفاده قرار گیرند[۳].

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

  • نام و طبقه‌بندی : نام الگو و توصیفی کوتاه برای آن را شامل می‌شود.
  • قصد: متنی کوتاه در پاسخ به این پرسش که : این الگو چکاری را انجام می‌دهد؟ هدف و تفکر پشت این کار چیست؟ و این الگو چه مسالی را حل می‌نماید؟
  • نام دیگر: در صورتی که نام شناخته‌شدهٔ دیگری برای آن وجود دارد ذکر گردد.
  • انگیزه: سناریویی که در آن از الگوی طراحی استفاده شده‌باشد و اینکه چگونه از کلاس و شی برای حل مشکل استفاده شده‌است.
  • قابلیت کاربردی: توصیفگر شرایط است که این الگو در آن قابل پیاده‌سازی است.
  • ساختار: یک نمایش‌ گرافیکی است که براساس تکنیک مدلسازی شی‌ایی نمایش داده می‌شود (که امروزه از زبان مدل‌سازی یکپارچه برای این کار استفاده می‌شود)
  • شرکت‌کنندگان: کلاس یا اشیا شرکت‌کننده در الگوی طراحی و بیان مسئولیت‌هایشان.
  • همکاری: چگونگی همکاری شرکت‌کنندگان در الگو
  • پیاده‌سازی: نکات پیاده‌سازی را بیان می‌نماید.
  • کد نمونه: مثالی به زبان سی++ یا اسمال‌تاک (امروزه زبان جاوا جایگزین شده است)
  • مثال‌های شناخته‌شده: مثال‌هایی از کاربرد در سیستم‌های واقعی
  • الگوهای مرتبط: چه الگوهایی شبیه این الگو هستند؟ و تفاوت‌های اساسی بین آن‌های چیست؟

[۴]

دست‌بندی الگوهای طراحی[ویرایش]

این ۲۳ الگوی طراحی، در ۳ گروه زیر دسته‌بندی می‌گردند:

  • الگوهای ایجادی
  • الگوهای ساختاری
  • الگوهای رفتاری

گروه الگوهای ایجادی[ویرایش]

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


گروه الگوهای Structural patterns[ویرایش]

در این گروه الگوهای طراحی زیر وجود دارند:
  • Adapter
  • Bridge
  • Composite
  • Decorator
  • Facade
  • Flyweight
  • Proxy


گروه الگوهای Behavioral patterns[ویرایش]

در این گروه الگوهای طراحی زیر وجود دارند:
  • Chain of responsibility
  • Command
  • Interpreter
  • Iterator
  • Mediator
  • Memento
  • Observer
  • State
  • Strategy
  • Template method
  • Visitor


پاورقی[ویرایش]

  • ^ Singleton
  • ^ Method Factory
  • ^ Abstract Factory
  • ^ Builder
  • ^ Prototype

منابع[ویرایش]

  1. دسته چهار، متن آموزشی توسعه برای افراد حاضر در پروژه‌های و الگوها در توسعه‌ی نرم‌افزار
  2. گاما، اریک. الگوهای طراحی. ادیسون-وابزلی، ۱۹۹۴. ۲. شابک ‎۰-۲۰۱-۶۳۳۶۱-۲. 
  3. گاما، اریک. الگوهای طراحی. ادیسون-وابزلی، ۱۹۹۴. ۱. شابک ‎۰-۲۰۱-۶۳۳۶۱-۲. 
  4. گاما، اریک. «فصل اول-معرفی». در الگوهای طراحی. ادیسون-وابزلی، ۱۹۹۴. شابک ‎۰-۲۰۱-۶۳۳۶۱-۲.