Ctrl + Z

فرصتی دوباره

بســــم الله الرحمــــن الرحیـــــــم

Ctrl + Z

فرصتی دوباره

سلام به همه 

 

توضیحات ضروری: برای کسانی که سطح دسترسی را کاملا آگاهی ندارند: باید فیلدها private باشند.

قبل از شروع برای اگر هنوز قوانین ارسال تکالیف را نمی دانید بهتر است را مطالعه کنید! 

سوالات شما از این تمرین به بعد تا سه شنبه شب پاسخ داده می شود! پس بهتر است انجام این تمرین را به روز آخر موکول نکنید.

این هفته قراره یک سامانه شبکه اجتماعی بر اساس گردشگری پیاده سازی کنید:

این سامانه از کلاس های زیر تشکیل شده است که به ترتیب به شرح زیر می باشند:

class Person{
    Person(String userName, String password){...}
    void setPassword(String s){...}
    String getUserName(){...}
    void addFriend(Person p){...}
    Person[] getFriends(){...}
    void addPlaceToWishList(Place p){...}
    Place[] getWishList(){...}
}

این کلاس با گرفتن دو String ساخته می شود.

متد setPassword گذرواژه را تغییر می دهد.

متد getUserName نام کاربری را برمیگرداند.

متد addFriend یک Person به لیست دوست های آن فرد اضافه می کند.

متد getFriends لیست دوست های یک نفر را بر می گرداند. آرایه ای از Person

متد addPlaceToWishList یک مکان گردشگری(Place) را به لیست علاقه مندی اضافه می کند.

متد getWishList یک آرایه از مکان های گردشگری بر می گرداند.

class Review{
    Review(Person p, String text){...}
    String getReview(){...}
    void like(){...}
    int getLikes(){...}
    void disLike(){...}
}

این کلاس با گرفتی متن نقد و یک object از Person که نویسنده متن است ساخته می شود.

getReview متن نقد را برمی گرداند.

متد Like یک لایک (پسند) اضافه می کند.

getLikes تعداد لایک ها را بر می گرداند.

disLike یک لایک(پسند) از این نقد کم می کند.

class Place{
    Place(String name, String city, int x, int y){...}
    void setName(String name){...}
    int[] getLocation(){...}
    void like(){...}
    void disLike(){...}
    int getLikes(){...}
    String getCity(){...}
    int distanceTo(Place p)
}

این کلاس با گرفتن نام و شهر و عرض و طول جغرافیایی(xوy ) ساخته میشود.

setName نام مکان را تغییر می دهد.

getLocation آرایه طول و عرض جغرافیایی را برمیگرداند.

like  و disLike و getLikes مانند متد کلاس قبلی است.

getCity نام شهر را برمیگرداند.

distanceTo فاصله اقلیدسی تا مکان داده شده بر میگرداند.

class Business{
    Business(String name, int x, int y){...}
    String getName(){...}
    int[] getLocation(){...}
    void setLocation(int x, int y){...}
    void addReview(Review r){...}
    void like(){...}
    void disLike(){...}
    int getLikes(){...}
}

این کلاس با گرفتن اسم کسب و کار و مکان جغرافیایی ساخته می شود.

getName و like و disLike و getLocation و getLikes همانند قبل پیاده سازی شود.

addReview یک نقد به نقدهای مرتبط با این کسب و کار بر می گرداند.

setLocation مکان جغرافیایی را به مکان جدید تغییر می دهد!


ملاحظات ضروری:

۱) دقت کنید امنیت داده خیلی در سایت ها و زیرساخت های اجتماعی و اقتصادی اهمیت دارند. مثلا ما متد like و dislike تعریف کردیم و قرار نیست از بیرون object یک دفعه این مقدار را دستی تغییر بدیم! برای فیلد سطح دسترسی منطقی انتخاب کنید! در نمره ی این تمرین سطوح دسترسی بسیار اهمیت دارند!!!

