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

Download Report

Transcript الگوهاي طراحي

‫بسمهتعالي‬
‫فصل سيزدهم‬
‫الگوهاي طراحي‬
‫اهداف جلسه‬
‫‪‬‬
‫بررسی مفاهيم الگوهاي طراحي‬
‫‪‬‬
‫شناخت کاربردهاي الگوهاي طراحي‬
‫‪‬‬
‫آشنايی با چند الگوي طراحي‬
‫‪‬‬
‫آشنايي با ضدالگوها (‪)AntiPattern‬‬
‫‪‬‬
‫معرفي ضدالگوهاي متداول‬
‫‪2‬‬
‫فهرست مطالب‬
‫‪‬‬
‫عوامل ايجاد الگوي طراحي‬
‫‪‬‬
‫ساختارهاي طراحي تکرارشونده‬
‫‪‬‬
‫مفهوم الگوي طراحي‬
‫‪‬‬
‫تاريخچه الگوهاي طراحي‬
‫‪‬‬
‫ساختار الگوي طراحي‬
‫‪‬‬
‫معرفي چند الگو طراحي‬
‫‪‬‬
‫ضدالگوها‬
‫‪3‬‬
‫عوامل ايجاد الگوهاي طراحي‬
‫‪‬‬
‫روشهاااي تحلياال و طراحااي شاايدرا تاکيااد بسااياري باار اسااتفاده ان نمادهااا در‬
‫طراحي دارند‬
‫‪‬‬
‫‪‬‬
‫اما تحليل و طراحي شيدرا تنها رسم نمودار نيست‬
‫‪‬‬
‫‪‬‬
‫نقاشي خوب دليل بر طراحي خوبي نيست!‬
‫طراحي شيدراي خوب نيان به سالها تجربه دارد‬
‫‪‬‬
‫‪‬‬
‫براي مستندساني و ذکر خصوصيات مناسب هستند‬
‫طراحي به اندانه دانستن درامر نبان اهميت دارد‬
‫بيشترين استفاده مجدد در هنگام طراحي اتفاق ميافتد‬
‫‪‬‬
‫مشکالت با تجربه طراحي رفع ميشوند‬
‫‪4‬‬
‫ساختارهاي طراحي تکرار شونده‬
‫‪‬‬
‫ساختارهاي تکرارشونده سيستمهاي شيدرا سبب ارتقاي‬
‫‪‬‬
‫تجريد (‪)Abstraction‬‬
‫‪)Flexibility‬‬
‫انعطاف‬
‫‪‬‬
‫ساختارها به صورت مستقيم استفاده نمود‬
‫پذيري (اين‬
‫توان ان‬
‫اما نمي‬
‫‪)Modularity‬‬
‫واحدبندي (‬
‫شنـاسايي‪ ،‬دستهبندي و استفـاده ان آنهاست‬
‫اصلي‪:‬‬
‫‪ ‬مسئله‬
‫‪‬‬
‫‪‬‬
‫ظرافت (‪)Elegance‬‬
‫که حاوي اطالعات ارنشمند طراحي هستند‬
‫‪5‬‬
‫الگوي طراحي‬
‫‪‬‬
‫تجريدي ان ساختار طراحي تکرارشونده است‬
‫‪‬‬
‫شامل کالس و‪/‬يا اشياء‬
‫‪‬‬
‫وابستگيها (‪)Dependencies‬‬
‫‪‬‬
‫ساختارها (‪)Structures‬‬
‫‪‬‬
‫تعامالت (‪)Interactions‬‬
‫‪‬‬
‫قراردادها (‪)Conventions‬‬
‫‪‬‬
‫نامها و ساختار طراحي را بهصورت صريح تعيين ميکند‬
‫‪‬‬
‫چکيدهاي ان تجربيات طراحي است‬
‫‪6‬‬
‫الگوي طراحي‬
‫(ادامه)‬
‫‪‬‬
‫مجموعهاي ان بهترين تجربيات است‬
‫‪‬‬
‫راهحلي نمونه براي مسئلهاي در نمينه خاص است‬
‫‪‬‬
‫راهي براي تسهيل ارتباطات بين ذينفعان‬
‫‪‬‬
‫الگوها پيدا شدهاند و ابداع نشدهاند‬
‫‪7‬‬
‫تاريخچه الگوهاي طراحي‬
‫‪‬‬
‫‪Christopher Alexander -1964‬‬
‫‪‬‬
‫کتاب معماري و طراحي شهري‬
‫‪‬‬
‫بيان نکاتي در مورد ترکيب شکلها‬
‫‪‬‬
‫نبان الگو‬
‫‪‬‬
‫راهي براي ساختن سريع‬
‫‪8‬‬
‫تاريخچه الگوهاي طراحي‬
‫‪‬‬
‫(ادامه)‬
‫‪Ward Cunningham & Kent Beck -1987‬‬
‫‪‬‬
‫تصميم به استفاده ان ايدههاي الکساندر‬
‫‪‬‬
‫توسعه پنج الگو براي برنامهنويسان مبتدي‬
‫‪‬‬
‫ارائه مقالهاي در اين نمينه در کنفرانس‬
‫‪Smalltalk‬‬
‫‪OOPSLA'87‬‬
‫‪9‬‬
‫تاريخچه الگوهاي طراحي‬
‫‪‬‬
‫(ادامه)‬
‫‪ Ralph Johnson ،Richard Helm ،Erich Gamma -1995‬و‬
‫‪John‬‬
‫‪Vlissides‬‬
‫‪‬‬
‫طراحي نرمافنار‬
‫‪‬‬
‫ارائه کتاب الگوهاي طراحي‬
‫‪10‬‬
‫نمونه الگوي طراحي‬
‫‪11‬‬
‫ساختار الگوي طراحي‬
‫‪‬‬
‫‪‬‬
‫ساااختارهاي متعااددي بااراي بيااان الگوهاااي طراحااي پيشاانهاد شااده‬
‫است‬
‫چهار بخش اصلي هر الگوي طراحي‬
‫‪‬‬
‫نام الگو‬
‫‪‬‬
‫مسئله (شامل اجبارهاي مسئله)‬
‫‪‬‬
‫راهحل‬
‫‪‬‬
‫نتايج و کاربردها‬
‫‪12‬‬
‫ساختار الگوي طراحي‬
‫‪‬‬
‫ساختار پيشنهادي‬
‫(ادامه)‬
‫‪Alexander‬‬
‫‪‬‬
‫نام‬
‫‪‬‬
‫نمينه‬
‫‪‬‬
‫مسئله (اجبارها)‬
‫‪‬‬
‫راهحل (پيکربندي و چگونگي راهحل)‬
‫‪‬‬
‫بيان ارتباط بين نمينه‪ ،‬مسئله و راهحل‬
‫‪13‬‬
‫ساختار الگوي طراحي‬
‫‪‬‬
‫ساختار پيشنهادي‬
‫‪‬‬
‫نام‬
‫‪‬‬
‫عناصر‬
‫‪‬‬
‫توصيف‬
‫‪‬‬
‫نمونهها‬
‫‪‬‬
‫موارد استفاده‬
‫‪‬‬
‫جنئيات‬
‫(ادامه)‬
‫‪Polti‬‬
‫‪14‬‬
‫ساختار الگوي طراحي‬
‫‪‬‬
‫ساختار پيشنهادي‬
‫‪‬‬
‫نام‬
‫‪‬‬
‫طبقهبندي‬
‫‪‬‬
‫منظور‬
‫‪‬‬
‫اسامي مشابه‬
‫‪‬‬
‫انگينه‬
‫‪‬‬
‫کاربرد‬
‫‪‬‬
‫ساختار‬
‫(ادامه)‬
‫‪GoF‬‬
‫‪‬‬
‫شرکاء‬
‫‪‬‬
‫همکاري‬
‫‪‬‬
‫نتايج‬
‫‪‬‬
‫پيادهساني‪/‬نمونه کد‬
‫‪‬‬
‫موارد استفاده‬
‫‪‬‬
‫الگوهاي مرتبط‬
‫‪15‬‬
‫ساختار الگوي طراحي‬
‫‪‬‬
‫نام (‪)Name‬‬
‫‪‬‬
‫‪‬‬
‫(ادامه)‬
‫بطور خالصه و موجن کاربرد الگو را نشان ميدهد‬
‫طبقهبندي (‪)Classification‬‬
‫‪‬‬
‫طبقهبندي براساس کاري که الگو انجام ميدهد‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪ :Creational‬بر روي فرآيند ايجاد اشيا و کالسها تمرکن دارند‬
‫‪ :Structural‬بر روي ترکيب کالسها و اشيا تمرکن دارند‬
‫‪ :Behavioral‬بر روي رفتار کالسها و اشيا و تونيع وظيفه تمرکن دارند‬
‫حونه کاربرد الگوها شامل اشياء و کالسها هستند‬
‫‪16‬‬
)‫(ادامه‬
‫ساختار الگوي طراحي‬
Patterns
Classification
Purpose
Creational
Structural
Behavioral
Scope
Class
Factory Method
Adapter
Interpreter
Template Method
Object
Abstract Factory
Builder
Prototype
Singleton
Adapter
Bridge
Composite
Decorator
Facade
Proxy
Chain of Responsibility
Command
Iterator
Mediator
Memento
Flyweight
Observer
State
Strategy
Visitor
17
‫ساختار الگوي طراحي‬
‫‪‬‬
‫منظور‬
‫‪‬‬
‫‪‬‬
‫(ادامه)‬
‫جمله کوتاهي که جواب به سواالت نير است‬
‫‪‬‬
‫الگو چه کاري انجام ميدهد؟‬
‫‪‬‬
‫علت وجودي الگو چيست؟‬
‫‪‬‬
‫چه مشکل يا مسئله خاصي را حل ميکند؟‬
‫نامهاي مشابه‬
‫‪‬‬
‫در صورتيکه الگو داراي اسامي شناخته شده ديگري است‪ ،‬قيد ميشود‬
‫‪18‬‬
‫ساختار الگوي طراحي‬
‫‪‬‬
‫(ادامه)‬
‫انگينه (‪)Motivation‬‬
‫‪‬‬
‫سناريويي که مشاکل طراحاي و اينکاه چگوناه کالسهاا و اشاياي موجاود‬
‫در الگو مشکل را حل ميکنند را نشان ميدهد‬
‫‪‬‬
‫سناريو کمک ميکند تا درک بهتري ان توصيفاتي مربوط باه الگاو داشاته‬
‫باشيد‬
‫‪‬‬
‫کاربردپذيري (‪)Applicability‬‬
‫‪‬‬
‫وضااعيتي کااه الگااو ميتوانااد بااه کااار باارده شااود و نحااو شناسااايي اياان‬
‫وضعيت‬
‫‪19‬‬
‫ساختار الگوي طراحي‬
‫‪‬‬
‫(ادامه)‬
‫ساختار (‪)Structure‬‬
‫‪‬‬
‫نمايشااي درافيکااي ان کالسهااا در الگااو بااا اسااتفاده ان نماددااذاري‬
‫‪OMT‬‬
‫(‪)Object Modeling Technique‬‬
‫‪‬‬
‫بااراي نمااايش تعااامالت ميتوانيااد ان نمااودار ترتيبااي يااا نمااودار همکاااري‬
‫استفاده نمائيد‬
‫‪‬‬
‫شرکاء (‪)Participants‬‬
‫‪‬‬
‫کالسهااا و‪/‬يااا اشاايايي کااه در الگااوي طراحااي و انجااام وظااايفش مشااارکت‬
‫ميکنند‬
‫‪20‬‬
‫ساختار الگوي طراحي‬
‫‪‬‬
‫همکاري (‪)Collaborations‬‬
‫‪‬‬
‫‪‬‬
‫(ادامه)‬
‫نحو همکاري شرکاء در انجام وظايف الگوي طراحي‬
‫نتايج (‪)Consequences‬‬
‫‪‬‬
‫در اين بخش به سواالت ذيل پاسخ دفته ميشود‬
‫‪‬‬
‫چگونه الگو‪ ،‬اهداف مورد نظر خود را برآورده ميساند؟‬
‫‪‬‬
‫چه تواننها و نتايجي با به کار بردن الگو بدست ميآيد؟‬
‫‪‬‬
‫چه جنبههايي ان ساختار سيستم ميتوانند متفاوت باشند؟‬
‫‪21‬‬
‫ساختار الگوي طراحي‬
‫‪‬‬
‫پيادهساني‬
‫‪‬‬
‫‪‬‬
‫بخشهاي ان کد الگو به نبان ‪ C++‬يا‬
‫‪Smalltalk‬‬
‫استفادههاي شناخته شده‬
‫‪‬‬
‫‪‬‬
‫نکات فني‪ ،‬نقاط ضعف و ديگر نکاتي که بايد در استفاده ان الگو مد نظر‬
‫قرار داد‬
‫نمونه کد‬
‫‪‬‬
‫‪‬‬
‫(ادامه)‬
‫نمونههاي ان الگو در سيستمهاي واقعي‬
‫الگوهاي مرتبط‬
‫‪‬‬
‫الگوهاي که ارتباط ننديکي با الگوي طراحي مورد نظر دارند‬
‫‪22‬‬
‫الگوهاي طراحي ‪Abstract Factory -‬‬
‫‪‬‬
‫منظور‬
‫‪‬‬
‫رابطااااي بااااراي ايجاااااد خااااانوادهاي ان اشااااياي ماااارتبط يااااا وابسااااته باااادون‬
‫مشخصکردن کالسهاي آنها فراهم ميکند‬
‫‪‬‬
‫کاربردپذيري‬
‫‪‬‬
‫وقتااي نميتااوان ساااختار ارتباااطي بااين دروهااي ان کالسهاااي ماارتبط را‬
‫پيشبيني نمود‬
‫‪23‬‬
‫الگوهاي طراحي ‪Abstract Factory -‬‬
‫‪‬‬
‫ساختار‬
‫‪24‬‬
Abstract Factory - ‫الگوهاي طراحي‬
25
‫الگوهاي طراحي ‪Abstract Factory -‬‬
‫‪‬‬
‫نتايج‬
‫‪ ‬انعطافپذيري‬
‫‪ ‬تجريد‬
‫‪ ‬توسعه آن دشوار است‬
‫‪‬‬
‫پيادهساني‬
‫‪‬‬
‫استفاده ان پارامترها راهي براي کنترل اندانه رابط است‬
‫‪‬‬
‫اين الگو در واقع مجموعهاي ان الگوي ‪ Factory Method‬است‬
‫‪26‬‬
‫الگوهاي طراحي ‪Bridge -‬‬
‫‪‬‬
‫منظور‬
‫‪‬‬
‫بااراي جداساااني رابااط مجاارد(منطقااي) ان پيادهسااانياش (فينيکااي) مااورد‬
‫استفاده قرار ميديرد‬
‫‪‬‬
‫کاربردپذيري‬
‫‪‬‬
‫وقتي رابط و پيادهسانياش بايد با يکديگر متفاوت باشند‬
‫‪‬‬
‫وقتي نيان به يک رابط واحد براي تعامل با ديگر کالسها باشد‬
‫‪27‬‬
‫الگوهاي طراحي ‪Bridge -‬‬
‫‪‬‬
‫ساختار‬
‫‪Structure‬‬
‫‪28‬‬
‫الگوهاي طراحي ‪Bridge -‬‬
‫‪‬‬
‫نتايج‬
‫‪ ‬رابط مجرد و پيادهساني ان يکديگر مجنا ميشوند‬
‫‪ ‬پيادهساني ميتواند مجنا و متغير باشد‬
‫‪ ‬رابااط بايااد بهدونااهاي عمااومي باشااد کااه همااه رابطهااايي کااه پيادهساااني‬
‫ميشوند را حمايت کند‬
‫‪‬‬
‫پيادهساني‬
‫‪‬‬
‫تنها يک پيادهسان بايد وجود داشته باشد‬
‫‪‬‬
‫ايجاد پيادهسان صحيح دشوار است‬
‫‪‬‬
‫اشتراک پيادهسانها بايد مد نظر قرار ديرد‬
‫‪29‬‬
‫الگوهاي طراحي ‪Composite -‬‬
‫‪‬‬
‫منظور‬
‫‪‬‬
‫‪‬‬
‫ترکيب اشيا در ساختاري درختي براي نمايش سلسله مراتب‬
‫‪Part-Whole‬‬
‫کاربردپذيري‬
‫‪‬‬
‫وقتي اشيا نيان به ترکيب بهصورت باندشتي (‪ )Recursive‬دارند‬
‫‪‬‬
‫و تفاوتي بين اشياي ترکيبي و ساده وجود ندارند‬
‫‪‬‬
‫و اشيا در ساختار ميتوانند واحد در نظر درفته شوند‬
‫‪30‬‬
‫الگوهاي طراحي ‪Composite -‬‬
‫‪‬‬
‫ساختار‬
‫‪31‬‬
‫الگوهاي طراحي ‪Composite -‬‬
‫‪‬‬
‫کااالس ‪ Graphic‬شااامل مجموعااهاي ان کالسهاااي ديگاار اساات کااه‬
‫تفاوتي با کالس اصلي ندارند‬
‫‪32‬‬
Composite - ‫الگوهاي طراحي‬
‫گره برگ‬
‫گره ترکيبي‬
CORBA Naming Service
33
‫الگوهاي طراحي ‪Composite -‬‬
‫‪‬‬
‫نتايج‬
‫‪ ‬همساني‪ :‬بدون در نظر درفتن پيچيددي همه اشيا يکسانند‬
‫‪ ‬قابليت توسعه‪ :‬مولفههاي جديد براحتي ميتوانند افنوده شوند‬
‫‪ ‬سربار‪ :‬سربار تعداد اشياي جديد را کاهش ميدهد‬
‫‪‬‬
‫پيادهساني‬
‫‪‬‬
‫روشي براي شناسايي والدين و فرنندان بايد استفاده شود‬
‫‪‬‬
‫براي والدين و فرنندان ان يک رابط استفاده ميشود‬
‫‪‬‬
‫حااذف يااک فرننااد مساائوليت دارد! (اياان فرننااد ميتوانااد فرننااداني داش اته‬
‫باشد و سبب ايجاد اشياي يتيم (‪ )Orphan‬شود)‬
‫‪34‬‬
‫الگوهاي طراحي ‪Decorator -‬‬
‫‪‬‬
‫منظور‬
‫‪‬‬
‫‪‬‬
‫افنودن وظيفه جديد به يک شي به صورت پويا‬
‫کاربردپذيري‬
‫‪‬‬
‫وقتي نيان به افنودن وظيفه جديد به يک شي باه صاورت پوياا‪ ،‬شافاف و‬
‫بدون تاثير بر ديگر اشيا باشد‬
‫‪‬‬
‫حذف وظيفه خاصي ان يک شي بهصورت پويا‬
‫‪‬‬
‫وقتي توسعه کالس به نيرکالسها غيرممکن باشد‬
‫‪35‬‬
‫الگوهاي طراحي ‪Decorator -‬‬
‫‪‬‬
‫ساختار‬
‫‪36‬‬
‫الگوهاي طراحي ‪Decorator -‬‬
‫‪‬‬
‫نتايج‬
‫‪ ‬وظايف ميتوانند در نمان اجرا افنوده‪/‬حذف شوند‬
‫‪ ‬موجب کاهش رشد ساختار سلسلهمراتبي ميشود‬
‫‪ ‬سبب انسداد رابط ميشود‬
‫‪ ‬ترکيب ‪ decorator‬ها بسيار دشوار است‬
‫‪‬‬
‫پيادهساني‬
‫‪‬‬
‫مطابقت رابط ‪ decorator‬ها بايد در نظر درفته شود‬
‫‪‬‬
‫براي ‪ decorator‬ان کالسي سبک و مجرد استفاده نمائيد‬
‫‪‬‬
‫در صورتيکه نيان باه افانودن ياک وظيفاه دارياد‪ ،‬نياان باه تعرياف کاالس‬
‫براي ‪ decorator‬نداريد‬
‫‪37‬‬
‫الگوهاي طراحي ‪Mediator -‬‬
‫‪‬‬
‫منظور‬
‫‪‬‬
‫‪‬‬
‫تعريف شيي که چگونگي تعامل بين اشياء ديگر را پنهان ساند‬
‫کاربردپذيري‬
‫‪‬‬
‫وقتااي تعاادادي شااي بااا يکااديگر بهصااورت خوشتعريااف تعاماال دارنااد ام اا‬
‫تعامل آنها پيچيده است‬
‫‪‬‬
‫وقتي استفاده مجدد يک شي بهخاطر تعامل نياد آن با ديگار اشايا دشاوار‬
‫باشد‬
‫‪‬‬
‫وقتي رفتااري باين چناد کاالس تونياع شاده اسات و باياد بادون اساتفاده ان‬
‫نيرکالسها سفارشي شود‬
‫‪38‬‬
‫الگوهاي طراحي ‪Mediator -‬‬
‫‪‬‬
‫ساختار‬
‫‪39‬‬
‫الگوهاي طراحي ‪Mediator -‬‬
‫‪40‬‬
‫الگوهاي طراحي ‪Mediator -‬‬
‫‪‬‬
‫نتايج‬
‫‪ ‬تعداد نيرکالسها را کاهش ميدهد‬
‫‪ ‬اتصال سست بين کالسهاي مجاور را افنايش ميدهد‬
‫‪ ‬ارتباط چند به چند را به ارتباط يک به يک تبديل ميکند‬
‫‪ ‬يک کنترلکننده مرکني ايجاد ميکند‬
‫‪‬‬
‫پيادهساني‬
‫‪‬‬
‫نياااني بااه تعريااف کااالس مجاارد ‪ Mediator‬نيساات نياارا کالسهاااي همکااار‬
‫ميتوانند با يک ‪ Mediator‬کار کنند‬
‫‪41‬‬
‫الگوهاي طراحي ‪Observer -‬‬
‫‪‬‬
‫منظور‬
‫‪‬‬
‫تعريااف يااک رابطااه يااک بااه چنااد بااين اشااياء بصااورتيکه وقتااي يااک ش اي‬
‫حالتش را تغيير ميدهد‪ ،‬بقيه اشيا مطلع شده و برون شوند‬
‫‪‬‬
‫کاربردپذيري‬
‫‪‬‬
‫وقتي تجريدي داراي دو جنبه بوده و يکي به ديگري وابسته باشد‬
‫‪‬‬
‫وقتي تغيير در ياک شاي سابب تغييار ديگار اشايا ميشاود و نميدانياد چاه‬
‫تعداد شي ديگر نيان به تغيير دارند‬
‫‪‬‬
‫وقتي يک شي نيان به مطلع ساختن شي ديگر دارد و در مورد چگاونگي‬
‫آن شي اطالعي ندارد‬
‫‪42‬‬
‫الگوهاي طراحي ‪Observer -‬‬
‫‪‬‬
‫ساختار‬
‫‪43‬‬
‫الگوهاي طراحي ‪Observer -‬‬
‫‪‬‬
‫مثال‬
‫‪44‬‬
‫الگوهاي طراحي ‪Observer -‬‬
‫‪‬‬
‫نتايج‬
‫‪ ‬واحدبندي‪ Subject :‬و ‪Observer‬ها ميتوانند مستقل باشند‬
‫‪ ‬قابليت توسعه‪ :‬ميتوان هر تعداد ‪ Observer‬تعريف نمود‬
‫‪ ‬قابليت سفارشي شدن‪Observer :‬هاي متفاوت‪ ،‬ديدهاي مختلف را نمايش‬
‫ميدهند‬
‫‪ ‬برونرساني غيرمنتظره‪Observer :‬ها اطالعي ان يکديگر ندارند‬
‫‪ ‬سربار برونرساني‪ :‬برونرساني سربار نيادي ايجاد مينمايد‬
‫‪45‬‬
‫الگوهاي طراحي ‪Observer -‬‬
‫‪‬‬
‫پيادهساني‬
‫‪‬‬
‫نگاشاات ‪Subject‬هااا بااه ‪Observer‬هاااي متناظرشااان راهااي ساااده بااراي در‬
‫جريان بودن ‪ Subject‬ان برونرساني ‪ Observer‬است‬
‫‪‬‬
‫ارجاع معلق به ‪Subject‬هاي حذف شده بايد مورد توجه قرار ديرند‬
‫‪‬‬
‫ان پروتکلهااااي برونرسااااني ويااا ه ‪( Observer‬مااادلهاي‬
‫‪and pull‬‬
‫‪)push‬‬
‫اجتناب نمائيد‬
‫‪46‬‬
‫ضدالگوها (‪)AntiPatterns‬‬
‫‪‬‬
‫ايده ضدالگوها ان آنجا ناشي شاده اسات کاه اغلاب کارهااي منتشار‬
‫در مهندسي نرمافنار به راهحلهاي ساننده و موثر تمرکن دارد‬
‫‪‬‬
‫ضدالگوها بر راهحلهاي منفي و ناموفق تمرکن دارند‬
‫‪‬‬
‫ضااادالگو مجموعاااهاي ان راهحلهااااي متاااداول کاااه باااراي حااال ياااک‬
‫مساائله اتفاااق ميافتنااد و بطااورقطعي نتااايج منفااي يااا ناااموفق توليااد‬
‫نمودهاند را توصيف مينمايد‬
‫‪47‬‬
‫ضدالگوها‬
‫‪‬‬
‫(ادامه)‬
‫همانطور که نيان به دانساتن الگوهاا در نميناه خااص وجاود دارد‪،‬‬
‫دانسااتن وجااود يااا عاادم وجااود ضاادالگو ميتوانااد بااه توسااعه بهتاار‬
‫نرمافنار کمک کند‬
‫‪‬‬
‫بسياري ان مهندسان نرمافنار ميخواهند بدانند «آيا راهي که ميروند به‬
‫شکست منجر ميشود»‬
‫‪48‬‬
‫مثالي از ضدالگوها‬
‫‪‬‬
‫در سطح مديريت پرو ه‬
‫‪‬‬
‫پنج پرو ه ان شش پرو ه به شکست منجر شدهاند!‬
‫‪‬‬
‫يک سوم پرو ههاي نرمافناري رها شدهاند!‬
‫‪‬‬
‫بودجه و نمان واقعي انجام پرو ه بيش ان دو برابار ان آنچاه تخماين نده‬
‫ميشود‪ ،‬است!!!‬
‫‪49‬‬
‫مثالي از ضدالگوها‬
‫‪‬‬
‫کار ديروز‬
‫(ادامه)‬
‫‪‬‬
‫بحث امروز‬
‫‪‬‬
‫برنامه‌نويس ي ساختاريافته‬
‫‪‬‬
‫فناوري مولفه‌ها‬
‫‪‬‬
‫طراحي باال به پائين‬
‫‪‬‬
‫اشيا توزيع‌شده‬
‫‪‬‬
‫معماري ‪Client/Server‬‬
‫‪‬‬
‫معماري سرويس‌گرا‬
‫‪‬‬
‫توليد کد از مدل‬
‫‪‬‬
‫استفاده مجدد از نرم‌افزار‬
‫‪‬‬
‫عامل‌هاي نرم‌افزار (‪)Agents‬‬
‫‪‬‬
‫رابط ‪Web‬‬
‫‪50‬‬
‫رابطه بين الگو و ضدالگو‬
‫‪‬‬
‫اغلب الگوهاي طراحي منجر به ضدالگو ميشوند‬
‫‪‬‬
‫برنامهنويسي رويهاي در دهه ‪ 60‬و ‪ 70‬يک الگوي طراحي بود‪ ،‬اماا در‬
‫حال حاضر ضدالگو است‬
‫‪‬‬
‫شيدرايي در حال حاضر يک الگاو اسات‪ ،‬اماا در حاال تباديل باه ضادالگو‬
‫است‬
‫‪-‬‬
‫‪-‬‬
‫‪51‬‬
‫رابطه بين الگو و ضدالگو‬
‫(ادامه)‬
‫زمينه و علل‬
‫مشکل‬
‫راه‌حل ضدالگو‬
‫زمينه و اجبارها‬
‫نشانه‌ها و نتايج‬
‫راهحل‬
‫راهحل جمع‌بندي شده‬
‫مزايا‬
‫نتايج‬
‫راهحلهاي مرتبط‬
‫مزايا‬
‫نتايج‬
‫راهحلهاي‬
‫مرتبط‬
‫‪52‬‬
‫نمونه ضدالگوها‬

The Blob

Golden Hammer

Continuous obsolescence

Dead End

Lava Flow

Spaghetti Code

Ambiguous viewpoint

Input Kludge

Functional decomposition

Walking through a Minefield

Poltergeists

Cut-and-Paste Programming

Boat Anchor

Mushroom Management
53
‫طبقه‌‌بندي ضدالگوها‬
‫‪‬‬
‫ضدالگوهاي توسعه‬
‫‪‬‬
‫ضدالگوهاي معماري‬
‫‪‬‬
‫ضدالگوهاي مديريتي‬
‫‪54‬‬
‫ضدالگوهاي توسعه ‪Lava Flow -‬‬
‫‪‬‬
‫مشکل‬
‫‪‬‬
‫اسااااتفاده ان کااااد قااااديمي و اطالعااااات طراحااااي فراموششااااده در طراحااااي‬
‫دايمالتغيير‬
‫‪‬‬
‫نمونه‬
‫‪‬‬
‫طراح ارشد استعفا نموده است‬
‫‪‬‬
‫طراح جديد روش بهتري ارائه نموده است‪ ،‬اما بادليل عادم آشانايي باا کاد‬
‫نميتواند آنها را حذف نمايد‬
‫‪55‬‬
‫ضدالگوهاي توسعه ‪Lava Flow -‬‬
‫‪‬‬
‫علل‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫تونيع کنترلنشده کدهاي اتمام نشده يا اصالح نشده‬
‫قسمتها و مسيرهايي که براي تست در کاد قارار داده شاده بودناد‪ ،‬حاذف‬
‫نشدند‬
‫شکاف در معماري بخاطر استفاده ان فناوري قديمي‬
‫‪‬‬
‫شااکاف در معماااري وقتااي بوجااود ميآيااد کااه معماااري اوليااه پااس ان شااروع توسااعه‬
‫دچار تغييرات شگرف شود‬
‫‪‬‬
‫فقدان معماري‬
‫‪‬‬
‫فقدان مديريت پيکربندي‬
‫‪56‬‬
‫ضدالگوهاي توسعه ‪Lava Flow -‬‬
‫‪‬‬
‫راهحل‬
‫‪‬‬
‫اسااتفاده ان سيسااتم مااديريت پيکربناادي ساابب ميشااود کااه کاادهاي کهنااه‬
‫شناسايي و حذف شوند‬
‫‪‬‬
‫تکميلنمودن طراحي (قديمي)‬
‫‪‬‬
‫استفاده ان يک معماري سالم براي پيشبردن مراحل توسعه‬
‫‪‬‬
‫استفاده ان رابط در سطح سيستم که خوش‪-‬تعريف‪ ،‬پايا و بدرستي مستند‬
‫شده باشد‬
‫‪57‬‬
‫ضدالگوهاي توسعه ‪Blob -‬‬
‫‪‬‬
‫مشکل‬
‫‪‬‬
‫اسااتفاده ان ساابک طراحااي رويااهاي منجاار بااه ايجاااد تالسااي بااا مساائوليت‬
‫بسيار نياد ميشود‬
‫‪‬‬
‫بقيه تالسها تنها داده نگهداري مينمايند‬
‫‪‬‬
‫اين کالس همان کالسي است که قلب معماري خواهد بود‬
‫‪‬‬
‫اين کالس پردانش و ديگر دادهها را انحصاري مينمايد‬
‫‪58‬‬
‫ضدالگوهاي توسعه ‪Blob -‬‬
‫‪‬‬
‫علل‬
‫‪‬‬
‫فقدان ديدداه معماري شيدرايي‬
‫‪‬‬
‫عدم وجود التنام به معماري‬
‫‪‬‬
‫طراح رويهاي معمار ارشد است‬
‫‪‬‬
‫عدم تمايل توسعهدهنددان در طراحي کالسهاي جديد و تارآمد‬
‫‪‬‬
‫در پرو ههاااي تکااراري افااراد سااعي ميکننااد کااار خااود را افاانايش ندهنااد و تاارجيح‬
‫ميدهند ان کالسهاي قديميتر استفاده نمايند‪ ،‬بدون اينکاه نياان باه ناوآوري داشاته‬
‫باشند‬
‫‪59‬‬
‫ضدالگوهاي توسعه ‪Blob -‬‬
‫‪‬‬
‫راهحل‬
‫‪‬‬
‫تونيع مجدد وظيفهمندي‬
‫‪‬‬
‫جداساني اثر تغييرات‬
‫‪‬‬
‫تعيين يا طبقهبندي خصوصيات و عمليات‬
‫‪‬‬
‫حذف «ارتباطات بسيار دور»‪ ،‬نائد يا غيرمستقيم‬
‫‪‬‬
‫حذف تمام ارتباطات موقت‬
‫‪60‬‬
‫پرسش و پاسخ‬
‫‪61‬‬