الکتروهایو

هوش مصنوعی / الکترونیک / برنامه‌نویسی

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

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

الگوی طراحی (Design Pattern) در فرآیند تولید نرم افزار چیست؟

الگوی طراحی (Design Pattern) در فرآیند تولید نرم افزار چیست؟ - الکتروهایو
در این مقاله می‌خوانید:

زمان تخمینی مطالعه: 7 دقیقه

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

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

الگوی طراحی از چه چیزی تشکیل شده است؟

بیشتر الگوهای طراحی بسیار رسمی(Formal) توصیف می‌شوند تا افراد بتوانند آنها را در زمینه‌های مختلف بازتولید کنند. در ادامه بخش‌هایی که معمولاً در توضیحات الگوهای طراحی وجود دارند آورده شده است:

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

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

تاریخچه الگوهای طراحی

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

مفهوم الگوها اولین بار توسط کریستوفر الکساندر در کتاب A Pattern Language: Towns, Buildings, Construction توضیح داده شد. این کتاب یک “زبان” برای طراحی محیط شهری را توصیف می‌کند. واحدهای این زبان الگوها هستند. این زبان قادر به توصیف موارد متنوع مانند این است که پنجره‌ها چقدر باید بلند باشد، یک ساختمان باید چند سطح داشته باشد، فضای سبز در یک محله چقدر بزرگ است و غیره.

این ایده توسط چهار نویسنده دیگر شامل اریش گاما، جان ولیسیدز، رالف جانسون و ریچارد هلم انتخاب شد. در سال 1994 آنها Design Patterns: Elements of Reusable Object-Oriented Software را منتشر کردند که در آن مفهوم الگوی طراحی یا Design Pattern را در برنامه نویسی به کار گرفتند. این کتاب دارای 23 الگو بود که مشکلات مختلف طراحی شی گرا را حل می‌کرد و خیلی سریع به یکی از پرفروش ترین‌ کتاب‌های حوزه برنامه نویسی تبدیل شد. به دلیل نام طولانی این کتاب، در بین برنامه نویسان این کتاب با نام «the book by the gang of four» شناخته می‌شود و حتی به طور خلاصه آن را «کتاب GoF» می‌نامند.

از آن زمان، ده‌ها الگوی شی گرا دیگر کشف شده است. “رویکرد الگو” در سایر زمینه‌های برنامه نویسی بسیار محبوب شد، بنابراین بسیاری از الگوهای دیگر در حال حاضر خارج از طراحی شی گرا نیز وجود دارند.

چرا باید Design Pattern را یاد بگیرم؟

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

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

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

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

  • راه حل سریع(Kludges) برای یک زبان برنامه نویسی ضعیف : معمولاً نیاز به الگوها زمانی ایجاد می‌شود که افراد زبان برنامه‌نویسی یا فناوری‌ای را انتخاب می‌کنند که سطح انتزاع لازم را ندارد. در این مورد، الگوها تبدیل به یک راه حل سریع می‌شوند که توانایی‌های فوق‌العاده مورد نیاز را به زبان می‌بخشد. به عنوان مثال، الگوی استراتژی(Strategy) را می‌توان با یک تابع ساده ناشناس (لامبدا) در اکثر زبان‌های برنامه نویسی مدرن پیاده‌سازی کرد.
  • راه حل‌های ناکارآمد: الگوها سعی می‌کنند رویکردهایی را که قبلاً به طور گسترده مورد استفاده قرار گرفته‌اند، نظام مند کنند. این یکپارچگی توسط بسیاری به عنوان یک عقیده(ِdogma) تلقی می‌شود، و آنها الگوها را جزء به جزء پیاده می‌کنند، بدون اینکه آنها را با زمینه پروژه خود تطبیق دهند.
  • استفاده غیر موجه: به طور خلاصه می‌توان گفت که اگر تنها چیزی که دارید دیزاین پترن است، می‌خواهید آن را در همه جا استفاده کنید. این مشکلی است که بسیاری از تازه کارها را که به تازگی با الگو طراحی آشنا شده‌اند آزار می‌دهد. با یادگیری الگوها، سعی می‌کنند آن‌ها را در همه جا اعمال کنند، حتی در شرایطی که کد ساده‌تر به خوبی قابل پیاده سازی است.

