Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

В начале выполнения программы

Читайте также:
  1. Cост. Полянская И. (гиперссылки для выполнения индивидуальных проектов) Тема 1
  2. II. ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ
  3. II. ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ.
  4. IV. Участники программы
  5. V. Этапы Программы
  6. VI. Награждение победителей Программы
  7. Аграрные программы политических партии

JobTerrarium

Вот действующие лица нашей экосистемы:

 

живые:

· Worker - простой трудяга, подчиненный, водится в ней во множественом числе, живет в ArrayListe;

 

· Boss - начальник, подчиняется БигБосу, водится во множественном числе, живет там же;

 

· BigBoss - большой начальник, произведен из класса начальников, водится во множественном числе;

 

Все эти персонажи происходят из класса Employee - наемный сотрудник.

Employee - базовый класс для всех сотрудников, не может существовать объектов такого типа. Boss - базовый класс для BigBossa.

· Employee [1]:

o Каждый сотрудник имеет зарплату(Salary типа decimal),

o каждый сотрудник имеет имя(Name типа String),

o каждый сотрудник имеет настроение(Mood типа bool)

o каждый сотрудник имеет расположение на поле(типа struct Point, содержащую в себе две переменные X и Y)

 

· Customer, он не имеет зарплаты, может не здороваться (а может и здороваться - решайте сами:), но он может раскидывать работы, и управлять персоналом (кастомер всегда прав:). Этот класс не может и не должен быть наследован от Employee, тем не менее, он может перемещаться по полю, и взаимодействовать с персоналом, описанным выше образом.

 

неживые:

· Work - работа, разбросана в некотором количестве по полю, сама не перемещается, характеризуется лишь местонахождением.

 

В начале выполнения программы

1. создается некоторое количество сотрудников разных типов,

2. им присваиваются координаты случайным образом,

3. присваивается зарплата (по умолчанию, либо / 100 больше чем по умолчанию)

4. имя (по умолчанию если это допустимо, или случайным образом из некоторого пула допустимых имен)

5. по полю "раскидывается" случайное количество работы.

 

На каждом шаге программы сотрудники перемещаются случайным образом(перемещаются на соседнюю клетку) по полю и выполняют действия:

1. поздороваться, если на данной клетке находится другой служащий.

2. выполнить работу, выполняется в том случае если на данной клетке находится работа. После выполнения работы она исчезает в этом и появляется в другом случайно-выбранном месте на поле.

3.....() - придумайте какое-либо свое действие, которым могли бы заниматься служащие, и реализуйте его. (Например можно создать класс SalaryAddition-Прибака к Зарплате, объекты данного класса так же расскиданы по полю (случайным образом появляются в месте где был BigBoss) при столкновении с SalaryAddition у работника повышается зарплата а объект ПрибакаКЗарплате исчезает)

 

Выберите свой вариант варианта поведения при достижении границ поля:

a. прозрачные стены - при попытке зайти на клетку за границами игрового поля объект появляется с другой стороны

b. отражающие стены - при попытке зайти на клетку за границами игрового поля объект меняет свое направление на противоположное

 

Работники ходят по полю до тех пор, пока не истечет "рабочий день". В цикле do/while проверяется окончание рабочего дня путем сравнения времени окончания работы(устанавливается константой) с текущим временем

 

· Для всех живых существ должна быть реализована возможность, что-то сказать Say(string WhatToSay). Эта функиця должна выводить на консоль(или по Вашему желанию в ListBox/ListCtrl на форме) Имя, Должность сотрудника и собственно произносимую им строку. Разную в зависимости от того кого он встретил.

 

Например Worker встретив старшего по званию говорит "Здраствуйте", а встретив Workera "Hi".

 

Т.к. Вы знаете, что такое абстрактные классы и функции, виртуальные функции, перекрытие(override) функций потому методы Say / DoWork / должны быть в соответствии с концепциями OOП.

 

· Все объекты, которые участвуют в 'игре'

1) реализуют интерфейс IMovable - он предоставляет возможность позиционировать объект на поле с помощью метода Move(Point p); [Используется для начального позиционирования всех объектов и для перемещения по полю живых существ]

2) реализует свойство IsAlive (только для чтения) показывающее живой ли это организм(например Рабочий) или неживой(работа, прибавка к зарплате, (стена))

· Те работники, которые могут управлять другими (Бос, БигБосс, Заказчик) должны реализовывать интерфейс IManage() - он предоставляет возможность 'управлять' сотрудниками с помощью функции Manage(IManagable) - реализация за Вами, сказать что-то.. изменить какие то свойства, вызвать какой то метод интерфейса IManagable - выбирайте сами.

· Те работники, что могут управляться другими (Бос, Рабочий) должны реализовывать интерфейс IManagable - придумайте его сами, только хорошо закомментируйте, возможен и такой вариант interface IManagable{};

 

 

Особенности реализации:

· Координаты каждого из представителей как живой(Сотрудники) так и неживой(Работа, ДобавкиКЗарплате) природы хранятся в структуре типа Point, которую следует определить самостоятельно[2].

· Работников, Работы, (Прибавки к зарплате) следует хранить в ArrayList(в одном или в двух разных).

· Должна быть возможность создать сотрудника (должны быть реализованы соотв. конструкторы) c заданным именем и зарплатой, лишь с заданной зарплатой и без указания каких бы то ни было параметров. Как было упомянуто ранее создать просто-сотрудника невозможно. Любой сотрудник обязательно является Workerом, Bossом, BigBossом или (еще каким-то добавленным вами по желанию классом)

· BigBoss всегда имеет имя:) Потому для данного класса должно быть реализовано лишь два конструктора: с заданием только имени, и с заданием имени и зарплаты.

 

· Зарплата по умолчанию отличается у работника, Босса и БигБосса (например 500, 1000 и 1500)

 

· Переменные должны иметь минимально необходимую видимость (protected, private) при необходимости должны быть реализованы функции для доступа к ним.

 

· Программа должна быть написана в 'хорошем' стиле (насколько это непротиворечит вынужденно 'плохому' дизайну), хорошо задокументирована.

 

 

В качестве дополнительного задания, после выполнения основного:

 

1) Создайте Атрибут для хранения информации о разработчике (якобы) изменившем код последним. Обязательными являются его (фамилия)ник типа string и дата модификации кода. Опциональными – комментарий типа string. Установите его для всех классов (в какое-то вымышленное значение).

 

2) Реализуйте (и документируйте) сложное поведение объекта - например при повышении зарплаты(set) не только повышается зарплата но и настроение. (Можете придумать свои варианты сложного поведения объектов при изменении свойств).

 

3) По желанию, можете реализовать еще какое-то существо или какой-то объект неживой природы, опишите в комментариях его поведение. Оценю дополнительными баллами:)

 


[1] Все свойства объектов (Настроение/Зарплата/Имени/(ОпытРаботы)) - реализуйте через свойства(property), только get или get/set по смыслу.

 

[2] Для структуры Point переопределите методы!=, ==, используйте именно эти операторы и эту структуру везде где дело касается координат объектов.

 


Дата добавления: 2015-11-16; просмотров: 52 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
ВДОСКОНАЛЕННЯ МЕХАНІЗМУ ЦІНОУТВОРЕННЯ| История понятия

mybiblioteka.su - 2015-2024 год. (0.009 сек.)