Assignment2.pdf

‫تمریه سری ديم‬
‫درس بروامه وًیسی شیءگرا‬
‫مًعد ارسال‪ :‬ديشىبه ‪ 24‬آبان ‪1389‬‬
‫کاهیار اللَْردی‬
‫تمریه سری ديم بروامه سازی شیءگرا‬
‫مهلت تحًیل‪ :‬ديشىبه ‪ 42‬آبان ‪8319‬‬
‫نکات کلی‬
‫‪ ‬در ایي توزیي ضوا تزًاهِی قاتل اجزائی ًویًَیسیذ ٍ تٌْا کاری کِ اًجام هیدّیذ پیادُساسی چٌذ کالس‬
‫است‪.‬‬
‫‪ ‬هطخصات کلی توزیي ّا تِ ایي ضزح است‪:‬‬
‫نام کالس‬
‫نام فایل‬
‫نمره‬
‫توزیي ‪1‬‬
‫‪Date‬‬
‫‪Date.java‬‬
‫‪33‬‬
‫توزیي ‪2‬‬
‫‪Vector‬‬
‫‪Vector.java‬‬
‫‪15‬‬
‫توزیي ‪3‬‬
‫‪Path‬‬
‫‪Path.java‬‬
‫‪15‬‬
‫توزیي ‪4‬‬
‫‪JobScheduler‬‬
‫‪Job‬‬
‫‪JobScheduler.java‬‬
‫‪43‬‬
‫‪ّ ‬ذف اس ایي توزیي‪ ،‬آسهایص درک ضوا اس هفَْم ضیءگزایی ٍ تکارگیزی ایي هفَْم در ػول است‪ .‬پس اس ایي‬
‫توزیي ضوا تایذ تزاحتی تتَاًیذ هذلْای سادُ جْاى ٍاقؼی را تصَرت ضیء گزا هذل کٌیذ‪.‬‬
‫‪ ‬تزای ارسال توزیي تِ آدرس سیز هزاجؼِ کٌیذ‪:‬‬
‫‪http://ce.sharif.edu/~shaikhha/java901‬‬
‫تَجِ ًواییذ کِ تایذ ّز کذام اس فایلْای ‪ .java‬را تغَر جذاگاًِ ارسال ًواییذ‪.‬‬
‫‪ ‬هَػذ تحَیل ساػت ‪( 11:59‬ظْز) رٍس دٍضٌثِ ‪ 24‬آتاى ‪ 1389‬تَدُ ٍ تِ ّیچ ػٌَاى توذیذ ًخَاّذ ضذ‪.‬‬
‫‪ ‬تأخیز تا ‪ 1‬ساػت‪ ،‬تِ اسای ّز ‪ 3‬دقیقِ هَجة کسز ضذى ‪ً %1‬وزُ‪ ،‬اس ‪ 1‬ساػت تا ‪ 24‬ساػت هَجة کسز ضذى‬
‫تا ‪ 48‬ساػت تاػث کسز ضذى ‪ً %53‬وزُ هیضَد‪ .‬تأخیز تیطتز اس ‪ 48‬ساػت قاتل قثَل ًیست‪.‬‬
‫‪ ‬قغغ تَدى ایٌتزًت خَاتگاُ‪ ،‬کٌذی پایگاُ ایٌتزًتی داًطکذُ‪ ،‬توام ضذى کارت ایٌتزًت ٍ … ّیچکذام دلیل‬
‫هَجْی تزای تأخیز ًیستٌذ‪ .‬تٌاتزایي پیطٌْاد هیضَد جَابّای خَد را در دانشکده ارسال کٌیذ‪.‬‬
‫‪ ‬تالش تزای استفادُ اس هٌاتغ سیستن هاًٌذ کارت صذا ٍ پزیٌتز ٍ ًَضتي تِ فایل ٍ ‪ ...‬هٌجز تِ دریافت ًوزُی‬
‫صفز در ایي توزیي هیضَد‪.‬‬
‫توزیي سزی دٍم تزًاهِ ساسی ضیءگزا‬
‫‪ً %23‬وزُ‪ ،‬اس ‪ 24‬ساػت تا ‪ 25‬ساػت‪ ،‬تِ اسای ّز ‪ 2‬دقیقِ هَجة کسز ضذى ‪ً %1‬وزُی دیگز ٍ تیي ‪ 25‬ساػت‬
‫‪1‬‬
‫‪ ‬کالسّا ٍ هتذّای گفتِ ضذُ در آىّا حذاقلّای السم ّستٌذ‪ .‬یؼٌی ضوا هیتَاًیذ تزای راحتتز ضذى پیادُ‪-‬‬
‫ساسیتاى یا ضیگزاتز ضذى کذتاى تِ ایي کالسّا هتذّای دیگزی اضافِ کٌیذ یا تِ کل توزیي کالسّای‬
‫دیگزی اضافِ کٌیذ‪ٍ .‬لی دقت داضتِ تاضیذ کِ کالسّای گفتِ ضذُ ٍ هتذّای آًْا تایذ تِ ّویي ضکل‪ ،‬هَجَد‬
‫تاضٌذ‪.‬‬
‫‪ ‬سَاالت خَد را تا فزستادى ایویل تِ آدرس ‪ [email protected]‬هغزح کٌیذ‪.‬‬
‫‪ً ‬حَُ تحَیل حضَری توزیي هتؼاقثاً اػالم خَاّذ ضذ‪.‬‬
‫توزیي سزی دٍم تزًاهِ ساسی ضیءگزا‬
‫‪2‬‬
‫تمرین ‪ : 1‬تاریخ میالدی‬
‫کالس ‪ Date‬را پیادُ ساسی کٌیذ‪.‬‬
‫جْت اعالػات تیطتز در هَرد تاریخ هیالدی تِ آدرس سیز هزاجؼِ کٌیذ‪:‬‬
‫‪http://en.wikipedia.org/wiki/Gregorian_calendar‬‬
‫تَجِ داضتِ تاضیذ کِ تزخی اس سال ّا کثیسِ ّستٌذ ٍ هاُ دٍم تِ جای ‪ 28‬رٍس‪ 29 ،‬رٍس خَاّذ داضت‪ ،‬تزای اعالػات‬
‫تیطتز ٍ یک ضثِ کذ تزای تزرسی کثیسِ تَدى یک سال هیالدی(لشٍهاً ‪ 4‬سال یکثار ًیست) تِ آدرس سیز هزاجؼِ کٌیذ‪:‬‬
‫‪http://en.wikipedia.org/wiki/Leap_year‬‬
‫‪class Date‬‬
‫{‬
‫;)‪Date(int day,int month,int year‬‬
‫;)‪Date(String str‬‬
‫;)‪Date add(Date date‬‬
‫;)‪Date sub(Date date‬‬
‫;)‪int daysTo(Date date‬‬
‫;)(‪boolean isLeap‬‬
‫;)(‪String dateToString‬‬
‫}‬
‫‪ ‬رٍس ٍ هاُ ٍ سال را تا ‪ Constructor‬اٍل هقذار دّی کٌیذ‪.‬‬
‫}‪{day}/{month}/{year‬‬
‫تِ عَر هثال‪:‬‬
‫‪13/7/2003‬‬
‫‪14/8/2008‬‬
‫توزیي سزی دٍم تزًاهِ ساسی ضیءگزا‬
‫‪ ‬تزای پیادُ ساسی ‪ Constructor‬دٍم‪ٍ ،‬رٍدی را تِ فزهت سیز در ًظز تگیزیذ‪:‬‬
‫‪3‬‬
‫‪ ‬ضزٍع تاریخ را ‪ 1/1/0‬تگیزیذ‪.‬‬
‫‪ ‬دٍ هتذ ‪ sub ٍ add‬تِ هقذار دادُ ضذُ تاریخ را جاتجا هی کٌٌذ ٍ یک ضیء جذیذ حاٍی تاریخ هحاسثِ ضذُ‬
‫تز هی گزداًٌذ‪ .‬دقت کٌیذ کِ ًثایذ ضیء کًٌَی را تغییز دّیذ‪.‬‬
‫‪28/2/2000 + 4/1/0 ‬‬
‫‪3/3/2000‬‬
‫‪2/5/2000 + 4/5/21 ‬‬
‫‪4/9/2021‬‬
‫‪2/5/2000 - 4/5/21  29/12/1978‬‬
‫‪ ‬هتذ ‪ daysTo‬تؼذاد رٍسّای تاقیواًذُ تا تاریخ قیذ ضذُ را تز هی گزداًذ‪.‬‬
‫‪‬‬
‫هتذ ‪ isLeap‬در صَرتی کِ سال کًٌَی کثیسِ تاضذ‪ true ،‬تز هی گزداًذ‪.‬‬
‫‪ ‬هتذ ‪ dateToString‬تِ فزهت ٍرٍدی ساسًذُ دٍم تایذ تاریخ را تثذیل کٌذ‪:‬‬
‫‪18/5/2010‬‬
‫توزیي سزی دٍم تزًاهِ ساسی ضیءگزا‬
‫‪4‬‬
‫ بردار‬: 2 ‫تمرین‬
.‫ را پیادُ ساسی کٌیذ‬Vector ‫کالس‬
class Vector
{
Vector(double u, double v, double w, int coordination);
Vector(Vector v);
Vector add(Vector v);
Vector sub(Vector v);
double dotProduct(Vector v);
Vector crossProduct(Vector v);
String getCartesian();
String getCylindrical();
String getSpherical();
}
‫توزیي سزی دٍم تزًاهِ ساسی ضیءگزا‬
:‫ پاراهتز سَم ساسًذُ اٍل ًَع هختصات تزدار را تؼییي هی کٌذ‬
5
Coordination
Type
1
Cartesian
2
Cylindrical
3
Spherical
:‫ جْت اعالػات تیطتز در هَرد ًوایص ّای هختلف تزدار تِ آدرس سیز هزاجؼِ کٌیذ‬
http://en.wikipedia.org/wiki/Vector_fields_in_cylindrical_and_spherical_co
ordinates
.‫ ساسًذُ دٍم یک ضیء را تا هختصات ضیء دادُ ضذُ در پاراهتز هقذاردّی اٍلیِ هی کٌذ‬
.‫ ّیچ تغییزی ًثایذ در ضیء کًٌَی ایجاد ضَد‬.‫ هجوَع ٍ تفاضل دٍ تزدار را تز هی گزداًٌذ‬sub ٍ add ‫ دٍ هتذ‬
‫‪ ‬دٍ هتذ ‪ crossProduct ٍ dotProduct‬ضزب ًقغِ ای ٍ ضزب تزداری را هحاسثِ هی کٌٌذ‪.‬‬
‫‪ ‬سِ هتذ ‪ getSpherical ٍ getCylindrical ٍ getCartesian‬یک سِ تایی را تِ ػٌَاى خزٍجی‬
‫ًوایص هی دٌّذ کِ ّز کذام ًوایطگز تزدار در دستگاُ هختصات هَرد ًظز ّستٌذ‪ .‬تواهی اػذاد تایذ ‪ 4‬رقن‬
‫اػطار دقت داضتِ تاضٌذ‪:‬‬
‫)‪(24.0000,1200.1620,43.0261‬‬
‫‪ ‬در دستگاُ هختصات کزٍی ٍ استَاًِ ای‪ ،‬توام ساٍیِ ّا را تثذیل تِ کَچکتزیي ساٍیِ هثثت کٌیذ‪.‬‬
‫‪ ‬تحت ضزایغی کِ یک ساٍیِ ّز هقذار دلخَاّی هی تَاًذ تاضذ‪ ،‬هقذار صفز را تزای آى در ًظز تگیزیذ‪.‬‬
‫توزیي سزی دٍم تزًاهِ ساسی ضیءگزا‬
‫‪6‬‬
‫تمرین‪ :3‬مسیر‬
‫کالس ‪ Path‬را پیادُ ساسی کٌیذ‪.‬‬
‫‪class Path‬‬
‫{‬
‫;)(‪Path‬‬
‫;)‪Path addPoint(int x,int y,int z‬‬
‫;)‪boolean removePoint(int number‬‬
‫;)‪void addPath(Path p‬‬
‫;)(‪double getLength‬‬
‫;)(‪double getDistance‬‬
‫;)‪boolean isLonger(Path p‬‬
‫}‬
‫‪ ‬ساسًذُ ی ایي کالس یک هسیز خالی را ایجاد هی کٌذ‪( .‬عَل هسیز خالی صفز است)‬
‫‪ ‬هتذ ‪ addPoint‬یک ًقغِ را تِ ضیء کًٌَی اضافِ هی کٌذ‪ ،‬سپس ّویي ضیء را تزهی گزداًذ‪.‬‬
‫تا ایي تکٌیک هی تَاًیذ در یک خظ چٌذ ًقغِ تِ یک ضیء اضافِ کٌیذ‪:‬‬
‫;)‪myPath.addPoint(7,2,3).addPoint(2,6,4).addPoint(3,4,2‬‬
‫;)‪myPath.addPoint(2,3,4‬‬
‫‪ ‬هتذ ‪ً removePoint‬قغِ ‪ number‬ام را اس هسیز حذف هی کٌذ‪( .‬تا ضزٍع اس اًذیس صفز) اگز چٌیي ًقغِ‬
‫‪ ‬هتذ ‪ addPath‬یک ضیء ‪ Path‬را تِ ضیء کًٌَی اضافِ هی کٌذ‪ ،‬تِ ایٌصَرت کِ ًقغِ اتتذایی آى را پس اس‬
‫ًقغِ اًتْایی ایي ضیء اضافِ هی کٌین ٍ تِ تزتیة ًقاط تؼذی را ًیش اضافِ هی کٌین‪.‬‬
‫‪ ‬هتذ ‪ getLength‬هسافتی کِ تا ػثَر اس توام ًقاط عی هی ضَد را تز هی گزداًذ‪.‬‬
‫‪ ‬هتذ ‪ getDistance‬فاصلِ ًقغِ اتتذایی ٍ ًقغِ اًتْایی را تز هی گزداًذ‪.‬‬
‫‪ ‬دٍ هتذ ‪ getDistance ٍ getLength‬تایذ هقذار خَد را تا ‪ 4‬رقن اػطار تزگزداًٌذ‪.‬‬
‫توزیي سزی دٍم تزًاهِ ساسی ضیءگزا‬
‫ای ٍجَد ًذاضت فقظ هقذار ‪ false‬را تزهی گزداًذ ٍ در غیز ایٌصَرت ‪ true‬تزهی گزداًذ‪.‬‬
‫‪7‬‬
ُ‫ تز هی گزداًذ کِ هسافتی کِ ایي ضیء عی هی کٌذ تیطتز اس ضیء داد‬true ‫ در صَرتی‬isLonger ‫ هتذ‬
.‫ضذُ در هتذ تاضذ‬
‫ مدیریت کارها‬:4‫تمرین‬
‫ ّز دٍ کالس تایذ در یک فایل تاضٌذ ٍ فقظ‬.‫ را پیادُ ساسی کٌیذ‬JobScheduler ٍ Job ‫در ایي توزیي تایذ دٍ کالس‬
.‫ تاضذ‬Public ‫ تایذ‬JobScheduler
public class JobScheduler
{
JobScheduler(int hour, int weekday);
void setTime(int hour, int weekday);
boolean addJob(Job j);
boolean isEmpty();
int cleanJobs();
int removeAllJobs();
int getTotalHours();
String doNextJob();
int getJobsRemaining();
}
class Job
{
Job(String s, int hour, int weekday, int duration, int priority);
void setName(String s);
String getName();
‫توزیي سزی دٍم تزًاهِ ساسی ضیءگزا‬
String jobSchedulerToString();
8
‫;)‪void setStart(int hour, int weekday‬‬
‫;)(‪int getStartHour‬‬
‫;)(‪int getStartDay‬‬
‫;)‪void setDuration(int hours‬‬
‫;)(‪int getDuration‬‬
‫;)‪void setPriority(int p‬‬
‫;)(‪int getPriority‬‬
‫;)(‪String jobToString‬‬
‫}‬
‫کالس ‪:Job‬‬
‫‪ ‬ساسًذُ ‪ Job‬توام هطخصاتی کِ تَسظ هتذّای دیگز تؼییي هی ضًَذ را یکجا در یک ضیء قزار هی دّذ‪.‬‬
‫‪ ‬هتذ ‪ setName‬یک رضتِ را تِ ػٌَاى ًام کار تؼییي هی کٌذ‪.‬‬
‫‪ ‬هتذ ‪ً getName‬ام کار را تز هی گزداًذ‪.‬‬
‫‪ ‬هتذ ‪ setStart‬سهاى ضزٍع کار را تؼییي هی کٌذ‪ .‬پاراهتز ‪ weekday‬یک ػذد اس ‪ 3‬تا ‪ 6‬است کِ ‪ 3‬تِ هؼٌای‬
‫ضٌثِ ٍ ‪ 6‬جوؼِ است‪.‬‬
‫‪ ‬هتذ ‪ getStartHour‬ساػت ضزٍع کار را تز هی گزداًذ‪.‬‬
‫‪ ‬هتذ ‪ getStartDay‬ػذدی ًوایطگز رٍس ّفتِ کِ کار در اًجام هی ضَد را تز هی گزداًذ‪.‬‬
‫‪ ‬هتذ ‪ setDuration‬هذت سهاى کار را تؼییي هی کٌذ‪.‬‬
‫‪ ‬هتذ ‪ getDuration‬هذت سهاى کار را تز هی گزداًذ‪.‬‬
‫‪ ‬هتذ ‪ setPriority‬اٍلَیت کار را تؼییي هی کٌذ‪ .‬کاری هْن تز است کِ هقذار ػذدی اٍلَیت آى کوتز تاضذ‪.‬‬
‫‪ ‬هتذ ‪ jobToString‬یک رضتِ ًطاًگز کار کًٌَی را تز هی گزداًذ‪:‬‬
‫‪{name}: from {weekday} {start}, for {duration} hours with #{priority} priority.‬‬
‫هثال‪:‬‬
‫‪Job1: from Wednesday 17, for 2 hours with #1 priority.‬‬
‫تزای کارّای یک ساػتِ‪ ،‬تِ جای ‪ hours‬تایذ اس ‪ hour‬استفادُ کٌیذ‪.‬‬
‫‪ weekday‬یکی اس رٍسّای ّفتِ است کِ حزف اٍل آى تشرگ است‪:‬‬
‫توزیي سزی دٍم تزًاهِ ساسی ضیءگزا‬
‫‪ ‬هتذ ‪ getPriority‬اٍلَیت کار را تز هی گزداًذ‪.‬‬
‫‪9‬‬
‫‪Weekday‬‬
‫‪Code‬‬
‫‪Saturday‬‬
‫‪0‬‬
‫‪Sunday‬‬
‫‪1‬‬
‫‪Monday‬‬
‫‪2‬‬
‫‪Tuesday‬‬
‫‪3‬‬
‫‪Wednesday‬‬
‫‪4‬‬
‫‪Thursday‬‬
‫‪5‬‬
‫‪Friday‬‬
‫‪6‬‬
‫کالس ‪:JobScheduler‬‬
‫‪ ‬ساسًذٓ ایي کالس‪ ،‬تِ ػٌَاى ٍرٍدی سهاى ضزٍع تِ کار را هیگیزد ٍ تا تَجِ تِ آى ضیء هغلَب را هیساسد‪.‬‬
‫‪ ‬هتذ ‪ setTime‬سهاى کًٌَی را تؼییي هی کٌذ‪ .‬اس ایي سهاى تِ تؼذ کارّا اًجام خَاٌّذ ضذ‪ .‬در ٍاقغ‪ ،‬ایي هتذ‬
‫ٍرٍدی ّای دادُ ضذُ تِ ساسًذُ را تزٍس هیکٌذ‪.‬‬
‫‪ ‬هتذ ‪ addJob‬یک کار را اضافِ هی کٌذ‪ .‬در صَرتی کِ تا یکی یا تؼذادی اس کارّای قثلی تذاخل داضت‪ ،‬اگز‬
‫اٍلَیت ایي کار اس تواهی آى کارّا کوتز یا هساٍی تَد‪ ،‬کار را اضافِ ًوی کٌذ‪ .‬در غیز ایٌصَرت کارّایی کِ‬
‫تذاخل دارًذ را پاک هی کٌذ ٍ ایي کار را اضافِ هی کٌذ‪ .‬در صَرتی کِ کار تِ لیست کارّای هَجَد اضافِ‬
‫ضَد‪ ،‬هقذار ‪ true‬تز هی گزداًذ‪.‬‬
‫تزای ًوًَِ در سیز ‪ 4‬کار هَجَد ًطاى دادُ ضذُ اًذ کِ اٍلَیت ّزکذام تؼذ اس ‪ًَ #‬ضتِ ضذُ است‪ .‬اگز در ایي‬
‫حالت تخَاّین ‪ Job5‬را تِ لیست کارّا اضافِ کٌین‪ ،‬تا ‪ Job3 ٍ Job2 ،Job1‬تذاخل دارد‪ .‬چَى اٍلَیت آى اس‬
‫تواهی کار ّای دیگز تیطتز است‪ ،‬تواهی ایي کارّا را پاک هی کٌین سپس ‪ Job5‬اضافِ هی کٌین‪ .‬در صَرتی‬
‫توزیي سزی دٍم تزًاهِ ساسی ضیءگزا‬
‫‪13‬‬
‫کِ تخَاّین ‪ Job6‬را اضافِ کٌین‪ ،‬تا ‪ Job4 ٍ Job3‬تذاخل دارد؛ ٍلی اٍلَیت ‪ Job6‬کوتز اس ‪ Job4‬است‪ ،‬پس‬
‫ایي کار را ًثایذ اضافِ کٌین‪.‬‬
‫‪ ‬هتذ ‪ isEmpty‬در صَرتی کِ ّیچ کاری هَجَد ًثاضذ‪ ،‬هقذار ‪ true‬را تز هی گزداًذ‪.‬‬
‫‪ ‬هتذ ‪ cleanJobs‬توام کارّایی کِ سهاى ضزٍػطاى قثل اس سهاى کًٌَی تاضذ را پاک هی کٌذ‪ .‬هقذاری کِ ایي‬
‫هتذ تزهی گزداًذ‪ ،‬تؼذاد کارّایی است کِ پاک ضذُ اًذ‪.‬‬
‫‪ ‬هتذ ‪ّ removeAllJobs‬وِ کارّا را پاک هی کٌذ ٍ تؼذاد کل کارّا را تزهی گزداًذ‪.‬‬
‫‪ ‬هتذ ‪ getTotalHours‬تؼذاد ساػات هجوَع کل کارّا را تز هی گزداًذ‪ .‬کارّایی کِ سهاى ضزٍػطاى گذضتِ‬
‫تاضذ‪ً ،‬ثایذ هحسَب ضًَذ‪.‬‬
‫‪ ‬هتذ ‪ doNextJob‬اٍلیي کاری کِ تؼذ اس سهاى کًٌَی ٍجَد دارد را اًجام هی دّذ‪ .‬تِ ایي صَرت کِ ایي کار اس‬
‫لیست کارّا حذف هی ضَد سپس ػثارت سیز را تز هی گزداًذ‪:‬‬
‫‪Doing {Job Name}...‬‬
‫در صَرتی کِ کاری ٍجَد ًذاضت ػثارت سیز را تز هی گزداًذ‪:‬‬
‫‪No job to do‬‬
‫‪ ‬هتذ ‪ getJobsRemaining‬تؼذاد کارّایی کِ تؼذ اس سهاى کًٌَی ّستٌذ را تز هی گزداًذ‪.‬‬
‫‪ ‬هتذ ‪ jobSchedulerToString‬تواهی کارّا تؼذ اس سهاى کًٌَی را تِ تزتیة سهاى ضزٍع تِ صَرت یک‬
‫رضتِ تز هی گزداًذ‪ّ .‬ز کار در یک خظ درج هی ضَد‪ .‬اس هتذ ‪ jobToString‬کالس ‪ Job‬کوک تگیزیذ‪.‬‬
‫هَفق تاضیذ‬
‫توزیي سزی دٍم تزًاهِ ساسی ضیءگزا‬
‫‪11‬‬