dir.ilam.ac.irdir.ilam.ac.ir/mozafar/jv/s19/hw7-jv-s19.docx · web viewبه علاوه، حقوق...

5
م خدا به ناوا جا سیس برنامهنویینات در تمر سری هفتملی ترم دوم سال تحصی98 - 97 حمدیس: مظفر بگ م مدرمه اینشگا دا1 . وراثتترونیک می الک : شرکت دنا محاسبهیستمد که س خواهدان را راهوق کارمن ی خودکار حق وع(کت دارای دو ن ر(د. این شدازی کن انران میرمند است. مدی کا یک ضریب دارایوق مدیروه، حقریافت کنند. به عوق دش نیز حقی ساعات ورز خواهند برا1.5 ه((ت ک(( اسوق ضرب میاسبات در حقز پایان مح بعد ا شود.دسین مهن نیز میبه( ار محاس( اعات ک(زء س(ک ج( ترافیات معطلی درند که ساع خواه شود. همدسین، مهنین چن200 افت میز دری کار نیوان حق سختیر به عن دت زیر است:ن شرکت مطابق لیسرمندانند. لیست کا ک ورزش ترافی کفته ساعات کار در همزد هر ساعت دست نوعنوادگی نام خا نام10 - 45 120.00 مدیر هاشمی علی5 - 55 255.50 مدیر موسوی حسن- 8 7 220.00 مهندسنی حسی زهرا- 12 42 124.50 مهندسمی کری فاطمه- 5 38 248.00 مهندس رضوی حسین- 7 44 320.00 مهندس احمدیحمد مa . س ابتدا، کEmployee دهای( فیل امل(س شد. این ک( اده کنی( را پیfirstName, lastName, id , salary , basePay وworkHours است. فیلدbasePay خص می(ر را مشا(اعت ک( دستمزد هر سد(د. فیل( کنsalary وق( حقانه ماه. متد انتزاعی محاسبه شودست و بایدرمند ا ی کاweeklyPay محاسبه میرمند را دستمزد هفتگی کا کند.b . س حال، کManager سه از ک(د ک( اده کنی( را پیEmployee ارث میری( بد. این( کن افه(د اض( فیلس دارای ک یsportHours قت کنید کهر است. د ساعت کا ساعت ورزش نصف یک. دستمزد هر استweeklyPay سی باید بازنوی شود.c . س کEngineer س از ک نیزEmployee ارث میری( بد. این( کن افه(د اض( فیلس دارای ک یtrafficHours ت.( اس ترافیکت معطلی در دستمزد هر ساع70 قت کنید کهر است. د ساعت کا یک% weeklyPay سی شود. باید بازنویd . ا متدهایسهام ک برای تمequals، toString ء سازنده ، اجزاه کنید. پیادض و کپی را کامل، پیش فر یe . برنامه در یک آرایه از ی اصلیEmployee ک((پس، در ی((د. س(( کنیاردهی مقد لیست فوق مطابقید و آنرایجاد کن را ا حلقه یfor چاپ کنید. را دریافت آنهاضافهدان و میزان ا کارمناموق تم حق2 . ی:ءگرای شید( کنید که متادهسازی پیزم را بهگونهای سهای کmain ً ا(ده و ثانی(ل ش( ا کامپای(دون خط( بً ر او( زیست باشد.شده الی که گفته به شکً یقا اجرای آن دق خروجیpublic static void main(String[] args) { A[] elements = { new D(), new A(), new C(), new B() }; for (int i = 0; i < elements.length; i++) { System.out.println(elements[i].method1()); System.out.println(elements[i].method2()); System.out.println(); } } خروجینتظار: مورد اD1 D1B2 A1 A2 C1 C1B2

Upload: others

Post on 18-Jan-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: dir.ilam.ac.irdir.ilam.ac.ir/mozafar/jv/s19/Hw7-jv-s19.docx · Web viewبه علاوه، حقوق مدیر دارای یک ضریب 1.5 است که بعد از پایان محاسبات

به نام خدادانشگاه ایالممدرس: مظفر بگ محمدی97-98ترم دوم سال تحصیلی سری هفتم تمرینات درس برنامه نویسی جاوا

اندازی کند. این ش))رکت دارای دو ن))وعی خودکار حقوق کارمندان را راهخواهد که سیستم محاسبه: شرکت دنا الکترونیک می وراثت.1 اس))ت ک))ه1.5خواهند برای ساعات ورزش نیز حقوق دریافت کنند. به عالوه، حقوق مدیر دارای یک ضریب کارمند است. مدیران می

خواهند که ساعات معطلی در ترافی))ک ج))زء س))اعات ک))ار محاس))به نیز میمهندسینشود. بعد از پایان محاسبات در حقوق ضرب میکنند. لیست کارمندان شرکت مطابق لیست زیر است: دالر به عنوان حق سختی کار نیز دریافت می200چنین، مهندسین شود. هم

ورزش ترافیک

ساعات کار در هفته دستمزد هر ساعت نوع نام خانوادگی نام

10 - 45 120.00 مدیر هاشمی علی5 - 55 255.50 مدیر موسوی حسن- 8 7 220.00 مهندس حسینی زهرا- 12 42 124.50 مهندس کریمی فاطمه- 5 38 248.00 مهندس رضوی حسین- 7 44 320.00 مهندس احمدی محمد

a. ابتدا، کالسEmployee را پی))اده کنی))د. این کالس ش))امل فیل))دهای firstName, lastName, id , salary , basePay و workHours است. فیلد basePayکن)د. فیل))د دستمزد هر س))اعت ک))ار را مش))خص میsalaryحق))وق

کند. دستمزد هفتگی کارمند را محاسبه میweeklyPayی کارمند است و باید محاسبه شود. متد انتزاعی ماهانهb. حال، کالسManager را پی))اده کنی))د ک))ه از کالس Employeeی کالس دارای فیل))د اض))افهکن))د. اینب))ری می ارث

