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ي براي اين سيستم رسم شده باشد در اين ليست نمايش داده ميشود. اکنون يک نمودار بعنوان main نمايش داده شده است. براي ايجاد يک نمودار جديد روي گزينه New کليک کنيد. روي دکمه OK کليک کنيد. دو ابزار آخر Task Specification و Task Body نام دارند. يک Task براي نمايش Packageي بکار ميرود که رشته کنترلي مستقل دارد. اگر يک Task متفاوت از يک Package کامپال شود ميتوانيد يک فايل تعريف کلاس نيز به Task ارتباط دهيد. يک فايل اجرائي (فايل Exe) معمولاً به عنوان يک Task Specification نمايش داده ميشود. در ادامه ميخواهيم يک مثال خيلي ساده را رسم کنيم. روي ابزار Package Body کليک کنيد. در محل مشخص شده کليک کنيد. تا اين مولفه در نمودار قرار بگيرد. در ادامه عبارت Account را وارد ميکنيم. روي ابزار Package Specification کليک کنيد. در محل مشخص شده کليک کنيد. توجه کنيد که هر Actor بايد داراي يک نام منحصر به فرد باشد يعني دو Actor به يک نام نميتوانيم داشته باشيم. عبارت Customer را تايپ کنيد. روي دکمه OK کليک کنيد. با اين کار يک Actor به نام Customer تعريف شده است. در قسمت مشخص شده با فلش نيز ميتوانيد نام Actor ايجاد شده را در قسمت Use Case View مشاهده کنيد. پس Actor هر کس يا چيزي است که با سيستم موجود در ارتباط ميباشد و بصورت يک نماد آدمک نمايش داده ميشود. بطور کلي سه نوع Actor وجود دارد که عبارت است از کاربران سيستم، سيستمهاي ديگر و زمان که در ادامه اين سه مورد را تعريف ميکنيم. در مثال ATM که در حال رسم نمودارهاي آن هستيم. کاربري که با ATM کار ميکند يعني Customer يک Actor از نوع کاربران سيستم است. براي نامگذاري اين Actor از نقش آن استفاده کردهايم. همانطور که بيان شد يک Actor ديگر نيز به نام کارمند بانک (Bank Officer) نيز در اين سيستم وجود دارد. فرض کنيد که آقاي احمدي کارمند بانک باشد پس در اين سيستم داراي نقش Bank Officer است. در ساعت آقاي احمدي ميخواهد از حساب خود با استفاده از دستگاه ATM وجه دريافت کند در اين زمان آقاي احمدي داراي نقش Customer ميباشد. پس براي نامگذاري Actor ها از نام نقش آنها استفاده ميشود. در محل مشخص شده توسط فلش کليک کنيد. در ادامه عبارت Account را وارد ميکنيم. روي ابزار Task Specification کليک کنيد. در محل مشخص شده کليک کنيد. در ادامه عبارت ATMServer.Exe را وارد ميکنيم. در صورتي که بخواهيد يکي از اين مولفهها را از نمودار حذف کنيد بر روي آن مولفه کليک کنيد و سپس کليد CTRL+D را فشار دهيد. اکنون ميخواهيم رابطه بين اين مولفهها را تعيين کنيم. روي ابزار Dependency کليک کنيد. در ادامه رابطههاي لازم را با استفاده از ماوس رسم ميکنيم. تنها رابطهاي که بين مولفههاي داخل نمودار Component ميتوان تعيين کرد رابطه Dependency است. يک رابطه Dependency نشان ميدهد که يک Component بايد قبل از ديگري کامپايل شود. در اين نمودار ميتوانيد رابطه بين کدهاي .CPP و .h مربوط به Account را با فايل ATMServer.exe مشاهده کنيد. براي آنکه نمودار مفهومتر باشد در ادامه نام دو مولفه Account را تغيير ميدهيم. با کمک اين نمودار مسئول سيستم ميداند که چه کتابخانههاي کدي وجود دارند و بعد از کامپايل چه فايلهاي اجرائي ايجاد ميگردد. برنامه نويس نيز از روي اين نمودار ميداند که کتابخانههاي کد کدام هستند و چه رابطهاي بين آنها موجود است و ترتيب کامپايل فايلها نيز به چه صورت است. رابطه بين Package Body و Package Specification نشان ميدهد که Body به Specification وابسته است. به عبارت ديگر کلاسهايي در Body وجود دارد که به بعضي از کلاسهاي موجود در Specification وابسته هستند. همانطور که بيان شد در صورتي که اين برنامه را با زبان C++ بنويسيم Body کدهاي cpp و Specification کدهاي h هستند. پس معني اين رابطه به اين صورت است که در کدهاي Account.cpp کلاسهايي وجود دارد که به بعضي از کلاسهاي موجود در کدهاي Account.h وابسته هستند. همانطور که بيان شد رابطه Dependency بر روي کامپايل تاثير ميگذارد. در اين مثال از آنجايي که body به Specification وابسته است ابتدا بايد Specification يا Account.h کامپايل شود و سپس Account.cpp کامپايل گردد. توجه کنيد که بايد از ايجاد رابطه Dependency بصورت حلقهاي پرهيز کنيد. زيرا اگر A به B وابسته باشد و B نيز به A وابسته باشد هيچکدام تا ديگري کامپايل نشود کامپايل نميگردد. رابطه Dependency باعث ميشود که نگهداري برنامه سادهتر شود. زيرا برنامه نويسان ميدانند که کدام فايلها مثلاً به فايل Account.h وابسته هستند. در اين صورت هر تغييري که در يک تابع بوجود بيايد مشخص است که اين تابع در کدام برنامهها استفاده شده است. با استفاده از رابطه Dependency ميتوانيد قابليت استفاده مجدد (reusability) هر برنامه را نيز بررسي کنيد. براي مثال در اين نمودار قابليت استفاده مجدد از Account.cpp سخت است زيرا وابسته به Account.h ميباشد و براي استفاده مجدد از Account.cpp بايد از Account.h نيز استفاده کنيد. به طور کلي هر چه تعداد Componentهايي که يک Component به آنها وابسته است کمتر باشد قابليت استفاده مجدد افزايش مييابد. براي حذف يک رابطه در اين نمودار کافيست که روي آن رابطه کليک کنيد و کليد Delete صفحه کليد را فشار دهيد. براي مشاهده خصوصيات Account.cpp بر روي آن دابل کليک کنيد. در قسمت Name نام اين Component را ميتوانيد تغيير دهيد. در قسمت Stereotype نيز ميتوانيد نوع اين Component را تغيير دهيد. بر روي ليست باز شونده Stereotype کليک کنيد. مشاهده ميکنيد که انواع مختلف Componentها در اين ليست وجود دارد. با استفاده از ليست باز شونده Language ميتوانيد نام زبان پياده سازي اين Component را تعيين کنيد تا در زمان ايجاد کد بر اساس آن زبان کد ايجاد گردد. روي ليست باز شونده Language کليک کنيد. روي گزينه ANSI C++ کليک کنيد. روي برگه Detail کليک کنيد. در قسمت Declaration ميتوانيد تعريفهاي مربوط به اين Component را وارد کنيد. در اين قسمت ميتوانيد مواردي مانند نام کلاس، متغيرها، دستورات لازم با توجه به زبان (مثلاً #includeها در زبان c) و غيره را وارد کنيد. روي دکمه OK کليک کنيد. در ادامه ميخواهيم يک مثال ديگر را بررسي کنيم. براي حذف Account.cpp روي آن کليک کنيد. کليد CTRL+D را فشار دهيد تا اين Component از نمودار حذف شده و همچنين تعريف آن نيز از قسمت Component View حذف گردد. به همين ترتيب بقيه عناصر اين نمودار را نيز حذف ميکنيم. در يک سيستم سه بسته سفارش، کنترل و ارسال وجود دارد. در ادامه ميخواهيم اين سه بسته را با استفاده از کنترل Package بر روي نمودار رسم کنيم. روي دکمه Package کليک کنيد. در محل مشخص شده کليک کنيد. وظيفه برنامه OrderItem سفارش يک قطعه ميباشد ولي مشتري از طريق برنامه Order شفارش خود را ثبت ميکند. يعني در ابتدا برنامه Order سفارشات را از مشتري دريافت ميکند و سپس به ازاي هر قلم کالا يک بار برنامه OrderItem توسط برنامه Order فراخواني ميشود. با توجه به توضيحات بيان شده مشاهده ميکنيد که دو فايل بدنه اصلي و کتابخانه Order رسم شدهاند و رابطه بين آنها نيز مشخص شده است. روي دکمه Close کليک کنيد. تا اينجا به بررسي رابطه Association و خصوصيات مربوط به اين رابطه پرداختيم. در ادامه سه رابطه ديگر را بررسي ميکنيم. توجه کنيد که خصوصياتي که در اينجا بيان شد با توجه به تعريف در بقيه رابطهها ممکن است وجود نداشته باشد ولي تعريف آنهايي که وجود دارد مطابق با تعريف بيان شده است. بر روي دکمه OK کليک کنيد. رابطه دوم Dependency نام دارد. رابطه Dependency يک رابطه مفهومي بين دو کلاس ميباشد که تغييرات در يکي (کلاس مستقل) ممکن است که در کلاس ديگر (کلاس وابسته) تاثير گذار باشد. پس اين نوع رابطه يک رابطه يکطرفه است. با استفاده از ابزار مشخص شده توسط کادر قرمز ميتوانيد يک رابطه Dependency رسم کنيد. مشاهده ميکنيد که اين رابطه بصورت خط چين نمايش داده ميشود. به همين ترتيب ميتوان با توجه به سيستم مولفههاي مربوط به دو بسته Control و Send را رسم کرد. شما اکنون در پايان اين بخش قرار داريد، براي بازگشت به منوي اين بخش روي دکمه مشخص شده کليک کنيد. فصل پنجم – صفات و عمليات – مقدمه ميدانيد که هر کلاس داراي صفات کپسوله شده و عملياتي بر روي آنها است. در اين بخش ميخواهيم نحوه تعريف اين صفات و عملياتها را بررسي کنيم. براي مثال کلاس Account که کلاس مربوط به شماره حساب ميباشد ميتواند شامل صفات AccountNo.، Password و Balance باشد که به ترتيب در آنها مقدار شماره حساب، رمز عبور و موجودي ذخيره ميشود. به زبان ديگر به ازاي ايجاد هر نمونه از کلاس يک شئ ايجاد ميشود که شامل سه متغير فوق است. در کلاس Account ميتوانيم دو عمليات Open() و WithdrawFunds() نيز تعريف کنيم. که وظيفه آنها به ترتيب باز کردن حساب (خواندن اطاعات لازم) و کسر از حساب جهت برداشت مشتري است. به زبان ديگر به ازاي ايجاد هر نمونه از کلاس يک شئ ايجاد ميگردد که شامل دو تابع به نامهاي فوق و سه متغيري است که در صفحه قبل بيان شد. براي يافتن صفات يک کلاس ميتوانيد مستندات مربوط به Use Case و ساختار بانک اطلاعاتي را بررسي کنيد. توجه کنيد که صفت يک کلاس بايد داراي اطلاعاتي در مورد آن کلاس باشد براي مثال در کلاس کارمند ميتوانيد صفاتي مانند نام و آدرس کارمند را تعريف کنيد ولي براي مثال نميتوان صفت توليدات کارخانهاي که کارمند در آن کار ميکند را در اين کلاس قرار داد. در صورتي که تعداد صفات زيادي را براي يک کلاس تعريف کرديد نشان دهنده اين است که آن کلاس بايد به دو کلاس تقسيم شود. بهتر است که تعداد صفات هر کلاس از صفت بيشتر نشود. ممکن است به دادهاي برسيد که متوجه نشويد يک مورد صفت است يا کلاس! براي مثال در يک سيستم به صفت نام شرکت ميرسيم. اکنون اين سوال مطرح ميشود که نام شرکت يک صفت براي کلاس افراد است يا يک صفت براي يک کلاس جديد به نام شرکت؟ در چنين مواردي بايد به بررسي بيشتر سيستم بپردازيد. در صورتي که در اين سيستم نياز به نگهداري اطلاعاتي در مورد شرکت داريد و رفتارها و عملکرهايي در مورد کلاس شرکت وجود دارد بايد يک کلاس جديد به نام شرکت تعريف شود و نام شرکت خصوصيت آن کلاس ميشود در غير اين صورت اگر فقط بخواهيد اطلاعاتي در مورد يک سري افراد مختلف ذخيره کنيد ميتوانيد نام محل کار آنها را بعنوان يک صفت در کلاس افراد تعريف کنيد. اکنون که صفتهاي سيستم خود را تعيين کردهايد نوبت تعريف آنها در نرم افزار Rational Rose است.در مثال ATM در کلاس Account سه صفت به نامهاي AccountNumber، Password و Balance وجود دارد. که به ترتيب حاوي شماره حساب، رمز عبور و موجودي مربوط به هر حساب ميباشند. براي تعريف صفات بيان شده روي کلاس Account دابل کليک کنيد. روي برگه Attributes کليک کنيد. در قسمت مشخص شده توسط کادر قرمز راست کليک کنيد. روي گزينه Insert کليک کنيد. اکنون ميتوانيد يک صفت جديد تعريف کنيد. در ادامه عبارت Account Number را وارد ميکنيم. براي تعيين خصوصيات اين صفت روي نام صفت دابل کليک کنيد. در قسمت Name ميتوانيد نام صفت را تغيير دهيد. در قسمت Type نوع اين صفت تعيين ميشود. اکنون گزينه Show Classes فعال است فعال بودن اين گزينه باعث ميشود تا در ليست Type نام کلاسهايي که تعريف کردهايم نيز نمايش داده شود. براي انتخاب گزينه String ليست باز شونده Type را باز کنيد. مشاهده ميکنيد که انواع داده و کلاسهاي تعريف شده در اين ليست وجود دارد. روي ميله لغزان کليک کنيد. روي گزينه String کليک کنيد. روي گزينه Rational Rose Enterprise Edition کليک کنيد. اکنون برنامه Rational Rose اجرا شده است. در اين قسمت ميتوانيد چهارچوبهاي کاري مختلفي را مشاهده کنيد. در صورتي که نخواهيد از هيچکدام از اين چهارچوبها استفاده کنيد روي دکمه Cancel کليک نمائيد. در اين قسمت ميخواهيم تا حدودي با محيط Rational Rose آشنا شويم، روي دکمه Cancel کليک کنيد. در قسمت مشخص شده توسط کادر قرمز منوي برنامه را مشاهده ميکنيد. توجه کنيد که بعضي از گزينههاي منو هميشه فعال نيستند براي مثال گزينه undo اکنون فعال نميباشد. قسمتي که با کادر آبي مشخص شده است جعبه ابزار است. در اين قسمت دستورات پرکاربرد موجود در منوها بصورت يک دکمه قرار دارد تا به سادگي بتوانيد به گزينههاي منو دسترسي داشته باشيد. براي مثال کليک بر روي دکمه Open معادل باز کردن منوي File و انتخاب گزينه Open ميباشد. در قسمتهاي ديگر برنامه نيز ميتوانيد نمودارهاي مورد نظر خود را رسم نمائيد. در بخشهاي بعدي به بررسي زبان مدل سازي UML ميپردازيم و هر مورد را در Rational Rose بررسي ميکنيم. با استفاده از گزينه Stereotype همانند Actorها و Use Caseها ميتوانيد صفات را طبقهبندي کنيد. براي مثال ممکن است که يک سري صفت داشته باشيد که به يک سري فيلد در بانک اطلاعاتي نگاشت ميشوند و صفتهايي نيز وجود دارند که داراي اين خصوصيت نيستند. در اين حالت به ازاي هر دسته از اين صفات يک Stereotype تعريف کنيد. براي مثال ميخواهيم Stereotype اين صفت را برابر Savedb قرار دهيم. ليست باز شونده Stereotype را باز کنيد. مشاهده ميکنيد که اين ليست خالي است بعد از آنکه عبارت Savedb را وارد کرديم اين ليست داراي يک گزينه تحت عنوان Savedb ميشود. عبارت Savedb را تايپ کنيد. در قسمت Initial Value ميتوانيد مقدار پيش فرض اين صفت را تعيين کنيد تا زماني که يک شئ از نوع اين کلاس ايجاد ميشود مقدار اين صفت آن شئ بصورت پيش فرض تعيين گردد. براي مثال در کلاس سفارشات يک صفت به نام ماليات وجود دارد که با توجه به نرخ اعلام شده اين عدد برابر % ميباشد که در شرايطي نيز قابل تغيير است. در اين حالت در قسمت Initial Value عدد را وارد ميکنيم. در اين پنجره در قسمت Role عبارتي که در برگه General در قسمت نام Role A وارد کرديد دوباره نمايش داده ميشود. همانطور که در صفحات پيشين بيان شد در يک رابطه از نوع Association وقتي که نرم افزار Ration Rose کد توليد ميکند صفتهايي را نيز ايجاد ميکند. در قسمت Export Control ميتوانيد محدوده تعريف اين صفت را تعيين کنيد. در جدول زير ميتوانيد تعريف هر کدام از چهار گزينه Export Control را مشاهده کنيد. تي در قسمت Key/Qualifier يک صفت تعريف ميگردد که يک شئ را شناسائي ميکند. براي مثال در اين قسمت ميتوانيد يک صفت به نام PersonID تعريف کنيد که از نوع Integer باشد. براي اين کار در قسمت خالي راست کليک کرده و عبارت PersonID را در قسمت Name وارد ميکنيد. در قسمت Type نيز دابل کليک کرده و نوع Integer را انتخاب مينمائيد. در قسمت Export Control تعيين ميکنيد که يک کلاس و عناصر آن از خارج از کلاس به چه صورت ديده شود. با انتخاب گزينه Public اين صفت از کلاس توسط کلاسهاي ديگر قابل مشاهده و دسترسي است. براي مثال در صورتي که صفت Account Number از نوع Public باشد ميتواند توسط کلاسهاي ديگر مثلا" Card Reader خوانده شده يا تغيير داده شود. در اين مثال صفت Account Number لازم نيست که توسط کلاسهاي ديگر تغيير يابد بلکه توسط متد open که در اين کلاس قرار دارد مقدار دهي ميشود. صفاتي که توسط کلاسهاي ديگر قابل روئيت نيستند و فقط خود کلاس ميتواند به اين صفات دسترسي داشته باشد صفات Private نام دارد. يک صفت Protected صفتي ميباشد که توسط کلاس و فرزندانش قابل دسترس است. با انتخاب گزينه Implementation تعيين ميکنيم که صفت براي کلاسهايي که در اين بسته قرار دارند بصورت Public ميباشد و کلاسهايي که خارج از اين بسته هستند به اين کلاس دسترسي ندارند. توصيه ميشود که بيشتر از دو گزينه Protected و Private استفاده کنيد. با توجه به گزينهاي که انتخاب کردهايد کدي که از روي اين نمودار ايجاد ميگردد نيز تحت تاثير قرار ميگيرد. در قسمت Documentation نيز ميتوانيد مستندات مربوط به اين خصوصيت را وارد نمائيد. روي برگه Detail کليک کنيد. در قسمت Containment تعيين ميکنيد که مقدار صفت به يکي از دو حالت By Value يا By Refrence ذخيره شود. در صورتي که نميدانيد کدام حالت بايد انتخاب شود گزينه Unspecified را انتخاب نمائيد. با انتخاب گزينه Unspecified در زمان ايجاد کد، کلاس بصورت By Value تعريف ميگردد. با انتخاب گزينه By Value تعيين کردهايد که صفت درون کلاس قرار دارد. با انتخاب گزينه By Refrence نيز صفت در خارج از کلاس قرار دارد و کلاس داراي يک نشانهگر (pointer) ميباشد که به اين صفت اشاره دارد. با فعال کردن گزينه Static صفت بصورت Static يا ايستا تعريف ميشود. در صورتي که گزينه Derived را فعال نمائيد تعيين کردهايد که اين صفت از يک يا چند صفت ديگر ساخته شده است. براي مثال صفت مساحت در کلاس مستطيل از دو صفت طول و عرض مشتق شده است. روي دکمه OK کليک کنيد. يک عمليات ديگر نيز در اين کلاس وجود دارد که Deduct Funds نام دارد که وظيفه آن کم کردن موجودي است. اين عمليات توسط عمليات Withdraw Funds موجود در همين کلاس فراخواني ميشود پس بايد عمليات Deduct Funds بصورت Private تعريف شود. در قسمت Documentation ميتوانيد مستندات اين عمليات را وارد نمائيد. روي برگه Detail کليک کنيد. در اين قسمت ميتوانيد وروديهاي اين عمليات را تعيين کنيد. براي مثال در عمليات محاسبه مساحت در کلاس مستطيل دو ورودي عمليات طول و عرض مستطيل ميباشد. در اينجا در حال تعريف عمليات Open هستيم که وظيفه آن باز کردن اطلاعات حساب است. پس ورودي اين عمليات شماره حساب ميباشد. براي تعريف يک ورودي در محل مشخص شده توسط فلش قرمز راست کليک کنيد در محل مشخص شده کليک کنيد. در انتها نيز مشاهده ميکنيد که يک تابع به نام op از نوع Private و با خروجي Boolean تعريف شده است. اين تابع همان Operationي ميباشد که تحت نام op ايجاد کرديم. روي دکمه Close کليک کنيد تا کد Class را مشاهده کنيد. در ادامه يک خط کد جهت تعريف يک متغير يا خصوصيت در نمودار UML وارد ميکنيم. با اين کار يک متغير به نام myVar از نوع integer و بصورت Private تعريف شده است. در ادامه ميخواهيم اين کد جديد را به نمودار UML تبديل کنيم. روي دکمه Rational Rose در نوار وظيفه کليک کنيد. روي دکمه Close کليک کنيد. براي آنکه نرم افزار Rational Rose کد Visual Basic جديد را بررسي کند. منوي Tools را باز کنيد. روي گزينه String کليک کنيد. روي دکمه OK کليک کنيد. به اين ترتيب Op بصورت Private و داراي خروجي از نوع Boolean تعريف شده است. روي برگه Attributes کليک کنيد. در اين قسمت هم ميخواهيم يک صفت براي Class تعريف کنيم. در محل مشخص شده راست کليک کنيد. روي گزينه Insert کليک کنيد. روي دکمه OK کليک کنيد. در جعبه متن Qualification شرايطي که زبان برنامه نويسي بايد دارا باشد را وارد ميکنيم. اين خط نيز بصورت يک خط توضيح در کد ايجاد شده توسط Rational Rose نوشته ميشود. در قسمت Size مقدار حافظه مورد نياز براي اين عمليات را ميتوانيد وارد کنيد. اين خط نيز بصورت يک خط توضيح در کد نوشته ميشود. در ادامه عبارت Test را به عنوان نام اين شئ وارد ميکنيم. در ادامه يک پيغام از Test به Test رسم ميکنيم. در ادامه ميخواهيم عملياتهاي اين کلاس را تعريف کنيم. روي کلاس Account دابل کليک کنيد. روي برگه Operations کليک کنيد. روش تعريف يک عمليات همانند روش تعريف يک صفت است. در محل مشخص شده با کادر قرمز راست کليک کنيد. روي گزينه Insert کليک کنيد. مشاهده ميکنيد که عمليات تعريف شده است. در ادامه عبارت Open را وارد ميکنيم. روي نام اين عمليات دابل کليک کنيد. روي گزينه Insert کليک کنيد. در ادامه عبارت AccNo را وارد ميکنيم. کلاسهاي موجود در اين ليست همان Actorهايي هستند که در نمودار UseCase تعريف کرديم. توسط گزينه نيز ميتوانيد يک کلاس جديد تعريف کنيد. مرحله بعد از طراحي اين دو نمودار نگاشت اشياء به کلاسها ميباشد. توجه کنيد که در زمان توليد کد حتما" بايد هر شئ به يک کلاس نگاشت داده شود. روي گزينه Unspecified کليک کنيد تا هيچ کلاسي انتخاب نگردد در قسمت Documentation ميتوانيد مستندات مورد نظر خود وارد نمائيد. در قسمت Persistence پايداري هر شئ تعيين ميشود. در ادامه مفهوم هز يک از اين سه گزينه را مشاهده ميکنيد. Persistent : شئ است که در يک بانک اطلاعاتي يا هر منبع پايدار ديگري مشابه بانک اطلاعاتي نگهداري ميشود. در اين حالت در صورتي که حتي برنامه به پايان برسد اشياء از بين نميروند. Static : يک شئ ايستا شئ است که تا زماني که برنامه ادامه دارد وجود دارد و از بين نميرود. Transient : يک شئ موقت شئ است که فقط براي مدت کوتاهي در حافظه باقي ميماند. فرض کنيد که در اين نمودار ميخواستيم به جاي يک مشتري يک سري مشتري را مطرح کنيم يا در يک نمودار ديگر بخواهيم يک شئ به نام ليستي از کارمندان داشته باشيم. در اين صورت در دو نمودار Collaboration يا Sequnece بايد گزينه Multiple Instances را فعال نمائيد. روي دکمه OK کليک کنيد. روي دکمه Close کليک کنيد. روي خط پيغام دابل کليک کنيد. روي عبارت AccNo دابل کليک کنيد. در قسمت Type نوع داده تعيين ميشود روي اين ليست باز شونده کليک کنيد. روي ميله لغزان کليک کنيد تا به گزينه String برسيم. در جعبه متن Time نيز مقدار زمان مورد نياز جهت اجراي عمليات را ميتوانيد وارد نمائيد. اين خط نيز بصورت يک خط توضيح در کد نوشته ميشود. در صورتي که در يک کلاس Abstract بخواهيم يک عمليات تعريف کنيم جعبه چک Abstract قابل استفاده ميشود. بافعال کردن اين جعبه چک تعيين ميکنيد که اين عمليات يک عمليات Abstract ميباشد. در قسمت Concurency نحوه همروندي عمليات تعيين ميشود يعني تعيين ميکنيد تا در صورتي که چند Thread بخواهند اجرا شوند و اين عمليات يکي از آنها باشد نحوه اجراي اين عمليات به چه صورت است. با انتخاب گزينه Sequential تعيين ميکنيد که فقط در صورتي اين عمليات به درستي کار ميکند که يک پردازش کنترلي وجود داشته باشد. گزينه Guarded را زماني بايد انتخاب کنيد که چند Thread ميتوانند بصورت همزمان اجرا شوند ولي براي دستيابي به Mutual Exclusion بايد Threadها با يکديگر در ارتباط باشند ولي با انتخاب گزينه Synchronous، Mutual Exlusion توسط کلاس تامين ميگردد. روي برگه Exceptions کليک کنيد. در اين قسمت موارد استثنائي (Exception) که ممکن است عمليات با آنها روبرو شود را تعريف ميکنيد. اين قسمت کد توليد شده را تحت تاثير قرار ميدهد. در ميله ابزار اين قسمت چهار دکمه وجود دارد که به ترتيب وظيفه ايجاد، حذف، افزايش اولويت و کاهش اولويت استثنا را دارند. با کليک بر روي دکمه ايجاد استثنا وارد يک پنجره جديد ميشويد و ميتوانيد کلاسي که ايجاد استثنا ميکند را تعيين کنيد. روي برگه Preconditions کليک کنيد. در اين قسمت شرايطي که قبل از اجراي عمليات بايد برقرار باشند وارد ميشود. در پايين اين پنجره ميتوانيد نمودار تعاملي (نمودار روي برگه Files کليک کنيد. بعد از گذشت مدت زماني کار برنامه به پايان ميرسد و مدل به روز آوري ميشود. روي دکمه Close کليک کنيد. يک نمودار کلاس ديگر به نام Overview of Project ايجاد شده است که شماي کلي پروژه Project ميباشد. روي دکمه Close کليک کنيد. مشاهده ميکنيد که يک خصوصيت به نام myVar و از نوع Integer و به صورت Private ايجاد شده است. به اين کار مهندسي معکوس يا Reverse Engineering ميگويند. با استفاده از اين ويژگي ميتوانيد اطلاعات را از يک پروژه Visual Basic به يک مدل UML تحت مهندسي معکوس تبديل کنيد و سپس معماري سيستم را مشاهده کنيد. اکنون ميتوانيد هر تغييري را روي مدل ايجاد کنيد و در صورت نياز دوباره کد مورد نظر را ايجاد نمائيد. اکنون ميخواهيم يک نمودار Sequence ايجاد کنيم. روي گزينه Logical View راست کليک کنيد. منوي فرعي New را باز کنيد. در برگه Files ميتوانيد فايلها يا آدرسهاي URLي که به اين عمليات مرتبط هستند را تعيين کنيد. اين کار از طريق راست کليک کردن در قسمت سفيد صفحه و انتخاب گزينه Insert File يا Insert URL انجام ميشود. براي حذف نيز بر روي گزينه مورد نظر راست کليک کرده و گزينه Delete را انتخاب کنيد. روي دکمه OK کليک کنيد. به همين ترتيب در ادامه چند عمليات ديگر را نيز تعريف ميکنيم. مشاهده ميکنيد که خروجي تابع Withdraw Funds بصورت Boolean ميباشد تا به تابع صدا کننده اعلام کند که عمل برداشت از حساب موفقيت آميز انجام شد يا خير. روي دکمه OK کليک کنيد. Sequence و نمودار Collaboration نمودارهاي تعاملي ميباشند) که پيش شرايط اين عمليات را نشان ميدهد تعيين کنيد. اين قسمت در کد توليد شده تاثيري ندارد و فقط بصورت توضيحات در کد نوشته ميشود. برگه Postconditions نيز همانند برگه Preconditions است با اين تفاوت که زماني که عمليات بخواهد به پايان برسد بايد اين شرايط برقرار باشند. اين شرايط همانند Postcondition در کد تاثيري ندارند و فقط جهت توضيحات براي برنامه نويس است. روي برگه Semantics کليک کنيد. مشاهده ميکنيد که اين برگه نيز مانند برگه Preconditions ميباشد. در برگه Semantics ميتوانيد يک شبه کد بنويسيد اين کد بصورت توضيحات در کد ايجاد شده توسط Rational Rose نوشته ميشود تا برنامه نويس هدف و معناي اين عمليات را بهتر درک کند. براي مثال در عمليات محاسبه مساحت مستطيل ميتوانيد کد زير را وارد کنيد. Set masahat = tool * arz اکنون ميتوانيد در پايين کلاس ليست عملياتهاي ايجاد شده را مشاهده کنيد. اکنون يک سري از اطلاعات نمايش داده نشده است. براي مثال نوع ورودي و خروجي عمليات Withdraw Funds نمايش داده نشده است. براي آنکه اين موارد را مشاهده کنيد روي عمليات Withdraw Funds کليک کنيد. مشاهده ميکنيد که خروجي اين تابع از نوع Boolean و ورودي آن يک متغير به نام Amount از نوع Long است. پس نرم افزار Rose بصورت خودکار يک سري از اطلاعات را نمايش نميدهد. بر روي محل مشخص شده در داخل کلاس که داراي هيچ متني نميباشد کليک کنيد تا حالت نمايش به حالت اوليه برگردد. اکنون ديگر اشيائ مشخص نيستند ولي در قسمت مشخص شده با کادر قرمز نام آنها نوشته شده است و ميتوانيد محل آنها را مشاهده کنيد. اکنون شئ ATM Screen بايد از Customer بخواهد تا درخواست خود را وارد کند. اين کار از طريق يک پيغام به Customer انجام ميشود. در صفحه بعد اين پيغام و چند پيغام ديگر را رسم کردهايم. توسط پيغام شماره ATM Screen از Customer ميخواهد که عمليات خود را تعيين کند. توسط پيغام شماره کاربر تعيين کرده است که ميخواهد عمل برداشت از حساب را انجام دهد. سپس با استفاده از پيغام شماره ATM Screen از Customer مقدار برداشت را ميپرسد و Customer طي پيغام شماره عدد . را به ATM Screen ارسال ميکند. سپس ATM Screen با استفاده از پيغام شماره به شئ Customer's Account اعلام ميکند که . تومان از حساب Customer برداشت کند. در اين نمودار با استفاده از پيغام شماره Customer's Account مشاهده ميکنيد که ديگر صفات کلاس نمايش داده نميشوند. يک راه ديگر نيز انتخاب کلاس و استفاده از منوي Format است. اکنون کلاس Account انتخاب شده است. منوي Format را باز کنيد. روي گزينه Show All Attributes کليک کنيد. به همين ترتيب ميتوانيد بعضي از موارد را نمايش دهيد يا مخفي نمائيد. در اين بخش هدف آشنايي با صفات و عملياتها بود. يک نکته مهم نگاشت صفات و عمليات در نمودارهاي تعاملي است. از روي نمودارهاي تعاملي ميتوانيد صفات و عمليات مربوط به هر کلاس را شناسايي کنيد. در بخش بعدي انواع رابطه را بررسي ميکنيم. شما اکنون در پايان اين بخش قرار داريد، براي بازگشت به منوي اين بخش روي دکمه مشخص شده کليک کنيد. اکنون امکان دسترسي به اطلاعات حساب مشتري (مانند مانده حساب و رمز عبور) ايجاد شده است. در قدم بعد بايد رمز عبور براي شئ Customer's Account ارسال شود تا بررسي کند که آيا رمز عبور درست ميباشد يا خير. پس يک پيغام با محتواي Verify Password از شئ ATM Screen به شئ Customer's Account بايد ارسال شود در ادامه اين پيغام را رسم ميکنيم. روي ميله لغزان کليک کنيد. در ادامه عبارت Order را جهت بسته سفارشات وارد ميکنيم. به همين صورت دو بسته ديگر به نامهاي Control و Send را ايجاد ميکنيم. در محل مشخص شده کليک کنيد. حال بايد نام OrderItem را وارد کنيم. در ادامه رابطه بين اين دو فايل را نيز رسم ميکنيم.
آمار
Powered by Eniac