گروه نرم افزاری هیلتن

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

الگوی طراحی چیست؟

?What is a Design Pattern



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

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

مفهوم الگو طراحی تنها در دنیای نرم افزار کاربرد ندارد بلکه در سایر زمینه های علمی نیز به طور مشابه استفاده می شود. الگو برای اولین بار توسط یک معمار ساختمان به نام کریستوفر الگساندر(Christopher Alexander) معرفی شد. او فهمید که بناهای خوب، دارای ویژگی های مشابه هستند و این ویژگی های مشابه را الگو نامید. الگو دید مشترکی نسبت به مشکل است و پیاده سازی مفهوم الگو را تغییر نمی دهد. هر الگو به توصیف مشکلی می پردازد که این مشکل در محیط، بسیار رخ می دهد. الگوی طراحی یک مکانیزم برای بیان تجربه در طراحی شی‌ءگرا است و یک راه حل مناسبی که توسط افراد خبره برای یک نوع مشکل مدل شده، که بارها و بارها در طول طراحی می تواند استفاده شود. الگوها، توسعه‌دهندگان را قادر می سازند تا از راه‌حل خاصی که توسط افراد خبره مدون شده است مجدداً استفاده نمایند. الگوهای طراحی، مجموعه از دستورات هستند که نحوه انجام عمل معینی را در دنیای برنامه نویسی نشان می دهند(pree 1994). اتخاذ الگوی طراحی در طراحی برنامه های کاربردی و وب می-تواند قابلیت استفاده مجدد و سازگاری بهتری را حمایت و ارائه کند. از زمانی که کتاب الگوهای طراحی معروف به GOF (Gong of Four) منتشر شد ، استفاده از الگوی طراحی تا حد زیادی گسترش یافت و تعدادی الگوی جدید کشف و مورد استفاده قرار گرفت. هرچه از عمر برنامه نویسی شی‌ءگرا می گذرد توسعه دهندگان الگوهای بهتری را می توانند طراحی و ارائه نمایند که باعث می شود قابلیت گسترش و نگهداری را بهتر پشتیبانی کنند. الگوهای طراحی نتایج تجربیات یک برنامه نویس نیست، بلکه حاصل تجربیات صدها برنامه نویس و طراحی حرفه ای است که در طول سال های بسیار به دست آمده اند. الگوهای طراحی ابدا شده یا اختراع شده نیستند بلکه بازخورد طراحی ها و کد نویسی های مجدد است که برنامه نویسان برای کسب بیشترین انعطاف پذیری، توسعه پذیری و قابلیت استفاده ی مجدد با آن ها درگیر بودند. الگو های طراحی را می توان خلاصه تجربیات موفق برنامه نویسان دانست. استفاده از الگوهای طراحی باعث می شود که طراحی به دست آمده ساده، انعطاف پذیر و قابلیت استفاده مجدد بیشتری داشته باشد. با استفاده از الگوهای طراحی می توان در زمان و هزینه صرفه جوی کرد و همچنین مستند سازی و نگهداری سیستم آسانتر می شود.

این الگو ها به طراحان کمک می کنند که با مبنا قرار دادن تجربیات گذشته در طرح های جدید طرحهای موفق را مجددا استفاده نمایند.. طراحی که با این الگو ها آشنایی بیشتری دارد، می تواند بلافاصله برای طراحی راه حل یک مسئله جدید، آنها را بکار گیرد.

يک قياس به روشن شدن اين نکته مي تواند کمک کند. زمان نويسان و نمايش نامه نويسان بندرت طرح هاي خود را از ابتدا شروع مي نمايند. در عوض آنها از الگوهايي نظير غم انگيز، دلاورانه (هاملت، مک بث و غيره) يا داستان رويايي پيروي مي کنند. به روشي مشابه، طراحان شيء گرا از الگوهايي نظير "حالات مختلف يک سيستم را با اشيا متفاوت نمايش بده" يا "اشيا را پيرايش کن بطوريکه بتوان براحتي ويژگي‌هايي اضافه يا کم کرد" پيروي مي کنند. با شناخت الگوها بسياري از تصميم هاي طراحي بطور خودکار پاسخ داده می‌شود.

بنابراین الگوهای طراحی، استفاده مجدد از طرح ها و معماری های موفق را آسانتر می کنند. بیان نمودن تکنیک های اثبات شده و کارا بصورت الگوهای طراحی، آنها را برای برنامه نویسان سیستم های جدید بسیار قابل دسترس تر می کند. الگوهای طراحی به شما کمک می کنند تا از بین انتخاب های موجود، طرح هایی را بکار گیرید که قابلیت استفاده مجدد از سیستم شما را بالا می برند و از انتخاب طرح هایی که قابلیت استفاده مجدد را کاهش می دهند، جلوگیری می کنند. بصورت ساده تر؛ الگوهای طراحی به طراح کمک می کنند تا طرح صحیح را سریعتر بیابد. هر الگو مسأله اي را شرح مي دهد که در محيط ما به طور مکرر رخ داده ، و سپس راه حل اصلي مسأله را شرح مي دهد ، به گونه اي که مي توانيد بيش از يک ميليون بار از اين راه حل استفاده کنيد ، بدون اين که دوبار آن را به يک طريق اجرا کنيد

الگوهای طراحی مزایای زیادی دارند که در زیر به چند نمونه از این موارد اشاره می کنیم.

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

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

1. الگوهای آفرینشی (Creational Patterns)
این دسته از الگوها بر روی روش و نحوه ساخت اشیا از کلاس ها نظارت دارند.
2. الگوهای ساختاری (Structural patterns)
این دسته از الگوها بر روی نحوه ارتباط کلاس ها و اشیا با هم نظارت دارند.
3. الگوهای رفتاری (Behavioral patterns)
این دسته از الگوها برروی نحوه رفتار و ترکیب اشیا و کلاس ها با هم نظارت دارند.

برای توصیف یک الگو باید بخش های زیر را مشخص نمود.(به عبارتی دیگر بخش های زیر برای توصیف یک الگو لازم است)

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







گروه برنامه نویسی هیلتن

گروه برنامه نویسی هیلتن