sportHours است. دستمزد هر ساعت ورزش نصف یک ساعت کار است. دقت کنید که weeklyPayباید بازنویسی شود.

c. کالسEngineer نیز از کالس Employeeی کالس دارای فیل))د اض))افهکن))د. اینب))ری می ارثtrafficHours.اس))ت باید بازنویسی شود. weeklyPay% یک ساعت کار است. دقت کنید که 70دستمزد هر ساعت معطلی در ترافیک

d. برای تمام کالسها متدهایequals، toStringی کامل، پیش فرض و کپی را پیاده کنید. ، اجزاء سازندهe.ی اصلی یک آرایه از در برنامهEmployeeرا ایجاد کنید و آنرا مطابق لیست فوق مقداردهی کنی))د. س))پس، در ی))ک

حقوق تمام کارمندان و میزان اضافه دریافت آنها را چاپ کنید. forی حلقه زی))ر اوالً ب))دون خط))ا کامپای))ل ش))ده و ثانی))اmainًکالس های الزم را به گونه ای پیاده سازی کنید که مت))د شیءگرایی: .2

خروجی اجرای آن دقیقاً به شکلی که گفته شده است باشد.public static void main(String[] args) {      A[] elements = {          new D(), new A(), new C(), new B()      };      for (int i = 0; i < elements.length; i++) {          System.out.println(elements[i].method1());          System.out.println(elements[i].method2());          System.out.println();      }  }  

مورد انتظار:خروجیD1D1B2 

A1 A2 

C1 C1B2 

Page 2: dir.ilam.ac.irdir.ilam.ac.ir/mozafar/jv/s19/Hw7-jv-s19.docx · Web viewبه علاوه، حقوق مدیر دارای یک ضریب 1.5 است که بعد از پایان محاسبات

A1 A1B2  

