Упражнения за извънаудиторна заетост

Задача 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;
  • създава един експерт;
  • възлага няколко задачи директно на изпълнителите и експерта;
  • създава началник с вече създадените служители като подчинени;
  • възлага задачи на началника;
  • извежда статуса на подчинените;
  • извежда успеваемостта на всеки служител.

След това да се създаде втори началник, който има за подчинени нов служител и първия началник. Да се демонстрира, че задачите могат да се делегират и към друг началник.


This site uses Just the Docs, a documentation theme for Jekyll.