آشنایی با برخی الگوهای طراحی نرم افزار
در اصل الگوها ایده آل ترین راه ممکن میباشند که یک برنامهنویس میتواند در هنگام طرح یک برنامه برای حل مشکلاتش از آنها بهره گیری کند.
معمولا الگوهای طراحی شیءگرا نمایانگر واکنش،رابطه بین اشیاء و کلاس ها هستند، بدون اینکه شی ء ها یا کلاس های نهایی برنامه را مشخص کند.
در طراحی نرمافزار، الگوی طراحی یا Design Pattern یک راهحل عمومی تکرارشونده برای مشکلات متداول طراحی نرمافزار است.
الگوی طراحی، یک پروژه پایانی نخواهد بود که به صورت مستقیم توانای تبدیل به کد منبع یا ماشین را داشته باشد؛ بلکه تعریف یا قالب برای حل یک مسئله در وضعیت گوناگون میباشد.
الگوهایی که خودشان حالت تغییرپذیر دارند، ممکن است،مناسب زبانهای برنامهنویسی تابعی نباشند؛ ناگفته نماند که برخی زبانهای برنامه نویسی، برای حل یک مسئله راهحلهای پیش فرض آماده از قبل دارا هستند؛ استفاده از بعضی الگوها برای حل مسئلۀ شبیه میتواند لازم نباشد. پس متوجه شدیم که الگوهای طراحی شیءگرا ممکن است برای زبانهای غیر شیءگرا کارامد نباشد.
الگوهای طراحی میتوانند سرعت فرآیند توسعۀ نرمافزار را با فراهم آوردن الگوهای توسعۀ اثباتشده و مورد آزمون قرار گرفته شده، افزایش دهند.
در یک طراحی دقیق نرمافزار لازم است پیامد هایی که امکان دارد در مرحله اجراء رویت شود و لحاظ نشده است، اما بعدها خود را نشان میدهد را در نظر بگیریم.
مزایاء استفاده از الگوها:
استفاده از الگوهای طراحی کمک میکند تا از بروز خطاهای کوچک که ممکن است مشکلات بزرگی را ایجاد کنند، جلوگیری شود و علاوه بر آن، خوانایی کد را برای کدنویسان و معمارانی که با الگوها آشنا هستند، افزایش میدهد.
در جهت رسیدن به انعطافپذیری در نرمافزار، الگوهای طراحی اغلب اعمال را به صورت غیرمستقیم انجام میدهند؛این عمل گاهی اوقات باعث پیچدگی در طراحی حاصل و دلیل افت کارایی برنامه می شود.
بنا بر تعاریف، جهت به کار گیری الگوها در هر برنامهای که از آنها استفاده میکند، باید از نو برنامهنویسی کرد. از آنجایی که بعضی از نویسندگان این نکته را مخالف با en:Code reuse آنگونه که توسط مهندسی نرمافزار بر پایه پیکرپار فراهم میشود، میبینند، پژوهشگران تلاش کردهاند تا الگوها را به پیکرپارها تبدیل کنند؛ مانند: میر و آرنوت که توانستند دو سوم الگوهایی را که رویشان کار میکردند، به صورت کامل یا جزئی به پیکرپار تبدیل کنند. تکنیکهای طراحی نرمافزار را به سختی میتوان در گسترۀ وسیعتری از مسائل به کار برد.
در کل الگوهای طراحی راهحلهایی کلی را در قالبی بیان میکنند که وابسته به مسئلۀ خاصی نیست.
چند مورد از الگوهای مهم طراحی نرم افزار:
الگوی آداپتور
الگوی آذینگرdecorator
الگوی استخر اشیاء
الگوی استراتژی
الگوی پل
الگوی بازدیدگر
الگوی تکرارIterator pattern
الگوی ثبت کنشورActive record pattern
الگوی خلاقیتCreational pattern
الگوی رفتاری
الگوی زنجیره مسئولیت
الگوی سازنده
الگوی فرمانCommand pattern
الگوی کارخانه انتزاعی
الگوی نمونه اولیه
الگوی یگانه
توضیح کلی چند نمونه از الگوهای فوق:
الگوی آداپتور
الگوی وفق دهنده که به آداپتور نیز معروف است نوعی الگوی طراحی در مهندسی نرمافزار می باشد؛ که به رابط یک کلاس اجازه میدهد تا توسط رابط دیگری مورد استفاده قرار گیرد؛ اکثراََ در جهتی که بدون تغییر در کد منبع، بتوان استفاده از کلاس های فعلی را مقدور ساخت،استفاده می شود.
یک آداپتور قابلیت این را دارد تا دو رابط ناسازگار بتوانند با هم کار کنند و این یک تعریف کلی از مفهوم آداپتور می باشد.
نا گفته نماند که امکان دارد رابط ها ناسازگار باشند اما قابلیت درونی آنها باید سازگار با نیاز باشد؛ الگوی طراحی آداپتور از طریق تبدیل رابط یک کلاس به رابط مورد انتظار توسط کلاینت، به کلاسهای ناسازگار اجازه میدهد تا بتوانند از قابلیتهای همدیگر استفاده کنند.
الگوی آذینگر
در برنامهنویسی شئ گرا، الگوی (دکوراترdecorator)که به آذینگر معروف می باشد را یک الگوی طراحی تعریف می کنیم ، قابلیت افزودن رفتار behavior به یک شئ را بهطور پویا dynamic، یا ایستاstatic را فراهم میسازد؛ بدون اینکه رفتار اشیاء دیگر از همان کلاس (که شئ مورد بحث از آن ساخته شده)
دستخوش تغییر شوند.
الگوی طراحی آذینگر معمولاً برای پایبندی به قاعده تک وظیفهای مورد استفاده قرار میگیرد چرا که این الگوی طراحی، امکان تقسیم عملکردها functionality بین کلاسهای مختلف که هر کدام دغدغههایconcern خاص را پوشش میدهند، فراهم میسازد؛در جهت افزایش (آذین کردن) عملکرد یک شئ به صورت ایستا یا گاهی اوقات به صورت پویا، در زمان اجراRuntime بهطور مستقل از اشیاء دیگر همان کلاس، از الگوی طراحی آذینگر استفاده میشود.
این مهم از طریق ایجاد یک کلاس آذینگر یا کلاس پیچه، که کلاس اصلی (کلاسی که میخواهیم عملکردش را آذین کنیم)، در آن پیچیده میگردد، برقرار میشود.
این عمل پیچیدن کلاس اصلی در کلاس آذینگر از طریق مراحل زیر انجام میشود:
۱)ساخت یک زیر کلاسِ آذینگر از کلاس اصلی.
۲)اضافه کردن یک اشارهگر به صورت فیلدکه به کلاس اصلی اشاره میکند.
۳)ارسال یک شئ از طریق سازندهconstructorبه فیلد برای مقدار دهی به اشارهگر.
۴)در کلاس آذینگر از تمام متدهای(Method) کلاس آذینشده یا همان کلاس اصلی باید استفاده کرد.
۵)در کلاس آذینگر، هر متد از کلاس اصلی را که میبایست عملکردش اصلاح شود (گسترش یابد) باید override کرد.
الگوی پل
الگویی دیگر در زمینهء نرم افزار که یک الگوی طراحی در مهندسی نرمافزار میباشد، و معنی آن
"جداسازی یک انتزاع از اجرای آن به طوری که این دو بتوانند به صورت جدا از هم تغییر پذیر باشند"می باشد.
الگو پل به دست گروه چهار نفره (GoF) رو نمایی شده است؛ الگوی پل از گروههای قالبدار و گروههای تجمعی و بعضاً ارثبری برای جداسازی مسئولیتها در طبقات مختلف استفاده میکند. هنگامی که یک کلاس اغلب تغییر میکند، ویژگیهای برنامهنویسی شی گرا بسیار مفید خواهد بود، چرا که تغییرات در کد برنامه، میتواند با حداقل اطلاعات از برنامه صورت گیرد. زمانی که کلاسها و کاری که آنها انجام میدهند نسبت به یگدیگر تفاوتهای زیادی داشته باشد، از الگوی پل استفاده میشود.
خود کلاس به عنوان انتزاع در نظر گرفته میشود و کاری که انجام میدهد در مرحله پیادهسازی آن است. همچنین الگوی پل میتواند به عنوان دو لایه از انتزاع در نظر گرفته شود. زمانی که تنها یک پیادهسازی ثابت امکانپذیر است در زبان C++ این الگو در اصطلاح Pimpl شناخته میشود. الگوی پل اغلب با الگوی آداپتور اشتباه گرفته میشود. در واقع، الگوی پل اغلب در زبان java توسط کلاس الگوی آداپتور پیادهسازی میشود.
در پایان این مقاله هدف ما آشنایی شما به طور کلی با الگو های طراحی نرم افزار که بسیار ضروری هستند میباشد،امیدوارم مطالب فوق برای شما عزیزان کارامد و مفید باشد.
گرد آورنده مقاله:سجاد زاهدی
منابع:
https://itnext.io/easy-patterns
https://karinsoo.com
Design Patterns:
Elements of ReusableObject OrientedSoftware