Loading...
Simooo93 avatar Simooo93 81 Точки

[Homework] OOP in Java

Здравейте, видях, че има тема за първата задача на домашното, но отварям нова тема, която да е официалната за проблемите по цялото домашно. 

Аз лично имах доста проблеми с разбирането на задачите и от това съм сигурен, че имам много грешки затова ще се радвам, ако ми ги посочите. Например на 2-ра не разбрах по какъв начин се ползва този expiration date, след като в конструктора не ни се задава кога е направен продукта или каква годност има например 14 дни или нещо такова. Това, което аз съм направил е автоматично продукта е с дата на създаването му, датата на разваляне е месец след това. Предполагам най-добрия начин е да се записват във файл датите на създаване на продктите и след това да се чете. Така, че ще ми е интересно да видя какви решения сте дали вие.

В първата задача също много се обърках, но след като прочетох темата с разясненията горе долу ми стана ясно какво се иска.

OOP in Java

Тагове:
2
Java Advanced
milkopg avatar milkopg 47 Точки

Мисля, че задача1 съвпада до голяма степен с твоето решение.

Относно задача 2 съм съгласен с теб, може би е изпуснато от заданието да се задават от конструкторите и expiration датите, защото в нашата програма, която се изпълнява еднократно и не се пази някъде това поле в база или файл няма как да изтече срока на годност. Няма как да се пази история на срока на годност при програма траеща секунда без да има хранилище. Идеята според мен е да се упражни сортиране по дата с ламбда изрази.

Като забележки мога да посоча, че не си вкарал тестови данни и нямаш база за сравнение с ламбда изрази.

В processPurchase В реда трябва да добавиш и количеството на продуктите, реда да стане, защото не смяташ и количеството на продукта а само единичната цена например 1000 бр Х 10 лв = 10000лв

от customer.setBalance(customer.getBalance() - product.getPrice());

customer.setBalance(customer.getBalance() - product.getPrice()*product.getQuantity());

Ето моите решения

 

2
sholeto avatar sholeto 93 Точки

На доста места на първа задача забелязвам, че както е направено сетърите са излишни. За да се минава през тях на лекдията се спомена да се използват вместо this, примерно в конструктора. Все още тази лекция не е качена за да го намеря точно къде е, а не знам дали е споменато в лекцията от сряда. Иначе всичко останало е направено супер.

1
milkopg avatar milkopg 47 Точки

Здрасти Sholeto, хубава забележка за set-ърите, лош навик от JEE при създаването на моделите, където обикновето конструкторите са без аргументи и Eclipse да ми ги създава автомачично, вече го коригирах, а относно this, това  не е задължително, използва се предимно ако в базовия и в наследения клас или поле в клас в поле в метод има променливи с еднакви имена да се упомене изришно кое поле е към този клас, а ако няма такава повтаряемост няма смисъл да се пише

1
02/11/2015 08:35:26
Innos avatar Innos 419 Точки

Бая късно, този коментар но по-добре късно от колкото никога. Прегледах ти домашното колега и ако трябва да съм честен, ООП то е много счупено в него, не го казвам с цел да те обидя, просто е по-добре да се кажат тези неща, за да може да се работи по проблема вместо да се премълчат. Разбирам че най-вероятно не си учил ООП, затова ще се опитам да обясня главната идея накратко. Целите на ООП то могат да се сведат до няколко неща, едно от тях е да се преизползва колкото се може повече код, като за това се използва наследяване. Друга цел на ООП то е да се ограничи достъпа до неща, които не трябва да се виждат отвън ( сетърите и гетърите идват тук). Като цяло ООП то има идея да моделира обекти, да обедини смислово неща в един такъв обект, вземи например една от фигурите като триъгълник, триъгълникът в най-прост вариант има страни, точки, лице и периметър, тогава смисловата комбинация от 3 страни, 3 точки, лице и периметър ти наричаш обекта триъгълник и съответно в класът триъгълник трябва да може да се намерят горно посочените неща.

Спрямо самото домашно сега, виждам че имаш клас Vertex и клас Shape, но са празни, това е лошо тъй като има неща които наследяват този клас, ако той е празен няма много смисъл от това наследяване. Класовете PlaneShape и SpaceShape имат общи характеристики, съответно тази обща логика която споделят (например че и 2та класа имат List от неща които са Vertex-и) може да се изнесе във Shape класът и така това повторение ще се избегне. Друго което виждам е че класът ти Vertex2D моделира по скоро отсечка от колкото точка (Vertex е точка), докато Vertex3D моделира точка, тук става смесване на логиката. Какво трябва да е Vertex отсечка или точка?, наследниците могат да добавят ново поведение, но не е правилно да сменят самия смисъл на обекта, ако Vertex  е абстрактната идея за точка в пространството, то Vertex2D трябва да моделира конкретната имплементация на точка в двуизмерното пространство, а Vertex3D в триизмерното. Много от тези държания и характеристики могат да се определят лесно като се приложи логика, понеже ООП то моделира по логиката от истинския свят, когато се чудиш какво трябва да има в някакъв клас, просто се запитай какво има един обект от този тип (примерно триъгълника). Разбира се важно е да се вземе в предвид че понякога не ти трябват всички характеристики които може да има даден обект, затова задаваме и определяме обектите само с характеристиките които ни интересуват. Надявам се съм помогнал ако имаш въпроси, питай разбира се.

4
09/11/2015 05:07:43
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.