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

В една организация има 3 типа служители: изпълнители, експерти, началници.

1. Да се дефинира интерфейс ExecuteWork, който има:

  • методи:

    • execute

      • Параметри:

        • името на задачата която трябва да се изпълни

      • Резултат

        • Дали е изпълнена или не

2. Да се дефинира абстрактен клас Employee, описващ служител. Всеки служител има :

  • Интерфейси:

    • ExecuteWor

  • Атрибути:

    • Име, модификатор : видим само за класа (get метод)

    • общ брой поставени задачи, модификатор : видим само за класа (get, set методи )

    • успешно завършени задачи , модификатор : видим само за класа (get, set методи )

И може да извършва следните операции:

- публичен конструктор;

- successRate: връща текуща успеваемост — дробно число в интервала [0,1], показващо съотношението между броя на всички успешно изпълнени задачи към броя на всички поставени задачи за дадения служител до дадения момент. Ако на служителя не е била поставена нито една задача считаме, че успеваемостта му е 0.

3. Клас Изпълнители (Worker): поставя им се задача за изпълнение. Тези служители успяват да се справят с голяма част от поставените им задачи, но се провалят на всяка k-та поредна задача (т.е. при поставени k на брой задачи първите k–1 ще са приключени успешно, а последната — неуспешно). Цялото число k може да е различно за всеки служител и е негов атрибут.

- наследява класа Employee

Атрибути:

- k - номер на провалена задача, модификатор : видим само за класа

Методи:

- публичен конструктор

- Имплементация на абстрактния метод „execute“ от родителския клас - изпълнява поставената задача и връща резултат, показващ дали задачата е изпълнена, извежда на стандартния изход дали е приключила успешно или не; Инкрементираме стойността на общия брой изпълнени задачи и на успешно завършените ако е изпълнена правилно задачата.

- “successOrFailed” - метод видим само за класа, който проверява дали задачата за изпълнение ще се изпълни този път или няма. Ако текущата задача е кратна на „к“ номера на провалена задача, то тя няма да се изпълни.

4. Експерти: изпълнители, които винаги се справят с всяка задача, която им е поставена.

- наследява класа Employee

Методи:

- публичен конструктор.

- Имплементация на абстрактния метод „execute“ от родителския клас - изпълнява поставената задача и връща резултат, показващ дали задачата е изпълнена, извежда на стандартния изход дали е приключила успешно ; Инкрементираме стойността на общия брой изпълнени задачи и на успешно завършените.

5. Началници: служители, които разполагат с произволен брой подчинени от произволен тип (изпълнители, експерти, други началници). Когато на един началник му се постави задача, той я поставя на някой от подчинените си. Счита се, че един началник се е справил със задачата си, ако неговият подчинен се справи с нея. Началниците винаги поставят новата задача на някой от тези служители, на които до момента са възлагани най-малко задачи.

- Наследява класа Employee

Атрибути:

- Масив от работници(Employee) – модификатор видим само за класа

Методи:

- Публичен конструктор

- Имплементация на абстрактния метод „execute“ от родителския клас – Намира , кой работник има най-малко поставени задачи и делегира изпълнението на задачата на този работник.

- Метод printStatus() – метод printStatus, извежда на стандартния изход имената и текущата успеваемост на всички подчинени.

“Задачите” се дефинират като произволни символни низове с описание на дейност, например “Carry the stone”, “Dig a trench” и др.

Да се реализират класове Worker, Expert и Manager, реализиращи типовете служители, описани по-горе.

Пример:

Нека имаме двама работника:

· Никола Младенов, греши на всяка 2-ра задача. Възложете 4 задачи на Никола. Изведете успеваемостта.

· Павлина Григорова, греши на всяка 5-та задача. Възложете 3 задача на Павлина. Изведете успеваемостта.

Експерт:

· Иван Ангелов. Възложете 1 задачи на Иван. Изведете успеваемостта.

Началник1:

· Иван Иванов – негови работници са всички вече създадени. Възложете 3 задачи на началника и проследете дали се изпъняват от правилните работници, тези които имам най-малко възожени задачи.

· Изведете статуса.

· Изведете успедаемостта, на началника.

Началник 2:

· Създайте нов работник, без да му възлагате задачи;

· Създате масив от работници включващ новия работник и началник1;

· Изведете статуса.

· Изведете успедаемостта, на началника.

Last updated