موتور جستجوی پیشرفته مقالات و تحقیقات و ...

تحویل در محیط ورد : word
عنوان :

عنوان سفارش :
تعداد صفحه :
قیمت :
تومان

  • الگوهای طراحی (Design Pattern)
  • در مهندسی نرم‌افزار، الگوی طراحی (Design Pattern) یک راه‌حل عمومی قابل تکرار برای مشکلات متداول در زمینه طراحی نرم‌افزار است. الگوی طراحی، یک طراحی تمام‌شده نیست که به صورت مستقیم بتواند تبدیل به کد منبع یا ماشین شود؛ بلکه، یک توضیح یا قالب برای حل یک مسئله در شرایط مختلف است. الگوها در واقع بهترین روش ممکن هستند که یک برنامه‌نویس می‌تواند در هنگام طراحی یک برنامه برای حل مشکلاتش از آن‌ها استفاده کند. الگوهای طراحی شیءگرا نوعاً نشان‌دهندۀ روابط و تعامل‌ها بین کلاس‌ها و شیء‌ها هستند، بدون این‌که کلاس‌ها یا اشیا نهایی برنامه را مشخص کند. الگوهایی که در خود وضعیت‌های تغییرپذیر دارند، شاید مناسب زبان‌های برنامه‌نویسی تابعی نباشند. هم‌چنین، در بعضی از زبان‌ها که برای حل یک مسئله راه‌حل‌های آمادۀ از پیش تعریف‌شده وجود دارد، استفاده از بعضی الگو‌ها برای حل مسئلۀ مشابه می‌تواند لازم نباشد. به همین ترتیب، الگوهای طراحی شیء‌گرا ممکن است برای زبان‌های غیر شیءگرا مناسب نباشند.

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

  • تاریخچه
  • بحث Design Pattern برای اولین بار در دنیای نرم‌افزار توسط GoF صورت گرفت. یک گروه چهار نفره شامل: Erich Gamma ،Richard Helm ،Ralph Johnson و John Vlissides ملقب به Gang of Four یا GoF هستند. این گروه در ۲۱ اکتبر سال ۱۹۹۴ کتابی را تحت عنوان Design Patterns: Elements of Reusable Object-Oriented Software منتشر کردند. (این کتاب تا تاریخ آوریل ۲۰۰۷، سی و ۶ بار تجدید چاپ شده است) آنها در این کتاب ۲۳ الگوی طراحی کلاسیک را با زبان‌های شی گرا مطرح در آن زمان (++C و Smalltalk) برای اولین بار مورد بحث قرار دادند.

  • کاربرد
  • الگوهای طراحی می‌توانند سرعت فرآیند توسعۀ نرم‌افزار را با فراهم آوردن الگوهای توسعۀ اثبات‌شده و مورد آزمون قرار گرفته افزایش دهند.[۱] طراحی نتیجه‌بخش نرم‌افزار نیازمند درنظر گرفتن پیامدهایی است که ممکن است هنوز در پیاده‌سازی قابل رؤیت نباشند، اما بعدها خود را نشان خواهند داد. استفاده از الگوهای طراحی کمک می‌کند تا از بروز خطاهای کوچک که ممکن است مشکلات بزرگی را ایجاد کنند، جلوگیری شود و علاوه بر آن، خوانایی کد را برای کدنویسان و معمارانی که با الگوها آشنا هستند، افزایش می‌دهد. برای دست‌یافتن به انعطاف‌پذیری در نرم‌افزار، الگوهای طراحی اغلب اعمال را به صورت غیرمستقیم انجام می‌دهند. این کار در شرایطی ممکن است طراحی حاصل را پیچیده کند و باعث افت کارایی برنامه شود.

    طبق تعریف، برای استفاده از الگوها در هر برنامه‌ای که از آن‌ها استفاده می‌کند، باید از نو برنامه‌نویسی کرد. از آن‌جایی که بعضی از نویسندگان این نکته را مخالف با en:Code reuse آن‌گونه که توسط مهندسی نرم‌افزار بر پایه پیکرپار فراهم می‌شود، می‌بینند، پژوهش‌گران تلاش کرده‌اند تا الگوها را به پیکرپارها تبدیل کنند. میر و آرنوت توانستند دو سوم الگوهایی را که رویشان کار می‌کردند، به صورت کامل یا جزئی به پیکرپار تبدیل کنند(2). تکنیک‌های طراحی نرم‌افزار را به سختی می‌توان در گسترۀ وسیع‌تری از مسائل به کار برد. الگوهای طراحی راه‌حل‌هایی کلی را در قالبی بیان می‌کنند که وابسته به مسئلۀ مخصوصی نیست. گاهی اوقات برنامه‌نویسان هنگام طراحی و یا پیاده سازی برنامه‌های خود، با کلاس‌هایی روبرو می‌شوند که اصطلاحاً کلاس‌های کلاسیک نیستند. این گونه کلاس‌ها مشکلاتی را ایجاد می‌کنند که با کمک الگوها می‌توان مشکلات را تا حجم قابل قبولی حل کرد. در واقع طراحی چنین کلاس‌هایی، به مرور زمان، گریبان‌گیر هر برنامه نویسی شده‌است و برنامه نویسان خبره با توجه به تجربیات شخصی خود و دیگران، تصمیم به ایجاد الگوهایی کرده‌اند که راه حل این گونه مشکلات خواهد بود. در حال حاضر شاید در حدود صدها الگو در این رابطه وجود داشته باشد که تنها تعداد اندکی از آن‌ها استاندارد شده و مورد استفاده طراحان و برنامه‌نویسان قرار می‌گیرد.

    انواع الگوهای طراحی یا Design Pattern

    به دليل اين که الگوهاي طراحي فراواني وجود دارد نياز به شيوه اي جهت سازماندهي آن ها داريم . اين بخش الگوهاي طراحي را به گونه اي طبقه بندي مي کند که بتوانيم به خانواده هاي الگوهاي مربوطه ارجاع نمائيم . اين طبقه بندي به شما کمک مي کند الگوهاي موجود را سريعتر بياموزيد. ما با دو ضابطه الگوهاي طراحي را طبقه بندي مي کنيم . ضابطه ي اول که هدف ناميده مي شود منعکس کننده کار الگو است . الگوها مي توانند داراي اهداف آفرينش(creational) ، ساختاري(structural) يا رفتاري(behavioral) مي باشند . الگوهاي آفرينش به فرآيند ايجاد اشیا مربوط مي شوند . الگوهاي ساختاري به ترکيب کلاس ها يا اشیا مي پردازند . الگوهاي رفتاري شيوه هايي را که در آن ها کلاس ها يا اشیا تعامل مي کنند را مشخص کرده و وظایف را توزيع مي کنند .ضابطه دوم که حوزه(Scope) ناميده مي شود و مشخص مي کند که الگو در مرحله نخست در کلاس ها يا اشیا به کار مي رود . الگوهاي کلاس به روابط ميان کلاس ها و کلاس هاي فرعي آن ها مي پردازد . اين روابط به گونه اي از طريق وراثت مستقر مي گردند که در زمان کامپايل ايستا باشند . الگوهاي شی به روابط اشیا مي پردازند که مي تواند در حين اجرا تغيير کنند و پوياتر هستند . تقريبا کليه الگوها تا حدي از وراثت استفاده مي کنند . توجه داشته باشيد اغلب الگوها در حوزه شی قرار مي گيرند الگوهاي کلاس آفرينش بخشي از آفرینش اشیا را به کلاس هاي فرعي واگذار مي کنند ، در حاليکه الگوها ي شی آفرينشي آن را با شی ديگري تعويض مي کنند. الگوهاي کلاس ساختاري از وراثت جهت ساختن کلاس ها استفاده مي کنند، در حاليکه الگوهاي شی ساختاري به شرح راه هايي جهت نصب اشیا مي پردازد. الگوهاي کلاس رفتاري از وراثت جهت توصيف الگوريتم ها و جريان کنترل استفاده مي کنند ، در حاليکه الگوهاي شی رفتاري شرح مي دهند که چگونه يک گروه از اشیا جهت انجام وظيفه اي که هيچ شی منفردي قابل به انجام آن نيست مشارکت مي کنند. شيوه هاي ديگري جهت سازماندهي الگوها وجود دارد. اغلب بعضي از الگوها با يکديگر استفاده مي شوند . به عنوان مثال ، اغلب Composite با Iterator يا Visitor استفاده مي شود . بعضي الگوها جايگزين هستند : اغلب الگو ي Prototype جايگزين Abstract Factory است . بعضي الگوها با وجود آن که داراي هدف هاي متفاوتي هستند به طراحي مشابه منجر مي شوند .به عنوان مثال ، نمودارهاي ساختار Composite و Decorator مشابه هستند .روشن است که راههاي بسياري براي سازماندهي الگوهاي طراحي وجود دارد. داشتن چندين راه براي فکر کردن درباره الگوها ، بينش شما را در مورد اين که آنها چه کاري انجام مي دهند، چگونه مقايسه مي شوند و چه وقت به کار گرفته مي شوند، عميق تر مي کند.

  • در ادامه به معرفی کوتاهی در باره ی الگوهای طراحی می پردازیم :
  • Abstract Factory: خانواده هایی از اشیا که اعضای خانواده به یکدیگر مرتبط هستند را تولید می کند.
      1. Adapter: اینترفیسی ایجاد می کند که کلاس هایی که با هم مرتبط نیستند بتوانند با یکدیگر کار کنند.
      2. Bridge" جدا ساختن قسمت پیاده سازی از قسمت انتزاعی یک کلاس برای این که دو طرف بتوانند به راحتی و مستقلا تغییر کنند.
      3. Builder: ساخت يک شی پيجيده را به گونه اي از نمايش آن مجزا مي کند که همان فرآيند ساخت مي تواند نمایش های متفاوتی ایجاد کند.
      4. Chain of Responsibility: در قالب یک زنجیره از اشیا به درخواست کاربر پاسخ می دهد.
      5. Command: مشخص می کند که یک عملیات(operation) چگونه انجام شود و انجام آن ها را مدیریت می کند.
      6. Composite: اشیا را در ساختارهاي درختي ترکيب مي کند. Composite به کاربران اجازه مي دهد با اشیا منفرد و اشیا ترکيبي به طور يکسان برخورد کنند.
      7. Decorator: مسؤوليت هاي اضافي را به طور ديناميک به يک شی ضميمه مي کند . Decorator ها جايگزيني انعطاف پذير جهت طبقه بندي فرعي براي توسعه عملکرد مهيا مي کنند .
      8. Facade: اینترفیسي يکنواخت براي مجموعه ميانجي هاي موجود در يک کلاس فرعي مهيا مي کند . نماي خارجي، اینترفیس سطح بالاتري را تعريف مي کند که استفاده از سيستم فرعي را ساده تر مي کند .
      9. Factory Method: يک اینترفیس جهت ايجاد يک شی تعيين مي کند ، ولي اجازه مي دهد کلاس هاي فرعي تصميم بگيرند کدام کلاس را معرفي کند
      10. Flyweight: زمانی استفاده می شود که تعداد اشیا بسیار زیاد باشد و مدیریت آنها سخت باشد.
      11. Interpreter: جهت تعریف گرامرهای یک زبان و تفسیر جملات استفاده می شود که تنها در طراحی کامپایلرها کاربرد دارد.
      12. Iterator: شيوه اي جهت دسترسي به عناصر يک شی بهم پيوسته به طور متوالي تدارک مي بيند بدون اين که نمايش موجود را دچار مخاطره کند .
      13. Mediator: شیئی را تعيين مي کند که چگونگي تعامل يک مجموعه اشیا را در یک محفظه قرار مي دهد. همچنین باعث می شود که اشیا به طور دو به دو کمتر با هم ارتباط داشته باشند و پدیده ی coupling کمتر شود.
      14. Memento: حالت دروني يک شی را به گونه اي دقيق ذخیره می کند که بعدا بتوان شی را به اين حالت بازگرداند.
      15. Observer: يک وابستگي يک به چند ميان اشیا را به گونه اي تعريف مي کند که هنگامي که يک شی تغيير کند کليه موارد وابسته به آن متوجه شده و به طور خودکار بهنگام سازي شوند .
      16. Prototype: برای ساخت و کپی کردن شیئی جدید که خواص شی اصلی را داشته باشد.
      17. Proxy: براي شی ديگر يک جانشين يا جاي گيرنده فراهم مي کند تا چگونگي دسترسي به آن را کنترل کند .
      18. Singleton: تضمين مي کند که يک کلاس فقط يک نمونه داشته باشد ، و يک نمونه ي کلي جهت دسترسي به آن را مهيا کند .
      19. State: به يک شی اجازه مي دهد هنگامي که حالت دروني آن تغيير کرد رفتار خود را عوض کند . به نظر مي رسد که شی کلاس خود را عوض مي کند .
      20. Strategy: يک خانواده از الگوريتم ها را تعريف کرده ، هر يک را در پوشش قرار داده و آن ها را قابل تعویض مي سازد . استراتژي اجازه مي دهد الگوريتم به طور مستقل از کاربران که از آن استفاد مي کنند متفاوت باشد .
      21. Template Method: اسکلت بندي الگوريتم در يک عمليات را تعريف کرده ، پیاده سازی بعضي مراحل را یه کلاس های فرعی می سپارد. همچنین به کلاس هاي فرعي مجال مي دهد بعضي مراحل يک الگوريتم را بدون تغيير ساختار الگوريتم دوباره تعريف کند .
      22. Visitor: ويزيتور به شما مجال مي دهد عمليات جديد را بدون تغيير کلاس هاي عناصري که در آن کار مي کند تغيير دهيد .

    الگوی Singleton

    این الگو یکی از الگوهای سازنده (creational) است و در ساختن اشیا از کلاس ها کاربرد دارد. این الگو یکی از معروف ترین الگوهای مطرح شده توسط Gang of Four است. نکته: کلمه کاربر که در این سری مقالات استفاده می شود به کلاس هایی اطلاق می شود که از کلاس مورد بحث استفاده می کنند و منظور تنها کاربر انسانی نیست و ممکن است که یک زیرسیستم یا یک کلاس و یا حتی تابع main برنامه باشد. حالتی را در نظر بگیرید که کلاسی دارید که می خواهید در کل برنامه خود فقط یک شی از این کلاس ساخته شود و اجازه ساخته شدن نمونه جدید به استفاده کنندگان از این کلاس داده نشود. این عمل در مواقعی بسیار لازم و ضروری است. به طور مثال حالتی را درنظر بگیرید که در برنامه کلاسی وجود دارد که واسط تنظیمات برنامه است یعنی برنامه هنگام لود شدن تنظیمات خود را در آن بارگزاری می کند. حال اگر این شی یک شی در کل برنامه یکتا نباشد و هر بخش از برنامه که بخواهد تنظیمات را بخواند و یا تغییری در آن ایجاد کند مجبور باشد که یک شی جدید از کلاس تنظیمات بسازد مدیریت این اشیا مشکل می شود و همچنین باعث نابه سامانی در تنظیمات خواهد شد. راه حل این مسئله این است که از همان اول کلاس به گونه ای تعریف شود که اجازه ساختن نمونه جدید به کاربران ندهد و تنها کاربران بتوانند یک نمونه از کلاس به وجود آورند. اگر به برخی از قسمت های سیستم عامل ویندوز هم نگاهی بکنیم متوجه می شویم که چنین مکانیزمی در آن تعبیه شده است مثلاً یک سیستم فایل برای مدیریت فایل ها وجود دارد و یا با وجود این که ممکن است چندین پرینتر به کامپیوتر متصل باشد ولی فقط یک printer spooler در سیستم وجود دارد.

  • مجری کارهای پژوهشی عمومی، علمی پژوهشی و مروری
  • کارهای آماری و تجزیه و تحلیل داده
  • تحلیل کمی و کیفی
  • انجام کلیه خدمات نگارش، ترجمه تخصصی ، ویرایش مقاله ها و پایان نامه ها
  • انجام رفرنس نویسی استاندارد با نرم افزار EndNote
  • آماده سازی پاورپوینت مربوط به ارائه در جلسات و همایشها
  • Tel : 09385735506 - 09118370377
    Email : tahghighnet@yahoo.com
    Telegram : @tahghighnet
    Instagram : tahghighnetinsta
    www.tahghigh.net
    2024 - 2007