در پیاده سازی خود، موارد زیر را باید رعایت کنید. رعایت نکردن هر یک از این موارد، موجب کسر نمره می شود: به جز کالسA.سایر کالس ها تنها یک متد می توانند داشته باشند ،.هیچ کالس و متد اضافه ای ایجاد نکنید( هیچ ویژگیField.ای در هیچ کالسی ایجاد نکنید )

یک فروشگاه لباس برای نگه داری اطالعات لباس های خ))ود از ی))ک برنام))ه ج))اوا اس))تفاده می کن))د. اینفروشگاه لباس: .3، پیراهنSocks( دارد که برای هر یک، یک کالس در نظر گرفته شده است: جوراب Clothingفروشگاه چهار نوع لباس )

Shirtشلوار ، Pantsژاکت ، Jacket

)بهار، تابستان، پاییز وseason(، فصل مناسب برای پوشیدن لباس: nameهر لباس نیز دارای سه ویژگی مشترک، نام )( است.basePriceزمستان( و قیمت پایه )

یک رفتار مهم و تغییرپذیر در این برنامه، محاسبه قیمت هر لباس با توجه به تخفیف های مختلف )زمستانه، تابستانه، شب یلدا( است که هم اکنون با این منطق پیاده سازی شده است:…و

:تخفیف و لباس های زمستانه٪50 تخفیف، لباس های تابستانی: ٪۴0لباس های بهاری: در تخفیف تابستانه تخفیف.30٪

:تخفیف و لباس های٪50 تخفیف، لباس های زمستانی: ٪۴0لباس های پاییزی: در تخفیف زمستانه تخفیف دیگر نیز برخوردار هستند؛ یعنی یک ژاکت٪10 تخفیف. به عالوه تمامی ژاکت ها از ٪25تابستانی:

دیگر از قیمتش کاسته٪10 از قیمتش کسر می شود چون لباس پاییزی است و سپس ٪۴0پاییزی ابتدا می شود.

:25 تخفیف و بقیه ی لباس ها ٪20 تخفیف، تمامی جوراب ها: ٪10تمامی ژاکت ها: در تخفیف شب یلدا٪ تخفیف.

(disountType با ورودی نوع تخفیف )getPrice یک متد به نام Clothingبرنامه نویس، در نسخه قدیمی این برنامه در کالس قرار داده بود که با توجه به نوع تخفیف، نوع لباس و ویژگی های لباس، قیمت نهایی لباس را محاسبه می کرد:

public long getPrice(DiscountType discountType) {      if (discountType == DiscountType.YALDA) { // return with YALDA discount      } else if (discountType == DiscountType.SUMMER) { // return with SUMMER discount      } else if (discountType == DiscountType.WINTER) { // return with WINTER discount      }      return price;  }  

حال پس از چند ماه مسئول فروشگاه از او می خواهد چند نوع تخفیف جدید برای مناسبت های مختلف اضافه ک))رده و رفت))ار چن))د و تغی))یراتgetPriceنوع تخفیف موجود را تغییر دهد. برنامه نویس متوجه مسئله ای می شود، با اضافه کردن این تغییرات به مت))د

احتمالی آینده، این متد رفته رفته بزرگ تر و ناخواناتر می شود. ایده ی جدیدی به سراغ ذهن برن))امه نویس می آی))د ک))ه ن))تیجه ی آن است ولی به دلیل تسلط کافی نداشتن از دانشجویان دانش)گاه ایالم کم)ک گرفت)ه ت))ا ای)ده ی خ)ود راgetPriceحذف کردن متد

او می خواهد وظیفه محاس))به ی را دانلود کنید. com.example.shopبسته پیاده سازی کند. برای مشاهده ی نسخه ی فعلی ایجاد کنید:DiscountStrategyهر تخفیف را به کالس هایی مجزایی بسپارد. برای این کار ابتدا یک واسط به نام