۲) برای بار آخر نام گذاری را کاملا درست مطابق آنچه گفته شده انجام بدید! باز هم افرادی اسم کلاس را اشتباه در نام فایل وارد می کنند!!! این بار در صورت مشاهده قطعا صفر داده خواهد شد!

۳) این مثال ساده بسیار زیبا در حال توصیف ساختار یک زیرساخت اجتماعی اقتصادیست و با ترکیب اطلاعات جغرافیایی و اقتصادی و اجتماعی یک ارزش دوچندان پیدا می کند.

سایت های مشابهی مانند tripadvisor و yelp هستند که در خارج بسیار موفق هستند. مثلا بر اساس موقیت شما و علاقه های شما به شما مکان های گردشگری پیشنهاد می کنند و رستوران ها و هتل های نزدیک را به شما نشان می دهند. رستوران ها و هتل ها می توانند قیمت و منو ها خود را به اشتراک بگذارند و سامانه رزرو آنلایل راه اندازی کنند! نبود همچین سامانه ای در کشور ما با امکانات عظیم گردشگری باعث تاسف است. در کشورهای پیشرفته گردشگری به عنوان و صنعت و علم جا افتاده است!


در نهایت: می خواستیم به شما نشان بدیم که FaceBook و twitter و حتی cloob و جملک روز اول که راه افتاد در حد یک کار بسیار ساده بوده است. و شما با انجام این تمرین عملا یک بار faceBook نوشتید که به اضافه کردن رابط کاربری(UI) و دیتابیس کار تمام است!!! 


در تمرین های دیگر از کاربرد programming در زمینه های اقتصادی , شیمی و ریاضی و فیزیک آگاه میشوید!

با احترام.

  • ۹۲/۰۸/۰۷
  • مهدی مظاهری

جاوا

شی گرایی

شبکه اجتماعی

تمرین

سوالات  (۳۱)

سلام در جواب پیام دیشب کلمه زهن را اشتباه نوشتید چون با ذال نوشته می شود بنابراین ذهن درست است
پاسخ:
سلام
ممنون
درست شد.

با احترام
در خط بالای تیتر ملاحظات ، بجای جغرافیایی نوشته اید جخرافیایی!!(چون در کامنت های قبلی گفته بودید که اشکالات تایپی را بگید ، من اینو گفتم وگرنه من کاری به این کار ها ندارم!!!)
پاسخ:
سلام
خیلی ممنون

اصلاح شد.
در خط 19 هم اضافه را نوشه اید اضفه
پاسخ:
ممنون
اصلاح شد.
چرا در مطلب 3 ، قسمتی که ما سوالات (نظرات) را مینویسیم ، برداشته شده است؟؟

به هر حال........سوالم را اینجا میپرسم:
بعضی از تکلیف ها (مثل کلاس Date) که فقط یه کلاس خالی هستند (public static void main ندارند) ، را چطوری تصحیح میکنید؟؟؟؟؟
پاسخ:
سلام
با استفاده از سیستم package در جاوا.
شما در جواب یکی از سوالات غلط املایی داشتید زهن غلط است و ذهن درست است و باید با ذال نوشت
پاسخ:
سلام
واقعا ممنونم. بالاخره یکی هم باید متن را تصحیح کند. من وقت برای این کارها ندارم و شما زحمتش را قبول کردید.
واقعا لطف می کنید.
لطفا بعد از 1 شنبه ی این هفته ، سریعا جواب های صحیح 2 سوال تمرین 3 را بگذارید!!!

لطفا تایید و پاسخگویی نظرات دیگری که برای بقیه مطالب گذاشته ام ، یادتان نرود


باتشکر فراوان

