www.LearnInWeb.com
کاربر گرامی :
برای مشاهده سرفصلهای نرم افزار آموزشی UML Rational Rose روی لینک http://www.learninweb.com/product_detail.php?uid=42 کلیک کنید.
اعداد بين x و y يا اعداد بين z و p با فعال کردن گزينه Aggregate يک رابطه کل به جزء تعريف ميشود. با استفاده از گزينه Static نيز تعيين ميکنيد که صفات ايجاد شده Static هستند يا خير. يک رابطه Friend رابطهاي است که کلاس سرويس گيرنده به صفتات و عملياتهاي غير Public کلاس سرويس دهنده دسترسي دارد. در اين قسمت ميتوانيد فايلهاي مورد نظر خود را به اين کلاس الصاق نمائيد. روي برگه Components کليک کنيد. در اين قسمت مولفههاي موجود در اين نمودار نمايش داده ميشود. در صورتي که جعبه چک Show all Components فعال باشد تمامي مولفهها نمايش داده ميشود در غير اين صورت فقط مولفههاي اين کلاس نمايش داده ميشود. روي دکمه Cancel کليک کنيد. همانطور که بيان شد هفت نوع کلاس مختلف وجود دارد. در اينجا يک مثال جديد ايجاد شده است که هر کدام از اين کلاسها يکي از اين هفت نوع ميباشند. کلاس اول که از نوع Class ميباشد که در اين بخش بررسي شد. بر روي کلاس دوم دابل کليک کنيد تا نوع آن را مشاهده کنيد. مشاهده ميکنيد که در ليست Type گزينه ParameterizedClass انتخاب شده است. يک کلاس پارامتري شده کلاسي است که براي ساخت يک خانواده از کلاسها ي ديگر استفاده ميشود. براي مثال ميتوانيد يک کلاس پارامتري شده به نام List بسازيد و با استفاده از نمونه اين کلاس، کلاسهاي OrderList يا Accountlist را ايجاد کنيد. Documentation نيز مستندات اين آرگمان وارد ميشود. ليست باز شونده Type را باز کنيد. در اين ليست ميتوانيد انوع مختلفي را مشاهده کنيد. روي ميله لغزان سه بار کليک کنيد تا به نوع string برسيم. روي گزينه string کليک کنيد. روي دکمه OK کليک کنيد. به همين صورت ميتوانيد آرگمانهاي ديگري نيز براي اين کلاس تعريف کنيد. با راست کليک کردن بر روي هر آرگمان و انتخاب گزينه Delete نيز آرگمان مورد نظر حذف ميشود. روي دکمه OK کليک کنيد. مشاهده ميکنيد که نام آرگمان در بالاي کلاس نوشته شده است. نوع سوم که توسط فلش مشخص شده است InstantiatedClass نام دارد. اين نوع کلاس يک کلاس پارامتري شده است که به جاي داشتن پارامترهاي رسمي، داراي مقدار واقعي براي آرگمانها است. نوع چهارمClassUtility نام دارد. اين کلاس مجموعهاي از عملگرها است. مثلا" ممکن است که تعدادي توابع رياضي داشته باشيد که در يک سيستم از آنها استفاده ميشود. اين توابع را ميتوانيد در يک ClassUtility قرار دهيد تا توسط کلاسهاي ديگر استفاده شوند. از ClassUtilityها براي ايجاد کلاسهايي که داراي قابليت استفاده مجدد در سيستمهاي ديگر هستند نيز استفاده ميشود. Class از نوع ParameterizedClassUtility ميباشد. اين نوع کلاس يک کلاس پارامتري شده است که شامل مجموعهاي از عملگرها است. Class نيز از نوع InstatiatedClassUtility است. اين نوع کلاس يک کلاس پارامتري شده است که مجموعه مقادير را براي پارامترها دارد. نوع هفتم MetaClass نام دارد. يک MetaClass کلاسي است که نمونههاي آن بجاي اشياء کلاس هستند. MetaClassها داراي متدهايي براي مقداردهي اوليه به متغيرهاي کلاس هستند. اين نوع کلاسها در همه زبانهاي برنامه نويسي وجود ندارند. براي مثال ParameterizedClassUtility مثالي از يک MetaClass است. از Package يا بسته زماني استفاده ميشود که بخواهيد يک سري کلاس را گروهبندي کنيد. اکنون در يک صفحه جديد قرار داريم. براي افزودن يک Package به نمودار کلاس روي ابزار Package کليک کنيد. در محل مشخص شده کليک کنيد تا Package در اين محل قرار داده شود. اکنون يک Package در نمودار قرار داده شده است. در اين Package ميتوانيد يک نمودار کلاس ديگر رسم کنيد. هدف از بسته بندي کلاسها اين است که بهتر بتوانيد سيستم را شناسايي کنيد. براي مثال ميتوانيد يک Package به نام Error Handling ايجاد کنيد و در آن تمامي کلاسهاي مربوط به شناسايي خطا را تعريف کنيد. روي Package ايجاد شده دابل کليک کنيد. اکنون در داخل اين بسته قرار داريد. براي افزودن يک کلاس جديد روي دکمه Class کليک کنيد. در محل مشخص شده کليک کنيد. با اين کار يک کلاس در داخل Package قرار داديم. به همين ترتيب ميتوانيد يک نمودار کلاس ايجاد کنيد. روي علامت + کنار گزينه NewPackage که نام اين بسته ميباشد کليک کنيد. مشاهده ميکنيد که ليست کلاسها و رابطه بين آنها در اين قسمت ذخيره ميگردد. شما اکنون در پايان اين بخش قرار داريد، براي بازگشت به منوي اين بخش روي دکمه مشخص شده کليک کنيد. براي مشاهده اشکالات اين سيستم، منوي Tools را باز کنيد. فصل هفتم - رفتار اشياء – مقدمه تا اينجا به بررسي کلاسها و رابطه بين آنها پرداختيم در اين بخش ميخواهيم به بررسي روش تعريف رفتارهاي يک شئ بپردازيم. به زبان سادهتر در اين بخش ميخواهيم زندگي يک شئ را بدون توجه به اشياء ديگر بررسي کنيم. ميخواهيم به بررسي نمودار حالت بپردازيم. نمودار حالت يا State Diagram تغيير حالت و چرخه زندگي يک شئ منفرد را از زماني که ايجاد ميشود تا زماني که شئ از بين برود نشان ميدهد. در يک پروژه عملي به ازاي هر کلاس يک نمودار تغيير حالت ايجاد نميشود و در بعضي از پروژهها اصلاً از اين نمودار استفاده نميشود. براي آشنايي بيشتر با نحوه رسم اين نمودارها ميخواهيم نمودار حالت مساله توليد کننده و مصرف کننده را رسم کنيم. مساله توليد كننده و مصرف كننده يك پردازش ساده و معروف ميباشد. فرض كنيد كه يك توليد كننده و يك مصرف كننده در يك پردازش همكاري ميكنند تا يك سري عناصر توليد و مصرف شوند. در اين بين از يك بافر جهت سنكرون سازي توليد كننده و مصرف كننده استفاده ميشود. توجه كنيد كه در اين مثال بافر فقط يك مورد را ميتواند در خود ذخيره كند. براي ايجاد يک نمودار حالت ابتدا بايد کلاس آن را ايجاد کنيم. براي ايجاد کلاس Producer روي Class کليک کنيد. در محل مشخص شده کليک کنيد. در ادامه عبارت Producer را وارد ميکنيم. دوباره روي دکمه Class کليک کنيد تا دو کلاس Consumer و Buffer را نيز ايجاد کنيم. به همين ترتيب دو کلاس Consumer و Buffer را رسم ميکنيم. به ياد داريد که در کنار علامت اين کلاس يک مربع سفيد خالي وجود داشت. در اين قسمت آرگمان ورودي کلاس تعيين ميشود. اين آرگمان ميتواند يک نوع داده، يک عبارت ثابت يا يک کلاس ديگر باشد. براي تعيين اين آرگمان روي برگه Detail کليک کنيد. در قسمت Formal Arguments ميتوانيد آرگمان يا آرگمانهاي مورد نظر خود را تعريف کنيد. براي اين کار در قسمت مشخص شده با کادر قرمز راست کليک کنيد. روي گزينه Insert کليک کنيد. اکنون يک آرگمان جديد تعريف شده است و ميتوانيد نام مورد نظر خود را وارد کنيد. در قسمت مشخص شده کليک کنيد تا نام آرگمان از حالت انتخاب خارج شود. براي تعيين نوع اين آرگمان ميتوانيد در رديف اين آرگمان در قسمت ستون Type کليک کنيد. براي آنکه مشخصات بيشتري از اين آرگمان را بررسي کنيم، روي گزينه argname دابل کليک کنيد. در قسمت Name ميتوانيد نام آرگمان را تغيير دهيد. در قسمت Type نيز نوع آرگمان را تعيين ميکنيم. در قسمت Default مقدار پيش فرض آرگمان وارد ميشود. در بخش براي رسم نمودار تغيير حالت شئ Producer بر روي کلاس Producer راست کليک کنيد. منوي فرعي Sub Diagrams را باز کنيد. روي گزينه New Statechart Diagram کليک کنيد. اکنون در صفحه رسم نمودار حالت قرار داريم. شئ توليد کننده در ابتدا يک پردازش انجام ميدهد و وظيفه آن ايجاد يک مورد يا يک Token جديد ميباشد. سپس توليد کننده به يک حالت ديگر ميرود و مورد ايجاد شده را در بافر قرار ميدهد. پس نمودار حالت شئ توليد کننده داراي دو حالت ميباشد. اين دو حالت به ترتيب Processing و Buffering نام دارند. براي رسم حالت Processing روي دکمه State کليک کنيد. در قسمت مشخص شده کليک کنيد. در ادامه عبارت Processing را وارد ميکنيم. همانطور که بيان شد حالت ديگر Buffering نام دارد. براي ايجاد حالت Buffering روي دکمه State کليک کنيد. در محل مشخص شده کليک کنيد. در ادامه عبارت Buffering را وارد ميکنيم. همانطور که بيان شد ابتدا در حالت Processing قرار داريم. براي مشخص کردن يک حالت به عنوان حالت آغازين از ابزار Start State استفاده ميکنيم. بر روي آيکون اين ابزار کليک کنيد. روي حالت Processing کليک کنيد تا اين حالت به عنوان حالت آغازين تعريف شود. در محل مشخص شده توسط فلش کليک کنيد. با اين کار يک Actor در نمودار قرار دادهايم. اين Actor را ميخواهيم Customer نامگذاري کنيم. براي اين کار ميتوانيد در همين محل عبارت Customer را تايپ کنيد. يک راه ديگر نيز استفاده از پنجره مشاهده خصوصيات است. براي اين کار روي Actor دابل کليک کنيد. در ادامه عبارت Withdraw Money را تايپ ميکنيم. توسط UseCase ايجاد شده عمل دريافت پول انجام ميشود. مشاهده ميکنيد که اين UseCase نيز در قسمت Use Case View تعريف شده است. يک UseCase بخش سطح بالايي از عملياتي ميباشد که سيستم اجرا ميکند. براي مثال در سيستم ATM عمل برداشت از حساب توسط يک UseCase انجام ميشود. UseCaseها مستقل از پياده سازي هستند و يک ديد سطح بالا از سيستم را ارائه ميدهند. تمرکز UseCase روي عملياتهايي است که سيستم در انجام ميشود و نيازي به تعريف چگونه انجام اين عمليات نداريم. براي مثال در UseCase برداشت از حساب نيازي نيست که روش ارتباط به پايگاه داده يا نام جدول مورد نظر مطرح گردد. توجه کنيد که تعداد UseCaseها نبايد خيلي زياد باشد که نتوانيم سيستم را به راحتي بررسي کنيم. بايد تعداد آنها در اين حد باشد که بفهميم سيستم چه کاري انجام ميدهد. براي مثال يک سيستم معقول بين تا عدد UseCase دارد. روش حذف UseCase همانند روش حذف Actor ميباشد. پس براي حذف UseCase آن را انتخاب کرده و کليد Delete را فشار دهيم. براي حذف کلي آن نيز UseCase را از قسمت Use Case View انتخاب کرده و راست کليک ميکنيم. با انتخاب گزينه Delete نيز UseCase حذف ميشود. يک Abstract Use Case يک UseCase است که توسط يک Actor شروع به کار نميکند. يعني در نمودار به يک Actor متصل نميباشد و بعضي عملياتهاي مورد نياز توسط بقيه UseCase ها را محيا ميکند. براي مثال يک UseCase جهت شناسايي کاربر و دريافت رمز عبور از کاربر ميتواند بصورت يک UseCase Abstract تعريف شود و توسط UseCase دريافت وجه مورد استفاده قرار بگيرد. در صورتي که جعبه چک Abstract را فعال کنيد اين UseCase يک Abstract UseCase ميگردد. در برگه Diagram ميتوانيد نمودارهاي مختلفي مانند Sequnce، Collaboration، Class و ... را تعريف کنيد و سپس رسم نمائيد. در بخشهاي بعدي به بررسي اين نمودارها ميپردازيم. در برگه Relation نيز تمامي رابطههايي که UseCase در آنها مشارکت دارد نمايش داده ميشود. در مورد رابطهها در انتهاي اين بخش و بخشهاي بعدي صحبت ميکنيم. در برگه Files نيز ميتوانيد فايلهاي مرتبط به اين UseCase مانند سناريوهاي يک UseCase و فايلهاي مرتبط به اين UseCase را به UseCase پيوست نمائيد. روي دکمه OK کليک کنيد. به همين ترتيب پنج UseCase ديگر اين سيستم را نيز رسم ميکنيم. اکنون تا حدودي نمودار UseCase تکميل شده است. روي Actor مشخص شده (Customer) دابل کليک کنيد. مانند UseCase ميتوانيم يک Stereotype را به يک Actor نيز تخصيص دهيم. براي مشاهده ليست Actorها روي ليست باز شونده Stereotype کليک کنيد. در اين ليست انواع Stereotypeهاي موجود را ميتوانيد انتخاب کنيد که با توجه به مفهوم هر کدام از اين دستهها ميتوانيد يک Actor در سيستم باشد. در صورتي که يکي از اين گزينهها را انتخاب کنيد آيکون Actor تغيير ميابد. ميتوانيد يک Stereotype جديد نيز خودتان تعريف کنيد که در اين صورت آيکون Actor به صورت يک چهارگوش که براي نمايش کلاس استفاده ميشود نمايش داده ميشود. روي برگه Detail کليک کنيد. در قسمت Multiplicity تعيين ميکنيد که به چند نمونه از اين عامل احتياج داريد. براي مثال ميخواهيد بدانيد که افراد زيادي هستند که نقش اين Actor را بازي ميکنند ولي فقط يک نفر است که نفش Actor مدير را بازي ميکند براي يادداشت کردن اين موارد از گزينه Multiplicity استفاده ميکنيم. براي مشاهده گزينههاي اين ليست روي ليست کليک کنيد تا باز شود. شرح گزينههاي اين منو را در زير ميتوانيد مشاهده کنيد. گزينه .. به معناي تعداد صفر کاربر ميباشد. گزينه .. به معناي تعداد صفر يا يک کاربر ميباشد. گزينه ..n به معناي تعداد صفر يا بيشتر کاربر ميباشد. گزينه .. به معناي تعداد فقط يک کاربر ميباشد. گزينه ..n به معناي تعداد يک يا بيشتر کاربر ميباشد. روي گزينه n کليک کنيد. با فعال کردن گزينه Abstract يک Abstract Actor ايجاد ميشود. يک Abstract Actor عاملي است که مصداق واقعي ندارد. براي مثال کارمند يک Abstract Actorبراي Actorهاي کارمند ساعتي، کارمند ثابت و کارمند موقتي ميباشد. زيرا هيچکس فقط کارمند نيست يعني يا کارمند ساعتي است يا کارمند ثابت يا کارمند موقت. رابطههاي مربوط به يک Actor را ميتوانيد در برگه Relations مشاهده کنيد. در برگه Files نيز ميتوانيد فايلهاي مورد نظر جهت يک Actor را پيوست نمائيد. روي دکمه OK کليک کنيد. اکنون نوبت به تعيين رابطه بين UseCase و Actor است. روي آيکون Unidirectional Association کليک کنيد. به رابطه بين UseCase و Actor رابطه Communication ميگويند که بصورت يک فلش نمايش داده ميشود. ابتداي فلش نشان دهنده کسي است که ارتباط از آنجا شروع ميشود. براي مثال Actor مشتري آغازگر ارتباط با UseCase برداشت پول است. براي رسم اين فلش ابتدا بر روي Actor مشتري کليک ميکنيم و دکمه ماوس را فشرده نگه ميداريم. سپس ماوس را بر روي UseCase برداشت پول برده و کليد چپ ماوس را رها ميکنيم. به همين ترتيب بقيه رابطهها را نيز رسم ميکنيم. مشاهده ميکنيد که يک UseCase ميتواند آغازگر يک رابطه نيز باشد. در اينجا نمودار UseCase کامل رسم شده است. رابطه uses اجازه ميدهد تايک UseCase از يک UseCase ديگر استفاده کند. براي مثال در ماشين ATM از UseCaseي به نام Withdraw Money براي دريافت پول استفاده ميشود اين UseCase نياز دارد که رمزعبور کاربر را بررسي کند پس ميتوانيم يک UseCase ديگر به نام Verify Password ايجاد کنيم که UseCase اول از اين UseCase استفاده (Uses) ميکند. همانطور که در قبل بيان شد در اين مثال Verify Password يک UseCase Abstract ميباشد. در ادامه يک نمودار جديد رسم ميکنيم که مطالب بيان شده را بررسي کنيم. روي دکمه New کليک کنيد. نوار ابزار اين نمودار که با کادر قرمز مشخص شده است، داراي ابزار به شرح زير است: ) با کليک بر روي فلش ميتوانيد يک آيتم در نمودار را انتخاب کنيد و آن را تغيير مکان دهيد. ) يک متن به نمودار اضافه ميشود. ) از اين ابزار جهت افزودن يادداشت استفاده ميشود. ) جهت رسم يک خط بين يک شئ و توضيات. ) براي رسم يک شئ از اين ابزار استفاده ميکنيم. ) افزودن يک نمونه از يک کلاس در نمودار. ) ايجاد يک مسير براي ارسال پيغام. ( فقط ايجاد مسير) ) امکان فراخواني تابع داخل خود شئ. ) افزودن پيغام بين دو شئ ) افزودن پيغام بين دو شئ با مسير برعکس ) نمايش نحوه جريان اطلاعات بين دو شئ ) نمايش نحوه جريان اطلاعات بين دو شئ ( جهت برعکس) به اين ترتيب هم خودتان ميتوانيد يک نمودار Collaboration رسم نمائيد هم بصورت خودکار ميتوانيد از نمودار Sequence به نمودار Collaboration برسيم. براي مشاهده مشخصات يک شئ روي شئ ATM Screen دابل کليک کنيد. در صورتي که بر روي يک شئ دابل کليک کنيد در هر دو نمودار Sequence و Collaboration اين پنجره ظاهر ميشود. در قسمت Name ميتوانيد نام شئ را تغيير دهيد. در قسمت Class ميتوانيد اين شئ را به يکي از کلاسهاي موجود يا يک کلاس جديد مرتبط کنيد. روي ليست باز شونده Class کليک کنيد. همانطور که قبلا نيز بيان شد در اين قسمت ميتوانيد نام پيغام و مستندات مورد نظر خود را وارد کنيد. روي برگه Detail کليک کنيد. روي دکمه No کليک کنيد. بعد از آنکه کار در حالت Processing به پايان رسيد ميخواهيم وارد حالت Buffering بشويم. براي آنکه يک انتقال از حالت Processing به حالت Buffering ايجاد کنيم. بايد يک خط جهت تغيير حالت رسم کنيم. اين خط State Transition نام دارد. روي ابزار State Transition کليک کنيد. در ادامه يک خط از حالت Processing به حالت Buffering رسم ميکنيم. فصل دوم – استفاده از UseCaseها و Actorها – مقدمه در محل مشخص شده راست کليک کنيد. مشاهده ميکنيد که اطلاعاتي که وارد کرديم در اين پنجره نمايش داده شده است. آيکوني که در ابتداي خط نمايش داده شده است نمايش دهنده انتخاب خصوصيت Private ميباشد. براي حذف يک صفت روي آن راست کليک کرده و سپس گزينه Delete را انتخاب نمائيد. در ادامه به ترتيبي که بيان شد دو صفت Password و Balance را تعريف ميکنيم. اکنون ميتوانيد مشخصات دو صفت ديگر را نيز مشاهده کنيد. روي دکمه OK کليک کنيد. مشاهده ميکنيد که در قسمت مشخص شده توسط فلش خصوصيات هر صفت نمايش داده شده است. آيکوني که در ابتداي هر خط نمايش داده شده است نشان دهنده مقداري است که براي گزينه Export Control انتخاب کردهايد. آيکوني که اکنون نمايش داده شده است نشان دهنده انتخاب گزينه Private ميباشد. در داخل دو علامت << و >> نام Stereotype نوشته شده است. در ادامه نيز نام صفت يک کاراکتر : و نوع آن نمايش داده شده است. در صورتي که مانند صفت آخر مقدار پيش فرض تعيين شده باشد يک کاراکتر = و سپس مقدار وارد شده نمايش داده ميشود. همانطور که مشاهده ميکنيد يک کلاس شامل سه بخش است. بخش اول نام کلاس ميباشد، در بخش دوم صفات نمايش داده شدهاند و در بخش سوم نيز عملياتها نمايش داده ميشوند. عمليات رفتار و عملکرد مربوط به يک کلاس ميباشد. براي مثال کلاس مستطيل داراي صفات طول و عرض ميتواند باشد. يک عمليات به نام محاسبه مساحت تعريف ميکنيم که وظيفه آن برگشت حاصلضرب دو صفت طول و عرض است. پس يک عمليات ميتواند داراي خروجي نيز باشد. عمليات ضرب داراي يک خروجي از نوع عدد ميباشد. پس عملياتها مسئوليتهاي کلاس را تعريف ميکنند. روي گزينه Insert کليک کنيد. روي علامت + کنار گزينه Use Case View کليک کنيد. روي گزينه Main دابل کليک کنيد. مشاهده ميکنيد که سه UseCase و يک Actor رسم شده است. سه رابطه نيز با استفاده از ابزار Unidirectional Association ايجاد شده. در اين مثال همانطور که بيان شد Verify Password مستقيما" توسط يک Actor شروع به کار نميکند و يک عمليات اضافي که توسط Withdraw Money استفاده ميشود را ارائه ميکند. بنابراين Verify Password يک UseCase Abstract است. ميخواهيم رابطه Uses را بين Verify Password و Withdraw Money ايجاد کنيم. براي اين کار روي رابطه بين اين دو UseCase دابل کليک کنيد. ليست باز شونده Stereotype را باز کنيد. با اين کار تعيين کرديم که شئ Test از نوع Class است. روي دکمه OK کليک کنيد. روي دکمه Object کليک کنيد. در اين نمودار يک اشکال وجود دارد و آن اينست که در زمان توليد کد نوع شئ Tes مشخص نيست. هميشه بهتر است که قبل از توليد کد با استفاده از گزينه Check Model واقع در منوي Tools مدل را يک بار بررسي کنيد. فصل چهارم – کلاسها و بستهها – مقدمه در اين بخش ميخواهيم به بررسي کلاسها و نمودار کلاس بپردازيم ولي در اين بخش تمامي اين مطالب را بررسي نميکنيم. با استفاده از مطالب اين بخش و دو بخش بعدي ميتوانيد نمودار کلاس را به خوبي رسم کنيد. پس در پايان اين بخش انتظار نداشته باشيد که بتوانيد يک نمودار کلاس کامل رسم کنيد. مشاهده ميکنيد که گزينه Uses در اين ليست وجود ندارد. در ادامه عبارت uses را تايپ ميکنيم. دکمه enter صفحه کليد را فشار دهيد. روي دکمه OK کليک کنيد. با اين کار در بالاي فلش رابطه عبارت extend نمايش داده شده است. ميتوانيد بر هر عنصر در نمودار UseCase يا براي نمودار UseCase يک نکته يا يادداشت نيز قرار دهيد. براي اين کار روي دکمه Note کليک کنيد. در محل مشخص شده توسط فلش کليک کنيد. در داخل عنصر Note کليک کنيد. در ادامه يک عبارت بعنوان يادداشت براي نمودار وارد ميکنيم. اين يادداشت براي کل نمودار است. با استفاده از ماوس نيز ميتوانيد ابعاد آن را تغيير دهيد. در صورتي که بخواهيد نشان دهيد اين يادداشت براي يک UseCase يا Actor ميباشد بايد ابزار Anchor Note to Item که با کادر قرمز مشخص شده است را انتخاب کرده و يادداشت و عنصر مورد نظر را به هم متصل کنيد. اين اتصال توسط يک خط چين نمايش داده ميشود. شما اکنون در پايان اين بخش قرار داريد، براي بازگشت به منوي اين بخش روي دکمه مشخص شده کليک کنيد. پس در ابتدا توليد كننده در حالت Processing قرار دارد يعني در حال پردازش و توليد يك مورد جديد ميباشد. زماني كه يك مورد جديد توليد شد، توليد كننده از اين حالت خارج ميشود تا به حالت Buffering برود. در اين زمان مورد توليد شده را در بافر قرار ميدهد. زمان خروج از حالت Processing رويداد ItemReady توليد ميشود. توليد اين رويداد باعث ميشود تا بافر متوجه شود كه يك داده توليد شده است و آماده ورود به بافر است. براي ايجاد اين رويداد بر روي حالت Processing دابل کليک کنيد. در اين قسمت ميتوانيد نام و Stereotype اين حالت را تغيير دهيد. براي آنکه توليد رويداد ItemReady در زمان خروج از اين حالت را ايجاد کنيم روي برگه Actions کليک کنيد. در قسمت مشخص شده راست کليک کنيد. روي گزينه Insert کليک کنيد. روي گزينه ايجاد شده دابل کليک کنيد. در قسمت When زماني که اين فعاليت توليد ميشود را بايد انتخاب کنيم. روي ليست باز شونده When کليک کنيد. چون ميخواهيم در زمان خروج از اين حالت اين فعاليت توليد شود، روي گزينه On Exit کليک کنيد. در قسمت Type نوع فعاليت توليد شده را مشخص ميکنيم. ليست باز شونده Type را باز کنيد. مشاهده ميکنيد که دو گزينه وجود دارد. توسط گزينه اول يک فعاليت ساده ايجاد ميشود ولي توسط گزينه دوم يک فعاليت ايجاد ميشود که باعث شروع يک رويداد ميگردد. روي گزينه Send Event کليک کنيد. در قسمت Name نام اين فعاليت نوشته ميشود در جعبه متن Name کليک کنيد. در ادامه عبارت ItemReady را تايپ ميکنيم. در دو جعبه متن زير ميتوانيد پارامترها و مقصد ارسال اين رويداد را تعيين کنيد. مقصد اين رويداد هر شئي ميتواند باشد. بعد از ورود اين دو جعبه متن مطابق با زمان مدل سازي UML نوشته زير ايجاد ميشود: Action ^target.someEvent (args) در ادامه در قسمت Send target عبارت Buffer را وارد ميکنيم. روي دکمه OK کليک کنيد. مشاهده ميکنيد که فعاليت مورد نظر ايجاد شده است. روي دکمه OK کليک کنيد. مشاهده ميکنيد که نوشته مربوط به Action در زير دايره مشکي که نشان دهنده حالت اوليه است قرار گرفته است. در ادامه مقداري محل قرار گيري دايره مشکل را با استفاده از ماوس تغيير ميدهيم. عبارت exit/^Buffer.ItemReady نشان دهنده اين است که در زمان خروج از اين حالت رويداد ItemReady شئ Buffer فراخواني ميشود. وجود کاراکتر ^ نشان دهنده نوع send event ميباشد. بعد از آنکه در حالت Buffering قرار گرفتيم دوباره به حالت اوليه Processing برميگرديم. براي آنکه اين دو فلش بر روي هم قرار نگيرند بر روي وسط فلش قبلي کليک ميکنيم و محل آن را مقداري تغيير ميدهيم. براي آنکه فلش مربوط به اين عمل را رسم کنيم روي دکمه State Transition کليک کنيد. در ادامه يک فلش از حالت Buffering به Processing رسم ميکنيم. با راست کليک کردن بر روي هر کدام از نمودارها يک منو ظاهر ميشود که با استفاده از آن ميتوانيد نمودار را تغيير نام دهيد يا آن را حذف کنيد. روي آيکون نمودار Collaboration دابل کليک کنيد. روي خط ارتباط دهنده بين دو شئ Card Reader و Customer Account دابل کليک کنيد. مشاهده ميکنيد که در اين قسمت ميتوانيد نحوه رابطه بين دو شئ را تعيين کنيد. در مورد رابطهها و تعريف آنها در بخش آينده بررسيهاي لازم را انجام ميدهيم. روي دکمه Cancel کليک کنيد. روي خط پيغام Eject Card که شماره ميباشد دابل کليک کنيد. مشاهده ميکنيد که اين پنجره مشابه پنجره خصوصيات يک پيغام در نمودار Sequence است روي دکمه Cancel کليک کنيد. پس زمان خروج از حالت Processing رويداد ItemReady توليد ميشود. توليد اين رويداد باعث ميشود تا بافر متوجه شود كه يك داده توليد شده است و آماده ورود به بافر است. در اين حالت توليد كننده بايد منتظر دريافت توسط بافر شود. براي آنكه توليد كننده متوجه شود تا بافر خالي شده است يا خير براي خروج از حالت Buffering نياز به وجود رويداد Buffered دارد. مشخص است كه اين رويداد بايد توسط بافر زماني كه عمل بافر انجام شده است، توليد شود. زماني كه رويداد Buffered بوجود آمد توليد كننده موفق به انتقال داده خود به بافر شده است و دوباره به حالت Processing ميرود و آماده توليد داده جديد ديگري ميشود. در ادامه با بررسي نمودار حالت بافر نحوه توليد رويداد Buffered و نحوه مصرف رويداد IteamReady را بيشتر بررسي ميكنيم. در نتيجه اکنون بايد در اين نمودار تعريف کنيم تا زماني که رويداد Bufferd ايجاد شد بايد به حالت Processing برويم. روي Transition حرکت از حالت Buffering به Processing دابل کليک کنيد. در اين قسمت ميتوانيد رويدادي را تعريف کنيد که در زماني که اين انتقال صورت ميگريد توليد شود. روي برگه Detail کليک کنيد. در قسمت Guard Condition يک شرط وارد ميشود. تا زماني که اين شرط برابر درست نشود تغيير حالت صورت نميگيرد. در قسمت Action عبارت Buffered را وارد ميکنيم تا نشان دهيم که اين Transition زماني انجام ميشود که شئ Buffer رويداد Buffered را توليد کرده است. زماني که Action مورد نظر انجام شد ميتواند يک رويداد نيز توليد شود. در سه قسمت بعدي به ترتيب نام رويداد، پارامتر ورودي و محل ارسال آن تعيين ميشود. در دو قسمت From و To نيز مبدا و مقصد انتقال مشخص ميگردد. روي دکمه OK کليک کنيد. زماني كه رويداد Buffered بوجود آمد توليد كننده موفق به انتقال داده خود به بافر شده است و دوباره به حالت Processing ميرود و آماده توليد داده جديد ديگري ميشود. اين نمودار حالت يک نمودار حالت ساده است که داراي دو حالت بيشتر نميباشد. در صورتي که نمودار حالتي که ايجاد ميکنيد پيچيده باشد ميتوانيد چندين حالت مختلف را درون يک حالت قرار دهيد. در صورتي که يک حالت بصورت بازتابي به خودش دوباره برگردد از دکمه مشخص شده توسط کادر قرمز يعني دکمه Transition to self استفاده ميکنيم. در اين مثال تا بينهايت اين سيستم ادامه دارد در صورتي که يک سيستم در حالتي به پايان برسد با استفاده از دکمه End State که توسط کادر قرمز مشخص شده است حالت پاياني را تعيين ميکنيم. توجه کنيد که Start State و End State لازم نيست که حتماً در داخل يک حالت قرار بگيرند بلکه ميتوانند در خارج از حالت قرار داشته باشند و توسط يک State Transition به حالتهاي ديگر متصل شوند. روي دکمه Close کليک کنيد. براي يک شئ ميتوانيد چندين نمودار حالت نيز ايجاد کنيد. براي مثال روي شئ Producer راست کليک کنيد. منوي فرعي Sub Diagrams را باز کنيد. مشاهده ميکنيد که نمودار رسم شده تحت عنوان يک گزينه جديد در اين منو نمايش داده شده است. با کليک بر روي گزينه اول ميتوانيد يک نمودار StateChart ديگر نيز رسم کنيد. کليد Escape را فشار دهيد تا اين منو بسته شود. به همين ترتيب ميتوانيد دو نمودار حالت براي دو شئ Consumer و Buffer رسم کنيد. اکنون اين دو نمودار حالت را رسم کردهايم. براي آنکه مساله توليد کننده و مصرف کننده را بهتر متوجه شويد. اين دو نمودار حالت را ميخواهيم مشاهده کنيم. اکنون نمودار حالت بافر را مشاهده ميكنيد. ابتدا بافر در حالت Empty قرار دارد. در اين حالت بافر خالي ميباشد و آماده دريافت از توليد كننده است. همانطور كه در بررسي نمودار حالت توليد كننده بيان شد، زماني كه يك مورد توسط توليد كننده، ايجاد شود رويدادItemReady توليد ميشود. بافر نيز با دريافت اين رويداد به حالت Seized ميرود و رويداد Buffered را نيز توليد ميكند. اكنون بافر اشغال شده و داده توليد شده توسط توليد كننده را دريافت كرده است. توليد كننده نيز طي دريافت رويداد Buffered متوجه دريافت توسط بافر ميگردد و با توجه به نمودار حالت خود ميتواند از حالت Buffering خارج شود. در اين زمان بافر اشغال شده است و منتظر دريافت درخواست از طرف مصرف كننده ميباشد تا بافر خالي شود. همانطور كه بيان شد مصرف كننده نيز زماني كه ميخواهد از بافر استفاده كند، رويداد NeedItemرا توليد ميكند. بافر زماني كه اشغال است با دريافت اين رويداد خالي ميشود و رويداد BufferReleased را توليد ميكند تا مصرف كننده متوجه دريافت اطلاعات شود و بتواند از حالت Buffering دوباره به حالت Processing برود. در ادامه به بررسي دو حالت خاص از اين صورت مساله ميپردازيم. در حالت اول فرض ميكنيم كه بافر خالي و مصرف كننده درخواست دريافت از بافر را دارد. در حالت دوم نيز فرض بر اين است كه بافر پر است و توليد كننده ميخواهد مورد ديگري را در بافر قرار دهد. اگر مصرف كننده تقاضاي دريافت از بافر را داشته باشد ولي بافر خالي باشد مصرف كننده رويداد NeedItem را توليد ميكند و در حالت Buffering منتظر ميماند تا رويداد BufferReleased توليد شود. براي آنكه اين رويداد توليد شود لازم است كه به ترتيب ابتدا توليد كننده يك مورد توليد كند و سپس بافر با دريافت رويداد توليد توسط توليد كننده وارد حالت Seized بشود. در ادامه نيز با توجه به اينكه رويداد NeedItem توسط مصرف كننده توليد شده است بافر از حالت Seizedخارج ميشود و رويدادBufferReleasedتوليد ميگردد. حال مصرف كننده ميتواند از حالت Buffering خارج شده و براي دريافت مجدد از بافر آماده گردد. در حالت دوم ممكن است زماني كه بافر پر است توليد كننده بخواهد دوباره يك مورد ديگر را در بافر قرار دهد. در اين حالت لازم است كه توليد كننده از حالت Processing به حالت Buffering برود. با اين كار رويداد ItemReady توليد ميشود و به حالت Buffering ميرود. براي خروج از حالت Buffering لازم است كه رويداد BufferFree روي دهد. يعني بافر تا زماني كه اين رويداد توليد نشود در اين حالت باقي ميماند. رويداد BufferFree نيز فقط زماني توليد ميشود كه بافر خالي شود و رويداد ItemReady را دريافت كند. پس زماني كه بافر پر باشد و توليد كننده بخواهد دادهاي را در بافر قرار دهد بايد منتظر شود تا بافر خالي گردد. شما اکنون در پايان اين بخش قرار داريد، براي بازگشت به منوي اين بخش روي دکمه مشخص شده کليک کنيد. اکنون نمودار بهتر نمايش داده شده است. با استفاده از شمارهها و پيغامها ميتوانيد همان سناريوي برداشت . تومان توسط مشتري را بررسي کنيد. در اين نمودار شئ Customer با شئ Card Reader در ارتباط است. در قسمت مشخص شده مشاهده ميکنيد که اين ارتباط دو طرفه نيست و فقط Customer به Card Reader پيغام ارسال ميکند. پيغام دوم توسط Card Reader به Card Reader ميرسد. يعني اين شئ يکي از توابع خود را فراخواني ميکند. به همين ترتيب ميتوانيد نحوه ارتباط بين اشياء را مشاهده کنيد. براي مثال دو شئ Customer و ATM Screen شش نوع پيام رد و بدل ميکنند. روي گزينه Check Model کليک کنيد. مشاهده ميکنيد که در اين مدل خطا وجود دارد. براي مشاهده خطا بايد پنجره Log را مشاهده کنيد. روي دکمه OK کليک کنيد. منوي View را باز کنيد. روي گزينه Log کليک کنيد. اين خطا نشان دهنده اين است که شئ Test به هيچ کلاسي نگاشت نشده است. شما اکنون در پايان اين بخش قرار داريد، براي بازگشت به منوي اين بخش روي دکمه مشخص شده کليک کنيد. فصل هشتم - نمودار Component – مقدمه نمودار مولفه يا Component بر روي سازماندهي فيزيکي سيستم متمرکز ميباشد. در اين قسمت Componentهاي سيستم را مشخص ميکنيم. يک Component يک ماژول فيزيکي کد است که ميتواند حاوي Source کد و فايلهاي زمان اجرا باشد. براي مثال در زبان C++ هر کدام از فايلهاي .H و .CPP يک Component جداگانه هستند. يک فايل EXE که بعد از کامپايل ايجاد ميشود نيز يک مولفه جداگانه است. در نمودار Component، Componentهاي مختلف و رابطه بين آنها نمايش داده ميشود. براي ايجاد يک نمودار Component روي دکمه Browse Component Diagram کليک کنيد. در صورتي که نمودار Componentي براي اين سيستم رسم شده باشد در اين ليست نمايش داده م