فروشگاه دوچرخه
![](https://javacup.ir/wp-content/uploads/2018/03/bike.jpg)
نام و تاریخ مسابقه: مسابقه جاوا_جیکل 5 – 13 بهمن 1396
مباحث: شیگرایی، واسط، استثنا
مالک یک فروشگاه دوچرخه، به مناسبت 50 امین سالگرد تاسیس فروشگاه قصد دارد دوچرخههای خود را رایگان و به مدت محدود به مشتریان خود قرض دهد. او از شما میخواهد برنامهای بنویسید که در مدیریت قرض دادن و برگرداندن دوچرخهها به او کمک کند. بستهی ir.javacup.bike را دانلود کنید. در این بسته تعدادی کلاس و واسط وجود دارد که شما باید کلاس BikeStore را پیادهسازی کنید. توضیح در مورد سایر کلاسها:
- کلاس Bike: تمامی دوچرخههای موجود در انبار و فروشگاه از این نوع هستند.
- واسط BikeProvider: به کمک پیادهسازِ این واسط، دوچرخهای از انبار به فروشگاه منتقل (provide) میشود و دوچرخهی معیوب، تعمیر (repaire) میشود.
- واسط Clock: با استفاده از آن میتوان زمان جاری (متد getCurrentTime) را در قالب یک عدد long بدست آورد.
- کلاس Program: یک سناریوی نمونه و کمکی از اجرای برنامه است.
- کلاس BikeStore: شامل سه ویژگی زیر است که از طریق سازنده کلاس مقداردهی میشوند:
- ویژگی provider از نوع BikeProvider: برای فراهمکردن و تعمیر دوچرخه.
- ویژگی clock از نوع Clock: برای دریافت زمان جاری
- ویژگی expireTime از نوع long: نشاندهندهی مهلت زمان استفاده از دوچرخهها است.
متدهایی که از کلاس BikeStore باید پیادهسازی شوند:
- public Bike borrow()
هنگام قرضدادن یک دوچرخه، فراخوانی میشود:
- اولویت اول: از بین دوچرخههای موجود در فروشگاه، دوچرخهای که نیاز به تعمیر ندارد (برچسب «معیوب» ندارد) را برمیگرداند. در جستجوی بین دوچرخهها، تمامی دوچرخههایی که برچسب «معیوب» دارند، سریعا و همانجا توسط provider تعمیر (فراخوانی متد repair) میشوند. بلافاصله پس از تعمیر، برچسب «معیوب» از دوچرخه برداشته میشود. دوچرخههایی که در این مرحله تعمیر میشوند، نباید برگردانده شوند (در فراخوانی بعدی متد borrow میتوانند برگردانده شوند).
- اولویت دوم: از بین دوچرخههای قرضدادهشده، دوچرخهای را که مهلت استفاده از آن تمام شده است، برمیگرداند.
- اولویت سوم: از provider برای انتقال یک دوچرخه از انبار به فروشگاه (متد provide) کمک گرفته و دوچرخهی فراهمشده توسط آن را برمیگرداند. این کار به دلیل پرهزینهبودن در اولویت آخر قرار گرفته است.
- public void restore(Bike bike, boolean needsRepair)
هنگام پسگرفتن یک دوچرخه، فراخوانی میشود:
- کارشناسی دوچرخه را بررسی کرده و اگر تشخیص دهد که دوچرخه نیاز به تعمیر دارد، به دوچرخه یک برچسب «معیوب» میچسباند. سپس در واسطکاربر برنامه (در صفحهی مربوط به دوچرخهی معیوب) گزینهای را انتخاب میکند که در نهایت باعث فراخوانی متد restore از برنامه با پارامتر needRepair با مقدار true میشود تا معیوببودن دوچرخه در برنامه نیز ثبت شود.
- فراخوانی این متد برای دوچرخهای که متعلق به این فروشگاه نیست، باید باعث پرتاب یک استثنا (exception) شود.
- public int borrowedCount()
تعداد دوچرخههایی را که در حال حاضر قرضدادهشدهاند، برمیگرداند:
- مهلت زمان استفاده از دوچرخه نباید درنظر گرفته شود. یعنی اگر مهلت استفاده از دوچرخهی قرض دادهشدهای تمام شده باشد، دوچرخه همچنان در این متد شمرده میشود.
نکات و راهنمایی:
- در ابتدا هیچ دوچرخهای در فروشگاه وجود ندارد (همه در انبار هستند).
- فرض کنید، دوچرخههایی که قرضدادهشده و مهلت استفاده از آنها تمام شده است در فروشگاه هستند (اولویت دوم در متد borrow).
- در پیادهسازی کلاس BikeStore میتوانید ویژگیهای دلخواه خود را به کلاس اضافه کرده و از آنها استفاده کنید.
- در برنامهی خود هر جا که قرار بود یک نمونه از Bike بسازید، فقط و فقط از متد provide از ویژگی provider استفاده کنید.
- برای دریافت زمان فعلی فقط و فقط از ویژگی clock دادهشده استفاده کنید.
- با اجرای کلاس Program خروجی زیر باید حاصل شود:
2 false 1 true false true 3
آنچه باید آپلود کنید:
یک فایل زیپ شامل بستهی ir.javacup.bike است. به صورتی که وقتی فایل زیپ را باز میکنیم، دقیقا شاخهی ir را ببینیم که درون آن شاخهی javacup و درون آن نیز شاخهی bike قرار دارد. در داخل شاخهی bike فقط و فقط فایل BikeStore.java وجود داشته باشد.
برای داوری تمرین، میتوانید پاسخ خود را در سایت Quera به نحوی که در بالا گفته شد، بارگذاری کنید.
برای آشنایی با نحوهی ارسال پاسخ در Quera، این مطلب را مطالعه کنید.
با ما همراه باشید:
آدرس کانال تلگرام: IranianJavaDevelopers@
آدرس اکانت توییتر: JavaCupIR@
آدرس صفحه اینستاگرام: javacup.ir
آدرس گروه لینکدین: Iranian Java Developers
با سلام و عرض خسته نباشید. لینک فایل بسته پروژه وجود ندارد. لطفاً پیگیری کنید.
سلام
اصلاح شد
ممنون اطلاع دادید.