آقاي محسن صبوريان تقبل زحمت نموده و در اين ترم كمك استاد (T.A) درس سيستمهاي شيءگرا خواهند بود. در كنار مباحث تحقيقي كه به دانشجويان محول خواهد گرديد، قرار بر آن است كه دانشجويان يك سري تكليف جهت تمرين و درك بهتر طراحي و پيادهسازي سيستمهاي شيءگرا انجام دهند. اولين تمرين از اين سري تهيه و انجام آن به دانشجويان محول شده است. از آن جا كه تمرين نكات جالبي در خود دارد، صورت مسئله آن را در ادامه آوردهام. همين جا از آقاي صبوريان جهت تقبل اين زحمت كمال تشكر را دارم.
به نام خدا
تمرين شمارهي 2 (مشق عيد) – درس تحليل و طراحي شيگرا
عنوان:تحليل، طراحي و پيادهسازي مورد كاربرد امانت گرفتن كتاب از كتابخانهي دانشكده
تاريخ تحويل: …
شرح:
در ادامهي تمرينِ Domain Model Analysis، شما بايد مورد كاربرد فرايند امانتگيري كتاب از كتابخانهي دانشکده را تحليل، طراحي و پيادهسازي كنيد. مورد كاربرد امانتگيري (مسير اصلي و مسيرهاي جايگزين) در قسمت پاياني توضيح داده شده است. به عنوان تمرين تحليل، شما بايد مفاهيم موجود در محيط ، مشخصات هر يك و ارتباطات بين آنها را بيابيد. براي اين کار استخراج مشخصهها/صفات اصول تجريد و الگوهاي GRASP را به دقت رعايت كنيد و براي در نظر گرفتن هر صفت دليل منطقي داشته باشيد. علاوه بر اين، از روي مورد كاربرد، نمودار توالی سيستم (SSD) را (فقط براي مسير اصلي ) رسم كنيد. از آنجايي كه پيشتر در درس مهندسي نرمافزار رسم SSD را ياد گرفتهايد، فقط اشاره ميشود كه:
SSD، نوعي نمودارِ توالي است كه در سطح تجريدِ بالا و به ازاي يك مورد كاربرد رسم ميشود. در اين نمودارِ توالي، سيستم به عنوان يك جعبهي سياه در نظر گرفته ميشود و تأكيد بر وروديهايي (درخواستها، پيغامها و …) است كه از كاربر (External Actor) به سيستم ميرسد، هر چند خروجي و پاسخهاي سيستم هم لحاظ ميشود.
در فاز طراحي، بايد نمودارِ کلاسِ تهيه شده در بخش تحليل را (كه فاقد عمليات است)، با افزودن متودهاي لازم تكميل كنيد. به علاوه بايد SSD را به يك نمودارِ تواليِ مشروح، بسط دهيد.
در فاز پيادهسازي هم بايد كليهي كلاسها و رابط هايي را كه در دو مرحلهي قبل بازشناختيد، به كد تبديل كنيد. از آنجايي كه اين مورد كاربرد، يك قسمت از يك سيستم بزرگ كتابخانه ميباشد، براي اجرايي شدن كد پيادهسازي شده، به دلخواه خود ميتوانيد بهعنوان لايهي دادهها، از اشياء ساختگي ، پايگاهدادههاي جاسازيشده و يا فايلهاي متني ساده استفاده كنيد. به علاوه شما ملزم به پيادهسازي رابط كاربر (UI) نيستيد و تمامي پيغامهاي سيستم را ميتوانيد به صورت متن در خروجي نمايش دهيد، مورد کاربرد بايد کاملاً اجرايي شود. به عنوان مثال بايد تعدادي کتاب پيشفرض و همچنين اعضاي کتابخانه در مقاطع مختلف در سيستم کتابخانه داشته باشيد.
مواردي که در پايان اين تمرين بايد تحويل دهيد:
1. محصولات فاز تحليل: مستندات Domain Model و SSD. جزئيات: نمودار SSD بايد به فرمت استاندارد نمودار توالي در UML باشد. به عنوان Domain Model بايد مستندي از مفاهيم موجود در سيستم به همراه صفات و رابطههاي آنها تحويل داده شود. رابطههاي بين مفاهيم، به عنوان نمودار کلاس در فاز طراحي تحويل داده ميشود.
2. محصولات فاز طراحي: نمودار کلاس و نمودار توالي. جزئيات: يک نمودار توالي و تعدادي نمودار کلاس به فرمت استاندارد UML.
3. محصولات فاز پيادهسازي: کد اين مورد کاربرد به علاوهي چندين (حداقل 10) Test Case براي آزمايش مسير اصلي و همهي مسيرهاي فرعي (اعضاي کتابخانه در مقاطع مختلف و جريمههاي مختلف). همانطور که گفته شد، شما فقط موظف به پيادهسازي منطق صحيح اجرا شدن برنامه هستيد و نيازي به پيادهسازي UI نيست. در عوض با اجرا کردن هر Test Case، بايد جريان عمل (و خطاهاي احتمالي) با پيغامهاي مناسب نمايش داده شود. در هنگام تحويل، Test Caseهاي شما اجرا و نتيجهي کار مشاهده ميشود. يک نمونه Test Case:
mid1 = 1234; // sample member ID
showMemberfInfo(mid1); // print out member info
bid = {123, 234, 345}; // sample book IDs
addBook(mid1, bid[1]); // OK
addBook(mid1, bid[2]); // OK
addBook(mid1, bid[3]); // err! 1234 is undergraduate
mid2 = 1235; // another sample member ID.
showMemberfInfo(mid2); // print out member info
addBook(mid2, bid[1]); // err! bid[1] is already borrowed!
مورد كاربرد:
o پيششرطها:
1. کاربر براي ورود به سيستم بايد حساب (نام کاربري و کلمهي عبور) داشته باشد.
2. متقاضي براي اخذ کتاب بايد کارت (شناسه) عضويت داشته باشد.
o مسير اصلي:
1. کاربر گزينهي امانت را بر روي سيستم انتخاب ميکند؛
2. سيستم فرم پرسش شمارهي عضويت متقاضي امانت را نمايش ميدهد؛
3. کاربر شمارهي عضويت متقاضي امانت را وارد ميکند؛
4. سيستم مشخصاتِ عضو (شامل نام، نام خانوادگي، شمارهي عضويت، مقطع تحصيلي، ظرفيت مانده براي امانت و مجموع جريمهي ديرکردِ تصفيه نشده) و مشخصات کتاب يا کتابهاي پيشتر امانت گرفتهشده (شامل نام کتاب، شناسهي کتاب و همچنين تاريخ بازگشت آن) را نمايش ميدهد؛
5. کاربر شناسهي کتاب را وارد ميکند و کليد ثبت فشار ميدهد. با اين کار: 1. شناسهي کتاب و تاريخ امانت به همراه تاريخِ برگشتِ محاسبه شده براي عضو ذخيره ميشود. 2. وضعيت كتاب در سيستم به «امانت داده شده» تبديل ميشود.
6. در صورتي که عضو قصد دارد بيش از يک کتاب را امانت بگيرد مرحلهي 5 تکرار ميشود. پس از ثبت امانت اين مورد کاربرد به پايان ميرسد.
o مسيرهاي جايگزين:
[1] موجود نبودن کتاب
– در هنگام ثبت امانت، در صورتي که وضعيت کتاب، «امانت داده شده» بود، پيغام «کتاب امانت داده شده است» به کاربر نشان داده ميشود.
[2] پيدا نکردن کتاب
– در هنگام ثبت امانت، در صورتي که کتابي با شناسهي وارد شده وجود نداشت، پيغام عدم وجود کتاب به کاربر نشان داده ميشود.
[3] پر بودن ظرفيت امانت عضو
– در صورت پر بودن ظرفيت امانت، در صفحهي مشخصات عضو، پيغام پر بودن ظرفيت اخذ کتاب به کاربر نمايش داده ميشود و کليد/عمليات ثبت غير فعال ميگردد.
[4] منقضي شدن عضويت
– در صورتي که عضويت متقاضي امانت منقضي شده باشد، صفحهي مشخصات عضو با پيغامِ منقضي شدن حساب، به کاربر نمايش داده ميشود و کليد/عمليات ثبت غير فعال ميگردد.
[5] غير فعال بودن (disabled) حساب عضو
– در صورتي که وضعيت عضويت متقاضيِ امانت «غير فعال» باشد، صفحهي اطلاعات عضو با پيغام مشخصِ غير فعال بودن عضو به کاربر نمايش داده ميشود و کليد/عمليات ثبت غير فعال ميگردد.
[6] جريمهي ديرکرد بيش از حد
– در صورتي كه به عضو کتابخانه جريمهاي بيش از 20.000 ريال تعلق گرفتهباشد، در صفحهي مشخصات عضو، پيغام جريمهي بيش از 20.000 ريال نمايش داده ميشود و کليد/عمليات ثبت غير فعال ميگردد.
o قواعد کسب و کار :
دانشجويان كارشناسي، كارشناسي ارشد و دكترا، مشروط بر اينكه دانشجوي همان دانشكده باشند به ترتيب ميتوانند 3، 4 و 5 كتاب به امانت بگيرند. دانشجويان ساير دانشكدهها (كه عضو كتابخانه هستند) بسته به مقطع تحصيليشان، به ترتيب مجاز به امانت گرفتن 2، 3 و 4 كتاب هستند. مهلت بازگشت كتاب براي دانشجويان همان دانشكده به ترتيب 2، 3 و 4 هفته و براي دانشكدههاي ديگر 1، 2 و 3 هفته ميباشد.
جريمهي ديرکرد بازگرداندن کتاب به ازاي هر روز، براي اعضاي همان دانشکده 500 ريال و براي ساير اعضا 1000 ريال ميباشد.

دانشجوی کامپیتر
10 دی 1386 در 00:00🙁
خوب جواب تمرین رو هم زیش می گذاشتین که برای همه آموزنده باشد!