الگوهای طراحی نرم افزار (Software Design Patterns)
در مهندسی نرم افزار، یک الگوی طراحی یک راه حل کلی برای مسئله ای هست که به طور مکرر در طراحی نرم افزار با آن مواجه می شویم
  • 1396/3/26 6/16/2017 8:11:53 AM 6/16/2017 8:11:53 AM
  • 0
  • 94

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

پیش نیاز
اگه چنانچه شما جزو برنامه نویسانی هستید که مفاهیم شی گرایی را به خوبی یاد گرفته و به کار برده اید و به دنبال آن هستید که یک گام رو به جلو بردارید و یا جزو برنامه نویسان حرفه ای هستید که ممکن است حلقه ی گمشده ای در این مبحث داشته باشید و یا بخواهید که دانسته های خود را مرور کنید، این مقاله برای شما نوشته شده است.

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

اگر بخواهیم عناصر اصلی یک الگوی طراحی را معرفی کنیم می توان آن را به سه بخش تقسیم کرد:

  • نام الگوی طراحی 
  • مسئله ای که حل می کند
  • راه حلی که ارائه می کند 

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

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

الگوهای طراحی را براساس دو معیار زیر طبقه بندی می شوند:

  1. هدف 
    این معیار آن چه را که یک الگو انجام می دهد منعکس می کند، یک الگو می تواند هدف ایجادی، ساختاری و یا رفتاری داشته باشد
  2. محدوده ی عمل
    این معیار مشخص می کند که یک الگو قرار است بر روی کلاس های اعمال شود یا بر روی اشیا. 
     الگوهای در محدوده کلاسها با ارتباطات بین کلاسها و زیر کلاسهای آنها سر و کار دارند. اینگونه ارتباطات از طریق وراثت برقرار می‌گردد، که بنابراین در زمان کامپایل ثابت می‌شوند.
    الگوهای در محدوده اشیاء با ارتباطات بین اشیاء سرو کار داشته که می‌تواند در زمان اجرا تغییر کرده و در نتیجه پویا هستند. تقریباً تمام الگوها از وراثت استفاده می‌کنند.  توجه کنید که بیشتر الگوها در محدوده اشیاء عمل می‌کنند.


    الگوهای طراحی نرم افزار به سه دسته ی کلی تقسیم می شوند:

    1. الگوهای طراحی ایجادی
      این الگوهای طراحی برای ساختن Object به کاربرده می شوند، از آنجایی که ساختن Object به روش ساده منجر به مسائل طراحی و افزودن پیچیدگی می شود، این الگوها مسئله را با کنترل روی ایجاد Object حل می کنند.
      نکته: الگوهای ایجادی که در محدوده کلاسها هستند قسمتی از ایجاد اشیاء را به زیر کلاسها محول می‌کنند، در حالیکه الگوهای ایجادی در محدوده اشیاء چنین عملی را به شیء دیگری محول می‌نمایند.
    2. الگوهای طراحی ساختاری
      این الگوهای طراحی  یک روش ساده برای درک روابط بین موجودیت ها شناسایی و ارائه می کند. این الگو بیشتر به ترکیب کلاس و شی می پردازد.
      نکته: الگوهای ساختاری کلاسی از وراثت برای ترکیب کلاسها استفاده کرده در عوض الگوهای ساختاری در محدوه اشیاء روشهایی برای آمیختن اشیاء را شرح می‌دهند.
    3. الگوهای طراحی رفتاری
      این الگوها مکانیزم هایی برای ارتباط به اشیا کلاس ها ارائه می دهند و بیشتر روی نحوه ارتباط بین اشیا  با هم تمرکز دارند.
      نکته: الگوهای رفتاری کلاسی از وراثت برای تشریح الگوریتم‌ها و کنترل جریان اجرای برنامه‌ها استفاده می‌کنند در صورتیکه الگوهای رفتاری شیئی چگونگی همکاری گروهی از اشیاء برای انجام یک وظیفه که یک شیء به تنهایی نمی‌تواند به انجام رساند را شرح می دهد
       

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

    • Abstract Factory
      نمونه ای از کلاس هایی از خانواده های مختلف می سازد
    • Builder
      این الگو برخلاف الگوهای دیگر شی به صورت مرحله به مرحله ساخته می شود و بر چگونگی ساختن شی تاکید دارد
    • Factory Method
    • نمونه ای از کلاس هایی از یک خانواده را می سازد
    • Object Pool
    • زمانی که هزینه ی ساختن شی زیاد است و ما به تعداد زیادی از اشیا از یک کلاس به طور همزمان نیاز پیدا می کنیم  از این الگو استفاده می شود
    • Prototype
    • زمانی که هزینه ساختت شی زیاد است و با به تعدادی از اشیا از کلاس های مختلف نیاز داریم
    • Singleton
    • کنترل می کند که بیشتر از یک نمونه از یک کلاس ساخته نشود

    این مقاله در حال تکمیل است ...

    محمد انصاری

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

    نظرات 0
    برای ارسال دیدگاه وارد حساب کاربری خود شوید.

    ورود به حساب کاربری ایجاد حساب کاربری
    محمد انصاری
    الگوهای طراحی نرم افزار (Software Design Patterns)
    زیگماوب