آموزش جاوا - قسمت دوازدهم

1396/3/26 محمد چنگانی 4345

خوب جلسه پیش در مورد موجودیت های سیستم صحبت کردیم و قرار شد UML اون ها رو طراحی کنیم. برخلاف چیزی که شاید به ذهن خیلی ها برسه UML ها تا آخر پروژه همیشه در حال تغییر کردن و تکمیل شدن هستن پس نیاز نیست خیلی خیلی حساسیت نشون بدیم برای طراحی اون‌ها.

طراحی UML سیستم ما میتونه به صورت زیر باشه. همونجور هم که خودتون میدونید میتونید طراحی‌های مختلفی داشته باشه و قرار نیست طراحی همه سیستم‌ها شبیه هم باشند…

کد جاوا

خوب موجودیت‌های ما:

۱- بانک

۲- کاربر

۳- حساب

۴- تراکنش

که ویژگی‌ها و توانایی اون‌ها و همچنین ارتباط این موجودیت ها با هم در این UML کاملا واضح هست.

نکته: خط قرمزی که در UML وجود دارد بیانگر کلاس داخلی (inner class) هستند که بعدا در موردشون صحبت میکنیم.

نکته: باکس Type رو اگر نگاه کنید، برخلاف سایر باکس‌ها به جای استفاده از علامت C که نمایانگر کلاس هستند از حرف E استفاده شده هست که بیانگر Enum بودن هست.

خوب یکی یکی بریم سراغ موجودیت‌های سیستم:

کد جاوا

کلاس Bank

همون‌طور که میبینید این کلاس در واقع اطلاعات همه کاربران را در خود ذخیره می‌کند. برای اینکار مجموعه یا Set از کاربران در خود دارد. (یادآوری: تفاوت set با List در این بود که در مجموعه‌ها عضو تکراری وجود ندارد و همچنین ترتیب بین عناصر اهمیتی ندارد برخلاف List)

متغییری به نام currentUser وجود دارد که از جنس User هست و قرار هست کاربری که وارد سیستم بانک می‌شود و username و password خود را به درستی وارد کند و در واقع وارد سیستم شود در این متغییر نگهداری شود. در واقع این متغییر به کاربری که وارد سیستم شده است اشاره می‌کند.

تابع login که در واقع اطلاعات وارد شده کاربر را بررسی میکند و در صورت درست بودن کاربر را در خروجی برمیگرداند.

و در انتها تابع menu که وظیفه نمایش منوی کاربری و اطلاعات کاربر هست و همچنین به کاربر اجازه انتخاب موارد و خدمات را می‌دهد.

نکته: در طراحی شاید لازم باشد توابع و یا فیلدهای بیشتری به کلاس‌ها اضافه شوند.

کد جاوا

کلاس User

این کلاس وظیفه نگهداری اطلاعات کاربران هست. برای همین فیلدهای شماره کاربری، نام، فامیل، username و password را در خود دارد. هم چنین نمونه‌ای از کلاس Account که در واقع اطلاعات حساب کاربری در آن ذخیره شده‌اند.

همچنین List از تراکنش‌های که کاربر انجام داده است را باید ذخیره کند. دقت شود چون ترتیب تراکنش‌ها برای ما اهمیت دارد از ساختمان‌داده List استفاده شده‌اند.

متد withdrawal برای پیاده سازی عملیات برداشت وجه از حساب کاربری کاربر هست. متد deposits برای واریز وجه به حساب کاربری هست و در انتها متد transfer برای انتفال وجه بین کاربر و کاربر هدف (targetUser) نوشته شده است.

متد getLastTransactions نیر برای دریافت آخرین تراکنش‌های کاربر طراحی شده است.

کد جاوا

کلاس Account

این کلاس اطلاعات حساب کابری را در خود ذخیره می‌کند. همچنین موجودی کاربر(فیلد Value)

دو متد incValue و decValue برای افزایش و کاهش موجودی حساب کاربری طراحی شده است.

کد جاوا

کلاس Transaction

این کلاس قرار هست که هر عملیاتی که کاربر انجام می‌دهد را در خود نگهداری کند. عملیات‌های برداشت و واریز حساب و همچنین انتقال. اطلاعات شبیه شماره تراکنش تاریخ و نوع تراکنش (Type) کاربر مقصد و مبلغ عملیات به صورت فیلد ذخیره شده‌اند.

همان‌طور که میبینم Type به صورت Enum تعریف شده است ویک کلاس نیست بلکه Enum هست! همچنین اگر دقت شود همیشه میگفتیم در داخل یک فایل فقط یک کلاس یا Enum وجود داشته باشد ولی ما اینجا این قانون را نقض کردیم! که در ادامه توضیح میدیم چرا اینکار رو کردیم.

ولی Enum چی هست؟

در جاوا ساختاری تحت عنوان Enumeration وجود دارد که به اختصار enum گفته می‌شود و مفهوم "شمارش" را در برنامه نویسی در اختیار ما می‌گذارد.

به طور کلی اگه مفهومی دارای چندحالت مختلف ولی ثابت باشند و قرار نباشد در حین برنام هبه صورت داینامیک تغییر کند از مفهوم شمارش باید استفاده شود، شبیه:

چراغ راهنمایی دارای سه حالت سبز، قرمز و زرد است. روزهای هفته شنبه، یکشنبه، دوشنبه، سه شنبه، چهارشنبه، پنج شنبه و جمعه را شامل می شود. یک کشور می تواند توسعه یافته، در حال توسعه و عقب افتاده باشد! اینها مثال هایی هستند که اگر بخواهیم برنامه ای در رابطه با آنها بنویسیم ناگزیر می بایست از enum ها استفاده کنیم. و یا یک مسابقه فوتبال می تواند سه نتیجه متفاوت داشته باشد: حالت اول اینکه تیم الف برنده و تیم ب بازنده است، حالت دوم اینکه تیم ب برنده و تیم الف بازنده است، حالت سوم اینکه نتیجه مسابقه مساوی می شود

در واقع ما وقتی متغییرهای چند وضعیتی داشته باشیم که در طول برنامه تغییر نمی‌کنند باید از مفهوم Enum استفاده کنیم.

کلاس داخلی یا inner class

در واقع ما نباید در داخل یک فایل بیشتر از یه کلاس یا Enum و … داشته باشیم ولی در بعضی مواقع استثناهایی وجود دارد. وقتی یک کلاس یا یک Enum به تنهایی مفهومی نداشته باشد ولی به اندازه کافی مستقل باشد ما به ناچار باید یک کلاس یا Enum تعریف کنیم ولی چون به وجود یه کلاس دیگری نیازمند هست ما آن را داخل آن کلاس میگذاریم.

مثلا همین مثال رو دقت کنید، مفهوم TYPE به تنهایی مفهومی ندارد اگر کلاس Transaction وجود نداشته باشد. یعنی تا زمانی Type مفهوم داشته باشد که در ارتباط با کلاس Transaction باشد. بنابراین ما enum برای Type را به صورت inner می‌نویسم چون وابستگی به کلاس Transaction دارد.

خوب از دوستان تقاضا دارم برای جلسه بعدی این کلاس‌ها را پیاده سازی کنند و در صورتی که بتونند متدها را نیز پیاده سازی کنند خیلی خیلی عالی می‌شود.

آیکن دانلود دانلود PDF قسمت دوازدهم آموزش جاوا

کلمات کلیدی