Да се напише програма за катерици, които събират храна, скриват я в бърлогата си и спят зимен сън.
Да се реализират класове за различните видове храни, на които може да попадне катерицата. Всяка инстанция на храна има определени количетсво и качество като по-високи стойности са по-желателни. Всяка храна трябва да има следните методи:
double getFoodScore()
- връща стойностколичетсво * качество
, показваща колко време катерицата може да оцелее с тази храна (виж тестовете).void passWinter()
- симулира преседяването на храната през зимата. Според вида храна това може да намали количеството или да влоши качеството (виж тестовете).
Да се реализират класове за ядки, торта и макбургери, като през зимата:
- при ядките не се влошава никоя характеристика
- при макбургера само през първата зимата количеството намалява с 20% и качеството с 50%, а през всяка следваща зима няма промяна
- при тортата количеството намалява с 30%, а качеството намалява по формулата
ново качество = старо качество * (0.1 + 1.99/(2^(възраст на тортата/0.85)))
По желание могат да се добавят класове и за други храни.
Всяка катерица трябва да има име, вид и възраст. Когато се изписва информация за дадена катерица трябват да присъства и <вид> Име(възраст)
за лесно разпознаване.
Всяка катерица си има бърлога, в която складира намерената храна. Трябва да има следните методи:
void addFood(Food food)
- за добавяне на намерената храна към складираната в бърлогата. Класът Food го заменете с името на базовия клас/интерфейса, от който наследяват всички храни (виж тестовете)void passWinter()
- симулира преседяването на храната през зимата като се извиква съответния метод на всяка храна (виж тестовете).double getTotalFoodScore()
- връща сумата от стойностите на всички храни. Ако е реализиран клас за бърлога то този метод се намира в него вместо в класа за катерица (виж тестовете). Освен това всяка година катерицата може да отива да събира храна определен брой пъти. За улеснение можете да го зададете като константа 4.
За по-високи оценки да се реализира клас за бърлога според описаното горе. За по-ниски оценки е достатъчно класът за катерица да съдържа колекция с храни.
В пълния вид на програмата потребителят въвежда всички катерици и след това почва да въвежда храни. Когато всяка катерица е събрала колкото може храна преминава зимата и започва нов цикъл на събиране.
Катериците се въвеждат на отделни редове във формата име,възраст,вид
докато не се въведе stop
. За всеки така въведен ред се създава нова инстанция на катерица.
След катериците по същия начин се въвеждат храни във формата вид количество качество
. Храните се подават на катериците в реда им на въвеждане, като на дадена катерица се подават колкото може да събира храни преди да се премине на следващата.
Програмата се прекратява при въвеждане на stop
и се извежда крайното състояние(име, вид, възраст, обща храна) на всички катерици.
Когато няма повече катерици, които да могат да събират храна, всички отиват да зимуват. Извиква се passWInter
и се извежда новото състояние след зимата за всички катерици.
В проекта има написани и закоментирани юнит тестове. Вашата задача е да ги преправите така, че да работят с вашия код и да покриват същата функционалност.
- наследяване на храните чрез интерфейс и/или абстрактен клас
- демонстрация чрез създаване на катерица и добавяне на няколко храни, които се въвеждат от конзолата
- наследяване на храните чрез интерфейс и/или абстрактен клас
- всяка храна има правилно работещ метод passWinter
- междинен клас Burrow с колекция от храни
- катерицата и бърлогата имат правилно работещи методи passWinter
- демонстрация чрез създаване на катерица, добавяне на няколко храни от конзолата и извикване на passWinter на катерицата
- наследяване на храните чрез интерфейс и/или абстрактен клас
- правилна енкапсулация
- всяка храна има правилно работещ метод passWinter
- междинен клас Burrow с колекция от храни
- катерицата има ограничен брой събирания на храна, след които хвърля грешка
- катерицата и бърлогата имат правилно работещи методи passWinter
- демонстрация чрез създаване на катерица, добавяне на няколко храни от конзолата и извикване на passWinter на катерицата
- наследяване на храните чрез интерфейс и/или абстрактен клас
- правилна енкапсулация
- всяка храна има правилно работещ метод passWinter
- междинен клас Burrow с колекция от храни
- катерицата има ограничен брой събирания на храна, след които хвърля грешка
- катерицата и бърлогата имат правилно работещи методи passWinter
- имплементиран е пълният процес на въвеждане на катерици и храни
- написани са юнит тестове, които покриват целия код