Page 3: dir.ilam.ac.irdir.ilam.ac.ir/mozafar/jv/s19/Hw7-jv-s19.docx · Web viewبه علاوه، حقوق مدیر دارای یک ضریب 1.5 است که بعد از پایان محاسبات

    1. public interface DiscountStrategy {  2.     long priceByDiscount(Clothing clothing);  3. }  

هر یک ازpriceByDiscountسپس به ازای هر نوع تخفیف، یک کالس ایجاد کنید که این واسط را پیاده سازی می کند. در متد این کالس ها باید رفتار نوع تخفیف مربوطه را پیاده سازی کنید:

برای تخفیف تابستانه: کالسSummerDiscountStrategy برای تخفیف زمستانه: کالسWinterDiscountStrategy برای تخفیف شب یلدا: کالسYaldaDiscountStrategy

پیاده سازی کنید:نوع تخفیف فعلی متد زیر را برای دریافت و ثبت Clothingدر کالس public void setDiscountStrategy(DiscountStrategy discountStrategy) { // TODO set discountStrategy  }  

مشخص شده، قیمت با تخفیفdiscountStrategy جدید )که دیگر پارامتر ورودی ندارد( با استفاده از getPriceحال در متد را محاسبه کرده و برگردانید:

public long getPrice() { // TODO get price by considering discountStrategy  }  

از کالسgetPriceمتد توجه: ای تعیین نشده بود، باید قیمت پایه ی لباس برگردانده شود. discountStrategyاگر هیچ Clothingنباید از نحوه ی محاسبه ی تخفیف های مختلف خبر داشته باشد. به عبارت دیگر، تمام منطق محاسبه ی هر نوع تخفیف

باید در کالس مربوط به خود نوشته شود.مثال:

Jacket linenCoat = new Jacket("Linen Coat", Season.FALL, 100000);  System.out.println("Linen Coat: " + linenCoat.getPrice());  linenCoat.setDiscountStrategy(new YaldaDiscountStrategy());  System.out.println("Linen Coat with Yalda discount: " + linenCoat.getPrice());  linenCoat.setDiscountStrategy(new WinterDiscountStrategy());  System.out.println("Linen Coat with Winter discount: " + linenCoat.getPrice());  Clothing woolenSocks = new Pants("Woolen Socks", Season.WINTER, 10000);  System.out.println("Woolen Socks: " + woolenSocks.getPrice());  woolenSocks.setDiscountStrategy(new SummerDiscountStrategy());  System.out.println("Woolen Socks with Summer discount: " + woolenSocks.getPrice());  woolenSocks.setDiscountStrategy(new WinterDiscountStrategy());  System.out.println("Woolen Socks with Winter discount: " + woolenSocks.getPrice());  

خروجی:1. Linen Coat: 1000002. Linen Coat with Yalda discount: 900003. Linen Coat with Winter discount: 540004. Woolen Socks: 100005. Woolen Socks with Summer discount: 70006. Woolen Socks with Winter discount: 5000  

Page 4: dir.ilam.ac.irdir.ilam.ac.ir/mozafar/jv/s19/Hw7-jv-s19.docx · Web viewبه علاوه، حقوق مدیر دارای یک ضریب 1.5 است که بعد از پایان محاسبات

برای یک شهرک کوچک، قصد داریم با کمک دانشجویان دانشگاه ایالم بخشی از یک برن))امه ی س))فارشتاکسی آنالین: .4 را دانلود کنید. کارشناسان ترافی)ک، این com.example.onlineTaxi تاکسی آنالین را پیاده سازی کنیم. ابتدا، بسته

تقسیم بندی کرده اند و همان طور که در شکل زیر دیده می ش))ود، ب)رای۴ تا 0 ناحیه ی اصلی با شماره های 5شهرک را به  رفتن از هر ناحیه به ناحیه دیگر، ضریبی تعیین کرده اند که در محاسبه ی هزینه ی نهایی مورداستفاده قرار می گیرد.

