Упражнения за извънаудиторна заетост
Задача 1
Да се реализира система за животни, която използва интерфейси, абстрактен клас и полиморфизъм.
Да се дефинира интерфейс Movement с метод:
String move();
Методът трябва да връща текстово описание на начина на движение.
Да се дефинират интерфейси:
Pet;Wild.
Всеки от тях трябва да съдържа метод, който връща текстово описание на типа животно. Имената на методите трябва да бъдат избрани така, че да са ясни и да описват действието.
Да се дефинира абстрактен клас Animal, който имплементира Movement.
Класът трябва да съдържа защитени полета:
nameот типString;ageот типint;weightот типdouble.
Да се дефинира параметризиран конструктор. Да се дефинират методи за четене на полетата.
Да се дефинират абстрактни методи:
String sound();String eats(int count).
Методът sound() трябва да връща звука на животното. Методът eats(int count) трябва да връща текст, който описва хранене с подаденото количество храна.
Да се дефинира метод getDescription(), който връща текстово представяне на общите данни за животното.
Да се дефинират класове Dog, Bird и Fish, които наследяват Animal. Всеки клас трябва:
- да извиква конструктора на
Animalчрезsuper(...); - да реализира
move(); - да реализира
sound(); - да реализира
eats(int count); - да имплементира
PetилиWildспоред избраното поведение; - да добави поне едно собствено поле.
Да се създаде масив от тип Animal[], който съдържа кучета, птици и риби. Да се обходи масивът и за всяко животно да се изведат:
- описание;
- начин на движение;
- звук;
- резултат от хранене;
- дали е домашно или диво животно според имплементирания интерфейс.
Задача 2
Да се реализира система за служители в организация.
В организацията има три типа служители:
- изпълнители;
- експерти;
- началници.
Да се дефинира интерфейс ExecuteWork с метод:
boolean execute(String taskName);
Методът приема име на задача и връща дали задачата е изпълнена успешно.
Да се дефинира абстрактен клас Employee, който имплементира ExecuteWork.
Класът трябва да съдържа частни полета:
nameот типString;totalTasksот типint;successfulTasksот типint.
Да се дефинират:
- конструктор;
- методи за четене;
- защитени методи за увеличаване на броя поставени и успешни задачи;
- метод
double successRate().
Методът successRate() трябва да връща стойност в интервала [0, 1]. Ако няма поставени задачи, резултатът трябва да бъде 0.
Клас Worker
Да се дефинира клас Worker, който наследява Employee.
Класът трябва да съдържа частно поле:
failedTaskNumberот типint.
Изпълнителят трябва да се проваля на всяка failedTaskNumber-та задача. Например ако стойността е 3, първите две задачи са успешни, третата е неуспешна, след това цикълът се повтаря.
Да се реализира методът execute(String taskName). Методът трябва да увеличава броя поставени задачи и да увеличава броя успешни задачи само при успешно изпълнение.
Да се дефинира частен помощен метод, който определя дали текущата задача ще бъде успешна.
Клас Expert
Да се дефинира клас Expert, който наследява Employee.
Експертът винаги изпълнява успешно поставената задача. Методът execute(String taskName) трябва да увеличава броя поставени и успешни задачи и да връща true.
Клас Manager
Да се дефинира клас Manager, който наследява Employee.
Класът трябва да съдържа колекция от подчинени:
private List<Employee> employees;
Когато на началник се постави задача, той трябва да я възложи на подчинения с най-малък брой поставени задачи. Началникът се счита за успешен, ако избраният подчинен изпълни задачата успешно.
Да се реализират:
- конструктор;
- метод
addEmployee(Employee employee); - метод
execute(String taskName); - метод
printStatus().
Методът printStatus() трябва да извежда имената и текущата успеваемост на всички подчинени.
Демонстрация
Да се създаде примерна програма, която:
- създава двама изпълнители с различна стойност на
failedTaskNumber; - създава един експерт;
- възлага няколко задачи директно на изпълнителите и експерта;
- създава началник с вече създадените служители като подчинени;
- възлага задачи на началника;
- извежда статуса на подчинените;
- извежда успеваемостта на всеки служител.
След това да се създаде втори началник, който има за подчинени нов служител и първия началник. Да се демонстрира, че задачите могат да се делегират и към друг началник.