1) - Дополнительный сотрудник: Пришелец.
Задание: Пришелец из космоса. Похищает сотрудника и исчезает с ним из офиса на 2 хода. После чего сотрудник появляется в любом кабинете.
Исходный код:
public class Alien:Employee
{
private int steps;
private Employee employee;
private IDecisionMaker decisionmaker;
public Alien(string name)
: base(name)
{
decisionmaker = new RandomDecisionMaker(1);
}
public override void PerformAction()
{
if (this.Room != null)
{
List<Employee> empl = this.Room.Employees.Where(x => x != this).ToList();
if (decisionmaker.ShouldPerformAction && empl.Count > 0)
{
employee = empl[0];
employee.Room.RemoveEmployee(employee);
this.Room.RemoveEmployee(this);
steps = 0;
}
else
this.MoveToNeighbourRoom();
}
else
{
if (employee != null)
{
steps++;
if (steps == 2)
{
List<Room> rooms = new List<Room>();
for (uint i = 0; i < 5; i++)
{
for (uint j = 0; j < 5; j++)
{
if (this.Room.Office[i, j] is Room)
rooms.Add((Room)this.Room.Office[i, j]);
}
}
rooms[new Random().Next(rooms.Count)].AddEmployee(this.employee);
this.employee = null;
this.steps = 0;
}
}
}
}
}
Блок схема:
Поведение пришельца:

Поведение сотрудников:

Диаграмма классов:

Дополнительный бонус: Кулер
Задание: Сотрудник ничего не делает в течении одного хода. При этом ему не начисляется прогул.
Исходный код:
public class Cooler:Bonus
{
public Cooler() { }
public override bool CanApplyToWorker
{
get { return true; }
}
public override bool CanApplyToManager
{
get { return false; }
}
public override void ApplyToWorker(Worker worker)
{
base.ApplyToWorker(worker);
worker.DoNothing_Cooler();
}
}
Диаграмма классов:

Список литературы.
1.Буч Г. Объектно-ориентированный анализ и проектирование с примерами приложений на С++: Пер. с англ. M.: Бином, СПб, 1998 г.
2. Бадд Т. Объектно-ориентированноепрограммирование в действии: Пер. с англ. СПб, 1997. 464 с.
3. ХьюзДжМичтом Дж. Структурный подход кпрограммированию: Пер. с англ. M.: Мир, 1980. 278 с.
4.Вильямс - Язык программирования С# 2005 и платформа .NET 2.0.2007 г.
5.Джесс Либерти Создание .NET приложений Программирование на C#. 2003г.
6. ГрадиБуч, Джеймс Рамбо и Ивар Якобсон — Язык UML. Руководство пользователя. 2-е изд. 2006 г.