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


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

علاوه بر این الگوهای طراحی پاسخ‌گویی بهانواع نیازمندی‌های وظیفه‌مندی و غیر وظیفه‌مندی را میسر می‌سازند و به این ترتیببه یك طراحی خوب كمك می‌كنند. الگوها علاوه بر ارایه‌ی راهكارهای مناسب برایدست‌یابی به نیازهای وظیفه‌مندی، توان پاسخ به نیازهای غیر وظیفه‌مندی مانندتغییر‌پذیری، آزمون‌پذیری و قابلیت نگهداری را نیز دارا هستند.
لازم است توجهشود كه الگو‌های طراحی به حل مسأله كمك می‌كنند و لی راه‌حل كامل آنرا در اختیار مانمی‌گذارند، از این جهت شبیه‌ الگوهای لباس هستند كه شكل كلی از طراح را در اختیارما می‌گذارند ولی برای استفاده مناسب از هر الگو لازم است طراحی با نوآوری و خلاقیتخود آن را در زمینه‌ی مورد نیاز خود بدوزد.

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

كارایی و مقبولیت الگوهای طراحی GoF Design Pattern) GoF ) به حدی رسیده است كه امروزه ابزارهای حرفه‌ای CASE بطور مستقیم از آنهاپشتیبانی می‌كنند و امكان اعمال الگوهای طراحی GoF را فراهم می‌كنند. از جمله اینابزارها می‌توان از Rational XDE ،Rational Rose و Borland Together نام برد.
الگوهای پایه GoF از لحاظ هدف به سه دسته تقسیم شده‌اند :


1.
الگوهایآفرینشی (Creational)
در فرآیندهای تولید اشیاء استفاده می‌شوند و عبارتند از : Factory Method، Builder، Prototype و Singleton

2.
الگوهای ساختاری (Structural)
در تركیب كلاس‌ها و اشیاء مورد استفاده قرار می‌گیرند و عبارتند از : Adapter، Bridge، Composite، Decorator، Facade، Flyweight و Proxy

3.
الگوهای رفتاری (Behavioral)
چگونگی تعامل بین كلاس‌ها یا اشیاء و نحوه‌ی توزیعمسؤولیت بین آنها را مورد بحث قرار می‌دهند و عبارتند از : Chain of responsibility, Command, Interpreter, Iterator, Mediator,Memento, Observer, State, Strategy, Template method و Visitor

شخصاً در استفاده از الگوهاآنها را بسیار كاربردی یافته‌ام كه هم در سرعت طراحی و هم در كیفیت آن می‌تواندبسیار مفید واقع شود.
الگوی شیء مرکب (Composite)

مقصود :
تشکیل ساختاری درختی به منظورنمایش سلسله مراتب کل-جزء اشیاء
به Client ها اجازه میدهد با اشیاء ساده و مرکببه شکل یکسان برخورد کنند.
انگیزه :
در برنامه های گرافیکی میتوان با ترکیباجزای پایه‌ای، اجزای مرکب ساخت
نیاز به مدل کردن اشیاء مرکب مانند اشیاء ساده
کاربرد :
وقتی میخواهیم سلسله مراتب کل-جزء اشیاء را نمایش دهیم
وقتیکه میخواهیم مشتریها تفاوتی بین اشیاء ترکیبی و اشیاء بسیط احساس نکنند.


شرکت کنندگان :
جزء (Component)
برگ (Leaf)
شیء مرکب (Composite)
مشتری (Client)

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