در اختیار شما قرارگرفته است. برایDistanceMap، در کالس distanceبرای سادگی، این اطالعات در قالب ماتریس دوبعدی ( وجود دارد و با توجه روش انتخاب شده توس))ط مس))افر، ه))زینه یTripMethodسفارش تاکسی از این برنامه، سه روش مختلف )

سفر وی محاسبه شده و نمایش داده می شود.

محاسبه ی قیمت برای هر یک از این روش ها، با توجه به جدول ضرایب باال و مقادیر موجود در ماتریس فاصله ها، به این صورت باشد، هزینه ی نهایی برابر است باXمحاسبه می شود: اگر مقدار )هزینه ی پایه * مقدار استخراج شده از ماتریس فاصله ها( برابر با

X * ratio  

با توجه به ورودی های مسئله از جدول باال انتخاب می شود. به طور مثال، اگر کاربر قصد سفارش تاکسی اقتصادیratioکه مقدار در هوای بارانی و ساعت غیر اوج ترافیک را داشته باشد، هزینه ی سفارش برابر است با:3 به 2برای رفتن از ناحیه

X = 5 * 3 = 1515 * 1.2 = 18  

نکات قابل توجه: کالسTripHandler باید singleton باشد و تنها نمونه ی آن، از طریق متد getInstance.قابل دسترس باشد در کالسTripHandler متد calcPrice:را باید پیاده سازی کنید که دو ورودی دارد

Page 5: dir.ilam.ac.irdir.ilam.ac.ir/mozafar/jv/s19/Hw7-jv-s19.docx · Web viewبه علاوه، حقوق مدیر دارای یک ضریب 1.5 است که بعد از پایان محاسبات

type نوع سفارش را تعیین می کند. مقادیر مجاز برای این ورودی برابر با :bike یا economic و یا vip.است انتخاب ش))ده و در محاس))به ی هزین))ه اس))تفادهTripMethodبا توجه به مقدار این ورودی، باید نوع مناسب از

شود.:params از نوع TripParamاست که شامل ویژگی های الزم برای محاسبه ی ه)زینه ی س)فر )ش)امل ش)ماره

ناحیه مبدأ و مقصد، زمان اوج ترافیک بودن یا نبودن و بارانی بودن یا نبودن هوا( است. به س))ازنده ی این کالسدقت کنید.

به ازای هر روش سفارش تاکسی، یک پیاده سازی برای واسطTripMethod:باید انجام دهید EconomicTripMethod، VipTripMethod و BikeTripMethod متدcalcPrice در ورودی یک شیء از نوع TripParamمی گیرد و هزینه ی سفر را با توجه به ورودی و روش

سفارش تاکسی، محاسبه می کند. به عبارت دیگر منطق محاس))به ی هزین))ه ب))رای ه))ر ن))وع س))فارش در این مت))د ، این وظیف))ه ب))ه نم))ونه ی مناس))ب از یکی ازTripHandler از calcPriceپیاده س))ازی می ش))ود و در مت))د

سپرده می شود.TripMethodپیاده سازی های

مثال:TripHandler taxi = TripHandler.getInstance(); 

   غیر بارانی هوای و ترافیک اوج ساعت  در1  به1 ناحیه از ویژه //سفرint price = taxi.calcPrice("vip", new TripParam(1, 1, true, false));  int price2 = new VIPTripMethod().calcPrice(new TripParam(1, 1, true, false));  System.out.println(price + " = " + price2); 

  بارانی هوای در و ترافیک اوج ساعت  در4  به2 ناحیه از موتور با //سفرprice = taxi.calcPrice("bike", new TripParam(2, 4, true, true));  price2 = new BikeTripMethod().calcPrice(new TripParam(2, 4, true, true));  System.out.println(price + " = " + price2);  

خروجی:20000 = 20000 12000 = 12000