مبحث آموزشی مهندسی نرمافزار: شناسایی صفات کلاس در سیستم ATM
آموزش C++ شناسایی صفات کلاس در سیستم ATM، در بخش ۱۱-۳ اولین مرحله از طراحی شیگرا (OOD) را برای سیستم ATM انجام دادیم. تحلیل مستند نیازها و شناسایی کلاسهای مورد نیاز در پیادهسازی سیستم. همچنین اسامی و کلمات کلیدی موجود در مستند نیازها را مشخص و کلاسها را مجزا کرده و نقشی که هر یک در سیستم ATM بازی می کنند را شناسایی کردیم. سپس کلاسها و روابط آنها را توسط دیاگرام کلاس UML مدلسازی کردیم (شکل ۲۳-۳). کلاسها دارای صفات (داده) و عملیات (رفتار) هستند. صفات کلاس در برنامههای C++ بعنوان عضوهای داده و عملیات کلاس توسط توابع عضو پیادهسازی می شوند. در این بخش، به تعیین برخی از صفات مورد نیاز در سیستم ATM می پردازیم. در فصل پنجم، بررسی می کنیم چگونه این صفات در تعیین وضعیت یک شی نقش دارند. در فصل ششم، به تعیین عملیات کلاسها خواهیم پرداخت.
شناسایی صفات
به صفات برخی از شی ها در جهان واقعی توجه کنید: هر فردی دارای قد، وزن بوده و می تواند چپدست، راستدست یا قادر به نوشتن با هر دو دست باشد. صفات یک رادیو شامل تنظیم ایستگاه، تنظیم صدا و تنظیمات AM یا FM است. صفات یک اتومبیل شامل دور موتور، حجم مخزن سوخت و نوع جعبهدنده است. صفات یک کامپیوتر شخصی شامل سازنده آن (همانند Dell، Sun، Apple یا IBM)، نوع صفحه نمایش (مثلاً LCD یا CRT)، میزان حافظه اصلی و سایز دیسک سخت است.
می توانیم صفات بسیار زیادی برای کلاسها را در سیستم با دقت در کلمات توصیفکننده و عبارات موجود در مستند نیازها پیدا کنیم. برای هر صفتی که نقشی در سیستم بازی می کند یک صفت ایجاد کرده و آن را به یک یا چند کلاس شناسایی شده در بخش ۱۱-۳ تخصیص می دهیم. همچنین صفات را برای نمایش دادههای اضافی که ممکن است کلاس نیاز داشته باشد یا دادههای که می توانند فرآیند طراحی را مشخصتر سازند، ایجاد می کنیم.
در جدول شکل ۲۳-۴ کلمات و عبارت بدست آمده از مستند نیازها را که توصیفکننده کلاس هستند، لیست شدهاند. ترتیب دستیابی به این کلاس بر اساس ظاهر شدن آنها در مستند نیازها است.
کلاس |
کلمات و جملات توصیفی |
ATM |
تایید هویت کاربر |
BalanceInquiry |
شماره حساب |
Withdrawl |
شماره حساب |
|
موجودی |
Deposit |
شماره حساب |
|
موجودی |
BankDatabase |
[کلمه یا جمله توصیفکننده وجود ندارد] |
Account |
شماره حساب |
PIN |
|
مانده حساب |
|
Screen |
[کلمه یا جمله توصیفکننده وجود ندارد.] |
keypad |
[کلمه یا جمله توصیفکننده وجود ندارد.] |
CashDispenser |
هر روز با ۵۰۰ عدد اسکناس ۲۰ دلاری شروع بکار میکند. |
DepositeSlot |
[کلمه یا جمله توصیفکننده وجود ندارد.] |
شکل ۲۳-۴ | کلمات و عبارات توصیفکننده از مستند نیازهای ATM.
جدول ۲۳-۴ ما را به سمت ایجاد یک صفت کلاس ATM سوق میدهد. کلاس ATM مسئول نگهداری اطلاعاتی در ارتباط با وضعیت ATM است. عبارت «تایید هویت کاربر» توصیفکننده وضعیتی از ATM است (در بخش۱۱-۵ به معرفی وضعیتها خواهیم پرداخت)، از اینرو userAuthenticated را بعنوان یک صفت بولی در نظر گرفتهایم (صفتی که دارای یک مقدار true یا fasle است). نوع Boolean در UML معادل نوع bool در زبان C++ است. این صفت بر این نکته دلالت دارد که آیا ATM با موفقیت هویت کاربر جاری را تایید کرده است یا خیر، برای اینکه سیستم به کاربر اجازه انجام تراکنش و دسترسی به اطلاعات حساب را فراهم آورد بایستی ابتدا userAuthenticated برابر true باشد. این صفت در حفظ امنیت دادهها در سیستم نقش مهمی ایفا می کند.
کلاسهای BalanceInquiry، Withdrawal و Deposit یک صفت را به اشتراک می گذارند. هر تراکنشی مستلزم یک «شمارهحساب» است که متناظر با حساب کاربری است که تراکنش را انجام می دهد. یک صفت صحیح accountNumber به هر کلاس تراکنش برای شناسایی حساب اهدا می کنیم.
کلمات و جملات توصیفی در مستند نیازها پیشنهاد برخی از صفات متفاوت و مورد نیاز برای هر کلاس ترکنش را می کنند. مستند نیازها بر این نکته دلالت دارد که برای برداشت پول نقد یا سپردهگذاری، باید کاربر یک «مقدار» مشخص از پول را برای برداشت یا سپردهگذاری مشخص کند. از اینرو، به کلاسهای Withedrawal و Deposit یک صفت بنام amount تخصیص میدهیم تا مقدار مشخص شده از سوی کاربر را در خود ذخیره سازد. میزان پول مرتبط با برداشت پول و سپردهگذاری، تعریفکننده مشخصه این تراکنشها است که سیستم نیازمند آنها می باشد. کلاس BalanceInquiry نیازی به دادههای اضافی برای انجام وظیفه خود ندارد. تنها نیاز این کلاس یک شمارهحساب است تا براساس آن موجودی حساب را بازیابی کند.
کلاس Account دارای چندین صفت است. مستند نیازها مشخص می کند که هر حساب بانکی دارای یک «شمارهحساب» و “PIN” است، که سیستم با استفاده از آن مبادرت به شناسایی حساب و هویت کاربران میکند. به کلاس Account دو صفت صحیح تخصیص دادهایم: PIN و accoutnNumber. همچنین مستند نیازها تصریح میکند که هر حسابی مبادرت به نگهداری «موجودی» از میزان پولی که در حساب وجود دارد و مقدار پولی که کاربر بعنوان سپرده در پاکت وارد سیستم ATM وارد کرده ولی هنوز توسط مامور بانک تایید نشده و چکهایی که وارد حساب نشدهاند، میکند. با این همه، باید حساب، میزان موجودی که کاربر سپردهگذاری کرده است را ثبت کند. بنابر این، تصمیم گرفتهایم که یک حساب باید قادر به نمایش میزان موجودی با استفاده از دو صفت UML از نوع Double باشد: availableBalance و totalBalance. صفت availableBalance تعیینکننده میزان پولی است که کاربر می تواند بصورت نقد از حساب خود برداشت کند. صفت totalBalance به کل موجودی اشاره دارد که شامل سپردهگذاری نیز میشود. برای مثال، فرض کنید یک کاربر ATM مبلغ ۵۰.۰۰ دلار در یک حساب خالی سپردهگذاری کرده است. در اینحالت صفت totalBalance به ۵۰.۰۰ دلار افزایش می یابد تا میزان سپرده ثبت گردد، اما مقدار صفت availableBalance هنوز در صفر دلار باقی می ماند.
کلاس CashDispenser دارای یک صفت است. مستند نیازها مشخص می کند که تحویلدار خودکار «هر روز کار خود را با ۵۰۰ قطعه اسکناس ۲۰ دلاری شروع می کند.» این تحویلدار باید مراقب تعداد اسکناسها موجود باشد تا بتواند تعیین کند که آیا به میزان کافی اسکناس برای پرداخت به تقاضای صورت گرفته در اختیار دارد یا خیر. به کلاس CashDispenser یک صفت صحیح به نام count تخصیص میدهیم. که در ابتدای کار با ۵۰۰ تنظیم شده است.
در برنامههای واقعی هیچ تضمینی وجود ندارد که مستند نیازها به قدر کافی غنی، دقیق و گویا برای طراحان سیستمهای شی گرا باشد تا آنها هم بتوانند تمام صفات یا حتی تمام کلاسها را تعیین کنند. نیاز به کلاسها، صفات و رفتارهای اضافی در فرآیند طراحی خود را آشکار می کنند. همانطوری که در این مبحث آموزشی پیش میرویم، مبادرت به افزودن، اصلاح و حذف اطلاعاتی در ارتباط با کلاسها در سیستم خود خواهیم کرد.
مدل کردن صفات
در دیاگرام کلاس شکل ۲۴-۴ برخی از صفات کلاسهای موجود در سیستم ATM به نمایش درآمدهاند. جدول شکل ۲۳-۴ در شناسایی این صفات به ما کمک کرده است. برای سادگی کار، شکل ۲۴-۴ نمایشگر وابستگی موجود مابین کلاسها نیست که آنها را در شکل ۲۳-۳ قبلاً عرضه کرده بودیم. از بخشهای قبل بخاطر دارید که در UML، صفات کلاس در بخش میانی دیاگرام کلاس قرار داده می شوند. نام هر صفت و نوع آن توسط یک کولن از هم جدا شده و سپس در برخی از موارد یک علامت تساوی و مقدار اولیه هم بعد از آنها آورده می شود.
به صفت userAuthentiated از کلاس ATM توجه کنید:
userAuthenticated : Boolean = false
در اعلان این صفت سه نوع داده در ارتباط با آن وجود دارد. نام صفت userAuthenticated است. نوع صفت Boolean است. در C++ ، یک صفت را میتوان توسط یک نوع بنیادین همانند bool، int یا double یا یک نوع کلاس عرضه کرد. در شکل ۲۴-۴ از نوعهای بنیادین برای صفات استفاده کردهایم. همچنین مقدار اولیه صفت را هم مشخص کردهایم. صفت userAuthenticated در کلاس ATM دارای مقدار اولیه false است. به این معنی که سیستم در ابتدای کار کاربر را تایید نمی کند. اگر صفتی دارای مقدار اولیه مشخص شدهای نباشد، فقط نام و نوع صفت به نمایش در می آیند. برای مثال صفت accountNumber از کلاس BalanceInquiry از نوع Integer است که مقدار اولیه هم ندارد چرا که مقدار این صفت عددی است که هنوز از آن اطلاعی نداریم. این عدد در زمان اجرای برنامه و براساس شماره حساب وارد شده توسط کاربر جاری ATM تعیین می شود.
شکل ۲۴-۴ | کلاسها همراه با صفات.
شکل ۲۴-۴ حاوی صفاتی برای کلاسهایScreen ، Keypad و DepositSlot نیست. این اجزاء جزء کامپونتهای مهم در سیستم هستند که هنوز طراحی ما قادر به تعیین صفات آنها نشده است. با این وجود در ادامه روند طراحی یا به هنگام پیادهسازی این کلاسها در C++ میتوان به بررسی آنها پرداخت. چنین حالتی در فرآیند مهندسی نرمافزار کاملاً طبیعی است.
همچنین توجه کنید که در شکل ۲۴-۴ صفتی برای کلاس BankDatabase در نظر گرفته نشده است. از فصل سوم بخاطر دارید که در C++، صفات را میتوان با نوعهای بنیادین یا نوعهای کلاس عرضه کرد. چون در مدل کردن دیاگرامهای کلاس این شکل تصمیم بر استفاده از نوعهای بنیادین برای صفات گرفتهایم، این کلاس فعلاً صفتی ندارد. مدل کردن صفت از نوع کلاس بسیار واضح بوده و همانند یک رابطه (در عمل یک ترکیب) مابین کلاس با صفت است. برای مثال، دیاگرام کلاس در شکل ۲۳-۳ نشان می دهد که کلاس BankDatabase در یک رابطه ترکیبی با صفر یا چند شی Account شرکت دارد. از این ترکیب، می توانیم تعیین کنیم که به هنگام پیادهسازی سیستم ATM در C++، ملزم به ایجاد صفتی از کلاس BankDatabase هستیم که صفر یا بیشتر شی Acount در خود نگهداری کند. به همین ترتیب با کلاسهای Screen، Keypad، CashDispenser و DepositSlot رفتار می کنیم. مدل کردن این صفات مبتنی بر ترکیب می تواند سبب افزونگی در شکل۲۴-۴ شود، چرا که ترکیبهای مدل شده در شکل ۲۳-۳ بر این واقعیت تاکید دارند که پایگاه داده حاوی اطلاعاتی در ارتباط با صفر یا بیشتر حساب بوده و ATM مرکب از صفحهنمایش،صفحهکلید، پرداختکنندهپول و شکافسپردهگذاری است. معمولاً طراحان نرمافزاری چنین روابط کامل/ بخش را بصورت ترکیبی بجای صفات مدلسازی می کنند.
دیاگرام کلاس در شکل ۲۴-۴ ساختار پایهای مدل ما را نشان می دهد، اما کامل نیست. در بخش ۱۱-۵ مبادرت به شناسایی وضعیت و فعالیت شی ها در مدل کرده و در بخش ۲۲-۶ به بررسی عملیاتی که شی ها انجام می دهند می پردزایم.
دیدگاهها