Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Языки программирования -> Кубенский А.А. -> "Структуры и алгоритмы обработки данных. Объектно-ориентированный подход и реализация на C++" -> 135

Структуры и алгоритмы обработки данных. Объектно-ориентированный подход и реализация на C++ - Кубенский А.А.

Кубенский А.А. Структуры и алгоритмы обработки данных. Объектно-ориентированный подход и реализация на C++ — Спб.: БВХ-Петербург , 2004. — 464 c.
ISBN 5-94157-506-8
Скачать (прямая ссылка): strukturiialgoritmiobrabotkidannih2004.djvu
Предыдущая << 1 .. 129 130 131 132 133 134 < 135 > 136 137 138 139 140 141 .. 161 >> Следующая

Опишем приблизительную структуру и поведение основных объектов системы.
Лифт может находиться в следующих состояниях:
? стоит; движется вниз; движется вверх;
? находится на уровне этажа с некоторым заданным номером;
? двери открыты (лифт стоит); двери закрыты (лифт стоит или движется);
? в лифте находится некоторое заданное число человек.
Пассажир лифта также может находиться в некоторых состояниях, характеризующихся следующими значениями:
? пассажир находится на уровне этажа с некоторым заданным номером;
? пассажир находится внутри лифта (и в этом случае его номер этажа должен совпадать с номером этажа лифта) или вне лифта;
? пассажир имеет желание попасть на этаж с некоторым заданным номером.
При каждом изменении состояния лифт извещает об этом пассажиров отсылкой соответствующего сообщения. Получив такое сообщение, пассажир может изменить также и свое состояние (например, войти в лифт). В свою очередь, пассажир, изменив свое состояние (например, захотев поехать на некоторый этаж), должен сообщить об этом лифту, который, получив запрос, будет менять свое состояние. Поскольку лифт в системе всего один, то сообщение об изменении состояния пассажира можно послать лифту и напрямую, минуя диспетчер, однако удобнее воспользоваться для этого также общим механизмом.
Обмен сообщениями и обработка сообщений
391
Итак, имеем следующую структуру объектов в системе:
? один лифт (класса Elevator), который является обработчиком событий, генерируемых пассажирами лифта и одновременно генератором событий, обрабатываемых пассажирами;
? несколько пассажиров (класса Passenger), каждый из которых является как обработчиком событий (генерируемых лифтом), так и генератором событий (например, если пассажир устал ждать лифт, он может отменить свою заявку и отправиться по лестнице пешком).
Кроме этих основных классов объектов, в системе должны быть описаны различные классы сообщений (мы представим описание двух таких классов: сообщение от лифта и сообщение от пассажира), классы, представляющие состояния пассажиров и лифта, и т. п. В листинге 7.2 представлены описания необходимых классов, а в комментариях к ним даны дополнительные пояснения о том, как эти классы могут использоваться в нашей системе.
//------- elevator.h
//=—=======-================“==========—
// Классы, описывающие состояние лифта //=========================================
enum Estate {
STATE_STOP =1, // Лифт стоит
STATE_UP, // Лифт поднимается
STATE_DOWN // Лифт опускается
};
class ElevatorState {
Estate state; // Состояние лифта
int level; // Этаж, на котором он находится;
bool doorsOpen; // Состояние дверей
int people; // Количество людей в лифте
public :
// Конструкторы состояния лифта ElevatorState(Estate state = STATE_STOP, int level = 1, bool doorsOpen = true, int people = 0)
392
Гпава 7
: state(state), level(level), doorsOpen(doorsOpen), people(people)
{}
ElevatorState(const ElevatorState & state)
: state(state.state), level(state.level), doorsOpen(state.doorsOpen), people(state.people)
{}
//==_=========_===========================================:===
// Функции доступа к элементам состояния и изменения состояния // реализованы совершенно примитивно. На самом деле изменение // состояния должно происходить согласно некоторым правилам
========™=—=====™—=
Estate getStateO const { return state; } void setState(Estate st) { state = st; } int getLevel() const { return level; } void setLevel(int lev) { level = lev; } bool isDoorsOpen() const { return doorsOpen; } void setDoorsOpen() { doorsOpen = true; } void setDoorsClose() { doorsOpen = false; } int getPeopleO const { return people; } void setPeople(int pple) { people = pple; }
} ;
//=—=========—=—=——==—===============—==
// Класс ElevatorMessage задает тип сообщений, генерируемых // лифтом при изменении своего состояния
class ElevatorMessage : public Message { public :
// Следующие константы задают классы сообщений //об изменении состояния лифта, static const int MSG_STATE_CHANGED = 1;
// Возможны и другие классы сообщений. . .
private :
// Текущее состояние лифта ElevatorState estate;
public :
// Конструктор
ElevatorMessage(int msgType, const ElevatorState & state)
: Message(msgType), estate(state)
{}
Обмен сообщениями и обработка сообщений
393
11 Функция доступа к аргументу сообщения ElevatorState getStateO const { return estate; }
};
//======================================:================
// Класс Elevator реализует поведение лифта. Лифт генерирует // новое сообщение при изменении состояния и обрабатывает // сообщения, полученные от потенциальных пассажиров лифта //====_====_=====__=========================================
class Elevator : public Generator, public Handler {
// Состояние лифта:
ElevatorState state;
// Признак изменения состояния bool stateChanged;
public :
// Конструктор
Elevator() : stateChanged(false) {}
// Функция генерации нового сообщения Message * generate();
// Функция обработки полученного от пассажиров сообщения bool handle(const Message & msg);
Предыдущая << 1 .. 129 130 131 132 133 134 < 135 > 136 137 138 139 140 141 .. 161 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.