انواع Design Pattern

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

  • الگوهای Creational(ایجاد) مکانیسم‌های ایجاد شی را ارائه می‌دهند که انعطاف پذیری و استفاده مجدد از کد موجود را افزایش می‌دهد.
  • الگوهای Structural(ساختاری) نحوه جمع آوری و سر هم کردن اشیاء و طبقات را در ساختارهای بزرگتر توضیح می‌دهند، در حالی که این ساختارها را انعطاف پذیر و کارآمد نگه می‌دارند.
  • الگوهای Behavioral(رفتاری) از ارتباطات مؤثر و تخصیص مسئولیت‌ها بین اشیا مراقبت می‌کنند.

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

لوگو الکتروهایو

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

مطالب مرتبط:

داده‌های اسمی Nominal Data - الکتروهایو

داده‌های اسمی Nominal Data چیست؟

داده‌های اسمی(Nominal Data) یکی از اساسی‌ترین انواع داده‌ها در تجزیه و تحلیل داده‌ها است. شناسایی و تفسیر آن در بسیاری از زمینه‌ها از جمله آمار، علوم کامپیوتر، روانشناسی و بازاریابی ضروری است. این مقاله ویژگی‌ها، کاربردها و تفاوت‌های داده‌های اسمی

ادامه مطلب »
مقدمه‌ای بر ژوپیتر نوت‌بوک Jupiter Notebook - سایت الکتروهایو

مقدمه‌ای بر ژوپیتر نوت‌بوک Jupiter Notebook برای یادگیری ماشین

ژوپیتر نوت‌بوک(Jupyter Notebook) یک پلتفرم وب منبع باز است که به توسعه دهندگان اجازه می‌دهد اسنادی را ایجاد و به اشتراک بگذارند که شامل متن روایت، کد زنده، تجسم‌ها و معادلات است. این پلتفرم مبتنی بر تجسم داده‌ها، تمیز کردن

ادامه مطلب »
تفاوت تصویر، عکس و نگاره چیست؟ - سایت الکتروهایو

تفاوت تصویر، عکس و نگاره چیست؟

امروزه، اکثر مردم هنگام بحث در مورد نمایش بصری یک شی در رایانه، تفاوت تصویر، عکس و نگاره را نمی‌دانند و آنها را مترادف هم در نظر می‌گیرند. اما برای ابهام هر یک از این موارد را به صورت زیر

ادامه مطلب »
خزنده وب Web Crawler چیست؟ - سایت الکتروهایو

خزنده وب Web Crawler چیست؟

تعریف خزنده وب خزنده وب یک ربات موتور جستجوی دیجیتال است که از کپی و ابرداده(Metadata) برای کشف و فهرست‌بندی صفحات سایت استفاده می‌کند. این مفهوم همچنین به عنوان ربات عنکبوتی(اسپایدر) نیز نامیده می‌شود، وب کراولرها در وب جهانی (از

ادامه مطلب »
مفهوم SIEM (مدیریت رویداد و امنیت اطلاعات) چیست؟

مفهوم SIEM (مدیریت رویداد و امنیت اطلاعات) چیست؟

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

ادامه مطلب »
داده‌های اسمی Nominal Data - الکتروهایو

داده‌های اسمی Nominal Data چیست؟

داده‌های اسمی(Nominal Data) یکی از اساسی‌ترین انواع داده‌ها در تجزیه و تحلیل داده‌ها است. شناسایی ...

حاشیه‌نویسی متن در هوش مصنوعی - سایت الکتروهایو

حاشیه‌نویسی متن در هوش مصنوعی

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

هوش مصنوعی در باستان شناسی و کاربردهای آن - سایت الکتروهایو

هوش مصنوعی در باستان شناسی چه کاربردهای می‌تواند داشته باشد؟

مکان‌های باستان‌شناسی ممکن است ثابت باشند، اما فرهنگ‌هایی که آنها را تولید کرده‌اند، پویا و ...

با الگوریتم تشخیص اشیاء FCOS آشنا شوید - سایت الکتروهایو

با الگوریتم تشخیص اشیاء FCOS آشنا شوید: تشخیص اشیاء تک مرحله‌ای کاملاً کانولوشنال

تشخیص اشیاء یک کار مهم در بینایی کامپیوتر است که با رسم کادرهای محدود کننده ...

تصویربرداری چند طیفی، دیدی جدید فراسوی نور مرئی - سایت الکتروهایو

تصویربرداری چند طیفی، دیدی جدید فراسوی نور مرئی

تصویربرداری چند طیفی تکنیکی است که نور را در طیف وسیعی از باندهای طیفی، فراتر ...