سلام.
ما سطح های دسترسی مانند private را نمیدانیم. در کلاس ما کامل نگفتید.
پاسخ:
سلام
شما تمرینات را حل کنید روز دوشنبه این هم به شما می گویند تا اضافه کنید. ولی بعید می دونم که این طور باشه.
متد setPassword  بر چه اساسی گذرواژه را تغییر میدهد .
یعنی کاربر ی گذر واژه جدید میده ک میاد بجای قبلیه ؟
پاسخ:
سلام
کلا مثل یک فانکشن ورودی خروجی دار باهاش برخورد کنید. اینکه چطور ورودی میگیره مهم بیست.
سلام
 
 صرفا جهت کمک!
  متد setpassword باید string پسورد را بگیرد.
پاسخ:
خیلی ممنون
  راستی

  باز هم صرفا جهت کمک!

  یه سوال  Business هم (دیس)لایک داره؟  پس چرا ننوشتید؟

  توی Place هم dislike رو ننوشتید!
پاسخ:
سلام
خیلی ممنون از یادآوریتون! بسیار عالی که حواستان جمعه.
اصلاح شد.
با احترام
fek konam akhar sal bayad GTA-V ro bnevisim 
hanooz hame bache ha tamrin ghabl ro nmitoonan bnevisan 
ye fekri konid k vaze behtar she na inke tamrin sakht tar bzarid
پاسخ:
سلام
تمرین اول را جوابش را می گذاریم. چندتا تمرین حل کنید راه می افتید انشالله.
ایول از تیپ این یکی تمرین خیلی حال کردم باز هم از این کارها بکنین
پاسخ:
بسیار خوشحالم از نظر مثبت شما.
سوال رو باید در چه package ای بنویسیم؟
پاسخ:
سلام
به شیوه تمرین قبل اسم گذاری کنید.
در متد Businessجنس خروجی باید int باشد
پاسخ:
اونی که میگید متد نیست! کانستراکتوره!!!
constructor خروجی ندارد!!!
استاد جنس خروجی توابع برگرداننده دوستان و برگرداننده مکان گردشگری باید  []char باشد چون میخواهیم یک ارایه برگردانیم و نه یک object 

  • محمدامین کرباسفروشان
  • سلام.

    توی کلاس هایی که مکان رو هم قراره توشون داشته باشیم، قراره مختصات رو به درجه بگیریم کلّاً یا از دقیقه و ثانیه هم استفاده میکنیم؟
    و اگه قراره از درجه استفاده کنیم که یه Integer اصلا کافی نیست! چون اینجوری صرفا به یسری نقاط روی کره ی زمین محدود میشیم.در این صورت قطعا مشکلی برای خود برنامه ایجاد نمیشه، ولی منطق برنامه مشکل داره.

    در ضمن توی بعضی از روش ها مثل Person.setPassword نوع ورودی رو مشخص نکردین که میتونه باعث سردرگمی بشه.
    پس لطفا یا بگین که مهم نیست چجوری بگیرین، یا بگین که (مثلا) وروری این تابع یک String هستش.

    در ضمن "متد Like یک لایک (پسند) اضافه می کند."؛ "اضفه" نمیکند.
    پاسخ:
    سلام
    خیلی ممنون از سوالت:
    فرض کنید دنیا در صفحه ی xy است! پس داستان خیلی ساده خواهد بود.

    اصلاح شد! خیلی ممنون.

    اصلاح شد.

    خیلی ممنون محمدامین!

  • محمدامین کرباسفروشان
  • چرا "این تمرین هنوز در حال به روزرسانی می باشد." ؟
    پاسخ:
    سلام
    بروزرسانی به معنی زیاد شدن تمرین نیست بلکه به معنی اصلاح است.
  • محمد شهیدی
  • سلام
    مگر متدهایی که مربوط به like میشن حتما یک شخص عضو شده برای انجام احتیاج نداره؟می تونیم موقع ورودی گرفتن شخص و پسورد رو بگیریم و چک کنیم؟ یا متد like رو برای هر شخص بنویسیم؟

    پاسخ:
    سلام محمد جان
    خیلی ممنون از پیگیری شما.
    دقیقا نفهمیدم شما منظورتون چیه؟ 
    توضیحاتی که به نظرم میرسه:
    ما یک فیلد برای هر object داریم که با متد های like , dislike و getLikes قابل دسترسی هستشن. ما فعلا وارد بحث های امنیتی نمی شیم و فقط اینکه هر place و business لایک منحصر خودش را دارد.
  • محمد شهیدی
  • منظورم اینه که تو دنیای واقعی برای لایک گذاشتن تو بعضی سایت ها باید اول عضو بشید.اینجا ما بدون تشکیل عضو (person) می تونیم از طریق main لایک بدیم.
    یه سوال:وقتی تو کلاسBusiness , متدaddReview وجود داره نباید متد getReviews هم وجود داشته باشد آیا؟
    پاسخ:
    سلام 
    بله ما اینجا در واقع فرض می کنیم همین که یک object از Person می سازیم یعنی در مجموعه عضویت دارد.

    شما خیلی موشکافانه به مسایل نگاه می کنید و این واقعا عالی است. بله در واقعیت داشتن همچین تابعی خوب است اما برای تکلیف همین ها که آمده کافیست.

    با احترام
  • محمد شهیدی
  • در ضمن تو کلاس Business متد getLikes خروجی int داره.
    باتشکر
    پاسخ:
    اصلاح شد
    ممنونم!
    سلام
    ببخشید ، تو کلاس Place ، متد distanceTo  نباید خروجیش double باشه ؟
    پاسخ:
    سلام
    فرض کنید به صورت تقریبی (int) یر میگردیند.

    متشکر از دقت شما.
  • ابراهیم سالاری
  • سلام در کلاس بیزینس. getline نباید خروجی اش boolian باشد؟  در ضمن من دانش آموز حلی1 هستم و علاقه مندم به سوالات شما پاسخ دهم واقعا جاوا زبان شیرینی است .
    پاسخ:
    سلام
    اولا که Boolean درست است.
    getLine هم در سوال موجود نمی باشد.

    خیلی خوبه که دنبال یادگیری هستید و ان شاله که به درد شما بخورد ولی بهتره کمی هم هنجارها را رعایت کنید و حد خودتان را نگهدارید و کمی هم تواضع به خرج بدهید. 

    راستی قرار بود بلاگ را هک کنید به کجا رسید؟!
    با احترام فراوان
  • amir hosein ghafarian
  •  با سلام!
    ممکن است راجع به متد addPlaceToWishList بیشتر توضیح دهید؟
    چه کار هایی باید انجام دهیم؟
    پاسخ:
    سلام بر شما. خیلی ساده: هر object کلاس Person یک لیست مکان های مورد علاقه دارد و این متد یک Place جدید اضافه می کند. 
  • ابراهیم سالاری
  • خیلی ممنون تیکه آخر پاسخ دیشب تان را نمی فهمم چیه؟ احتمالا اشتباه گرفته اید من اصلا نمی دانم هک یعنی چه و همه هنجار ها را هم رعایت کردم من تازه 1روزه که عضو شدم.من که کاری نکردم و چرا غلط املایی که گرفته بودم پاک کردید. این کارتان مرا کمی ناراحت کرد.
    پاسخ:
    تیکه نبود. باید خدمتون بگم بلاگ کلی اطلاعات از افراد که متصل میشوند در اختیار نویسنده قرار می دهد. نیازی به انکار کردن نیست. کسی که گیر ادبیاتی میده بهتره اخلاق را رعایت کند و زبانش را نگه دارد.

    با احتارام
  • محمد مهدی دالایی
  • در  کانستراکتور پِلیس name اسم چیه

      

     

     

     

     

    پاسخ:
    سلام
    اسم مکان گردشگری.
  • محمدامین کرباسفروشان
  • سلام.
    بهتر نیست اطلاعات (بازنگری ها، آدم ها، مکان ها و شغل ها) توی یک جای دیگه نگهداری بشن؟ یعنی مثلا بجای اینکه یک آدم هم توی لیست دوستان یک نفر باشه و هم توی(بعنوان مثال) آرایه ای که از آدمها توی متد مین داریم و هم توی اطلاعات راجع به یک بازنگری نگهداری بشه، توی یک آرایه کلی از افراد باشه و توی هرکدوم از جاهایی که گفتم عدد اون آدم توی اون آرایه نگهداری بشه؟
     یا اینکه بجای اینکه یک مکان هم توی (بعنوان مثال) آرایه ای که از مکانها توی متد مین داریم و هم توی لیست آرزوهای افراد مختلف نگهداری بشه، توی یک آرایه کلی از مکان ها نگهداشته بشه و توی هرکدوم از جاهایی که گفتم عدد اون مکان توی اون آرایه نگهداری بشه؟

    اینطوری که شما گفتین توی مقیاس بزرگ و یک شبکه ی بزرگ خیلی از فضای ذخیره ی اطلاعاتمون هدر میره و اصلا به صرفه نخواهد بود.
    پاسخ:
    سلام
    راهی که در این تمرین است بهترین راه که نیست هیچ بلکه شاید خیلی ضعیف باشد. ما همه چی را در قالب کلاس و فیلد و متد تعریف کردیم ولی با استفاده از پایگاه های داده خیلی کارهای بهتری می توان کرد.

    با تشکر از دقت فراوان شما
    با احترام فراوان
  • محمدامین کرباسفروشان
  • -- به محمد مهدی دالایی

    nameـه توی اون کانستراکتور اسمیه که قراره مکان مورد نظر داشته باشه. یعنی دربارش باید همون کاریو بکنی که توی Place.setName با String name انجام میدی.
    پاسخ:
    سلام
    بله. ممکن است بخاهیم اسم مکانی را تغییر دهیم و یا ویرایش کنیم.
  • متین میرزایی
  • سلام
    سوال من خیلی مربوط به این تمرین نیست.
    لطفا یک بار protectedرا توضیح می دهید؟
    پاسخ:
    سلام
    خیلی ممنون از سوالت.
    محمد امین و محود رحمانی به خوبی در زیر شرح دادند. اگر باز هم نیاز به توضیح دارید سر کلاس سوال کنید.
    با تشکر
  • محمدامین کرباسفروشان
  • Modifier    | Class | Package | Subclass | World
    ————————————+———————+—————————+——————————+———————
    public      |  ✔    |    ✔    |    ✔     |   ✔
    ————————————+———————+—————————+——————————+———————
    protected   |  ✔    |    ✔    |    ✔     |   ✘
    ————————————+———————+—————————+——————————+———————
    no modifier |  ✔    |    ✔    |    ✘     |   ✘
    ————————————+———————+—————————+——————————+———————
    private     |  ✔    |    ✘    |    ✘     |   ✘
    پاسخ:
    سلام
    محمدامین کار شما عالیه. از اینکه کمک می کنید واقعا ممنونم

    با احترام فراوان
    مهدی 
  • محمدامین کرباسفروشان
  • شکل قبلی ای که دادم رو توی استک اورفلو (یه سایت) پیدا کردم.
    توضیح سادش این میشه: متغیر یا متدی که protected باشه فقط توی همون کلاسی که توش متغیر ساخته شده در دسترسه (مثل private) و توی کلاسهایی که از اون کلاس اول ارث بردن؛ یعنی وارثینش(!). 
    و بنظرم شکلی که دادم از یه نظر غلطه. ینی protected برای package در دسترس نیست.
    ببخشید 
    حرفمو اصلاح میکنم :
    فیلدهای protected به ارث " میرسد " ولی فیلدهای private  به ارث " نمیرسد " .
    پاسخ:
    سلام محمد جان
    خیلی ممنونم از توضیحاتت. من نظر قبلی شما را پاک کردم تا برای کسی سو تفاهم نشود.

    با احترام فراوان
    مهدی