الگوی طراحی یا دیزاین پترن راه حل هایی برای مشکلات رایج در طراحی نرم افزارها هستند. شناخت این الگوها باعث تمایز یک برنامه نویس حرفه ای از برنامه نویسان معمولی میشود. مهم نیست با چه زبان برنامه نویسی کدنویسی میکنید، شناخت و استفاده از این الگوها در طراحی نرم افزارها میتواند کمک بسیار زیادی به شما برای ایجاد نرم افزارها کند. پس به شما توصیه میکنیم مطالعه ادامه این را به هیچ عنوان از دست ندهید.
الگوی طراحی یا دیزاین پترن چیست؟
در طول زمان برنامه نویسان برای توسعه نرم افزارها با مشکلات مختلفی مواجه میشدند. بسیاری از این مشکلات مستقل از زبانهای برنامه نویسی و مشابه هم بودند. بنابراین برای حل این مشکلات راه حلهای مختلفی ارائه شد که به بهترین روش حل و رفع این مشکلات الگو طراحی یا Design Pattern می گویند. به عبارت دیگر مجموعه ای از بهترین راه حلهای مشکلات متداول در فرآیند برنامه نویسی نرم افزار را الگوهای طراحی مینامند. دیزاین پترن ها برای حل مشکلات رایج در برنامه نویسی شی گرا به وسیله برنامه نویسانی باتجربه توسعه داده شده اند.
نکته :
الگوهای طراحی جزو معماریهای نرم افزاری نیستند و فقط شیوه ای صحیح از کدنویسی شی گرا را ارائه میدهند. بنابراین این الگوها فقط در قلمرو کدنویسی شی گرا وارد میشوند و مستقل از زبانهای برنامه نویسی هستند.
تاریخچه الگو طراحی
الگو طراحی اولین بار توسط کریستوف الکساندر (Christopher Alexander) ارائه شدند. کریستوف الکساندر از الگوهای طراحی تحت عنوان راه حل هایی برای مشکلاتی یاد میکرد که به صورت متداول در فرآیند برنامه نویسی رخ میدهند. در سال ۱۹۹۴ گروهی به اسم Gang of Four که اعضای آن را اریک گاما، ریچارد هلم، رالف جانسون، جام ولیسایدز تشکیل میدادند، الگوهای طراحی را از نظر کاربرد طبقه بندی کردند. گروه Gang of Four یا به اختصار GOF، این الگوها را در قالب کتابی به نام الگوهای طراحی منتشر کردند. این کتاب ۲۳ تا از الگوهای طراحی را به سه دسته کلی تقسیم بندی کرده و به معرفی و آموزش آنها پرداخته است.
گاما و همکارانش در این کتاب برای معرفی هر یک از الگوهای طراحی ساختار خاصی را در نظر گرفته اند. آنها از معرفی الگوهای طراحی به صورت تصویری خودداری کرده اند. زیرا بر این اعتقاد بودند که معرفی الگوهای طراحی نیازمند ساختاری جدید و اختصاصی است. بنابراین ساختار زیر را به منظور ارائه بهتر دیزاین پترنها طراحی کردند. اجزای اصلی این ساختار عبارتند از :
- نام و طبقه بندی: نام الگو و توصیفی کوتاه از آن را بیان میکند.
- هدف: در این بخش به صورت مختصر توضیحاتی در مورد هدف از ارائه الگو مطرح شده است.
- نام دیگر: اگر الگوی طراحی با نامهای دیگری شناخته شده باشد در این بخش آنها معرفی میشوند.
- راه حل: این قسمت به سناریویی که در آن از الگوی طراحی استفاده شده باشد و نحوه استفاده از کلاسها و شیها برای حل مشکل مد نظر میپردازد.
- کاربرد: در این بخش توصیف میشود که الگوی مورد نظر در چه شرایطی کاربرد خواهد داشت.
- ساختار: در این بخش ساختار اصلی الگوهای طراحی با استفاده از UML نمایش داده می شوند.
- کلاسها و اشیای مورد استفاده: مسئولیت کلاسها یا اشیایی که در الگوی طراحی استفاده میشوند در این بخش نوشته میشوند.
- نحوه همکاری: چگونگی همکاری کلاسها و شیها در این قسمت مشخص میشود.
- روش پیاده سازی: در این بخش مراحل پیاده سازی مطرح میشوند.
- کد نمونه: در این بخش مثالها در قالب زبانهای برنامه نویسی نشان داده شده اند.
- مثالهای کاربردی: در این بخش مثال هایی کاربردی از الگوی طراحی ذکر میشوند.
- ارتباط الگوی طراحی با سایر الگوها: بخشها مرتبط الگوی طراحی با سایر الگوها در این بخش مورد بررسی قرار میگیرد.
انواع الگو طراحی در مهندسی نرم افزار
الگو طراحی سازنده (Creational Design Patterns)
به الگو طراحی که برای حل مشکلات مربوط به ایجاد اشیا در نرم افزار ارائه شده اند، الگوهای طراحی سازنده یا Creational میگویند. متداولترین دیزاین پترنهای سازنده عبارتند از :
- Singleton
- Factory Method
- Prototype
- Abstract Factory
- Builder
- Object Pool
الگو طراحی ساختاری(Structural Design Patterns)
الگو طراحی ساختاری یا Structural، مجموعه ای از راه حل هایی هستند که برای حل مشکلات توسعه پذیری ساختار نرم افزارها، به کمک برنامه نویسان میآیند. این دیزاین پترنها برای مدیریت ارتباط میان کلاسها و شیها با یکدیگر استفاده میشوند. این الگوهای طراحی عبارتند از :
- Adapter
- Decorator
- Facade
- Bridge
- Composite
- Flyweight
- Proxy
الگو طراحی رفتاری (Behavioral Design Patterns)
الگو طراحی رفتاری یا Behavioral مجموعه ای از راهکارهای کدنویسی مربوط به تعامل و ارتباط اشیا هستند. این الگوهای طراحی عبارتند از:
- Chain of responsibility
- Strategy
- Iterator
- Command
- Mediator
مزایای استفاده از الگو طراحی نرم افزار
می توان با این دیدگاه به دیزاین پترنها نگاه کرد که استفاده از آنها در حقیقت، بهره مندی از تجارب و تخصص بهترین برنامه نویسان شی گرا در فرآیند کدنویسی است. برخی بر این باور هستند که مشکلاتی مانند استفاده زیاد از کلاس ها، طراحی ضعیف و… جزو مشکلات بنیادی برنامه نویسی شی گرا است. دیزاین پترنها با شناخت صحیح اصول برنامه نویسی شی گرا مزایای زیادی را در اختیار برنامه نویسان قرار میدهند. از جمله مهمترین مزایای استفاده از آنها میتوان به موراد زیر اشاره کرد:
- افزایش مقیاس پذیری (scalability)
- افزایش قابلیت توسعه پذیری (expandability)
- افزایش انعطاف پذیری (flexibility)
- افزایش سرعت توسعه نرم افزارها
- کاهش خطاها و مشکلات
- کاهش میزان کدنویسی
کی و کجا باید از الگو طراحی استفاده کنیم؟
ینکه بدانیم کی و کجا باید از الگو طراحی استفاده کنیم، یکی از سوالهای رایج در میان برنامه نویسان است. از آنجایی که هر الگوی طراحی برای کاربردی مشخص و حل مشکلی خاص در فرآیند برنامه نویسی ارائه داده شده است، باید بتوانیم آن مشکلات را در زمان توسعه نرم افزار شناسایی کنیم. پس از شناسایی و تشخیص این گونه مشکلات، باید نحوه استفاده از دیزاین پترنهای ارائه شده برای حل آنها را آموزش ببینیم تا بتوانیم از آنها استفاده کنیم.
نتیجه گیری
شناخت مفاهیم الگوهای طراحی برای همه برنامه نویسان یک ضرورت به شمار میآید. زیرا الگوهای طراحی با هدف رفع مشکلات رایج کدنویسی و استاندارد ساختن فرآیند توسعه نرم افزار ارائه شده اند. برنامه نویسان با به کارگیری الگوهای طراحی قادر هستند نرم افزارهای انعطاف پذیر، قابل توسعه و مقیاس پذیر بسازند که به صورت اصولی طراحی شده اند. آیا تاکنون از الگوهای طراحی استفاده کرده اید؟ به نظر شما مهمترین مزیت استفاده از الگوهای طراحی در کدنویسی شی گرا چیست؟