В една организация има 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