Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodicheskie_ukazania_k_vypolneniyu_KP_OOP.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.89 Mб
Скачать

Часть 5. Реализация методов.

Шаг 5.1. Реализовать тело конструкторов с параметрами.

Шаг 5.2. Рализовать деструкторы – освобождение ресурсов (динамическая память и т.п.).

Шаг 5.3. Реализовать установку свойств по умолчанию.

Пример. Реализация значений по умолчанию для свойств.

Door::Door()

{

state = Closed; // по умолчанию дверь закрыта

}

ElectricalAppliance::ElectricalAppliance()

{

state = false; // по умолчанию прибор выключен

}

Шаг 5.4. Взять диаграмму объектов и диаграмму взаимодействия, проанализировать посылку сообщений. При необходимости добавить новые методы. В методах класса-клиента реализовать вызов методов класса-сервера.

Пример. Вызов классом-клиентом методов класса-сервера.

Man::Man(void)

{

Random::Initialize();

timeToAction = (int)Random::Normal( // время до воздействия на печь распределено нормально

180, // с матожиданием

30); // и дисперсией

}

Шаг 5.5. Взять диаграмму состояний и переходов. Проанализировать состояния, при помощи проверок реализовать в методах класса изменение значений его свойств – тем самым – переход в другое состояние.

Пример. Реализация переходов между состояниями.

void ElectricalAppliance::On()

{

this->state = true;

}

void ElectricalAppliance::Off()

{

this->state = false;

}

void Button::Push()

{

this->On(); // кнопка - электроприбор и при нажатии она включается

}

void Button::Imitate()

{

if (this->GetState()) // кнопка без фиксации

this->Off(); // работает мгновенно в момент нажатия

}

Часть 6. Распределение классов по модулям.

Шаг 6.1. В соответствии с диаграммой модулей распределить классы по модулям.

Часть 7. Реализация многопоточности.

Шаг 7.1 В соответствии с диаграммой процессов при необходимости реализовать многопоточность в приложении.

В результате выполнения шагов всех частей данного алгоритма получится реализовать протоколы классов с их описаниями и телами. Примеры протоколов всех классов ПрО «Моделирование работы микроволновой печи» с подробными комментариями приведены в приложении З.

5.3.4 Реализация модуля главной программы

В рамках данного курсового проектирования метод реализации модуля главной программы можно формализовать следующим алгоритмом.

Шаг 1. Инициализация генератора случайных чисел. Можно реализовать по разному: в теле функции main, в одном из конструкторов класса, в статическом методе класса.

Пример. Инициализация генератора случайных чисел.

void Random::Initialize()

{

srand((unsigned)time(NULL)); // в качестве инициализирующего значения берется текущее значение времени

}

Man::Man(void)

{

Random::Initialize(); // инициализация ГСЧ

timeToAction = (int)Random::Normal( // время до воздействия на печь распределено нормально

60, // с матожиданием

30); // и дисперсией

}

Шаг 2. Объявить экземпляры постоянных классов используя диаграмму объектов и диаграмму классов (отношение 1 к …).

Пример. Объявление объектов.

int main()

{

MicrowaveOven mo;

Man man;

return 0;

}

Шаг 3. Объявить указатели на непостоянные объекты.

Шаг 4. Провести премоделирование системы.

Шаг 5. Создать глобальный цикл имитации работы системы в каждый момент времени.

Шаг 6. В цикле вызвать соответствующие методы соответствующих объектов, которые должны выполняться каждый момент времени.

Пример. Глобальный цикл моделирования.

int main()

{

MicrowaveOven mo; // микроволновая печь

Man man; // человек

mo.On();

for (int i = 0; i < 600; i++) // моделирование работы системы в течении 10 минут

{

cout << "second #" << i << endl;

man.Imitate(mo); // моделирование работы человека

cout << mo; // вывод состояния печи

mo.Imitate(); // моделирование работы печи

cout << endl;

}

mo.Off();

Statistics stat = mo.GetStatistics(); // получение статистики и ее вывод

cout << "Power element has worked " << stat.powerElementWorkTime << " seconds" << endl;

cout << stat.readyCount << " cooking are ready" << endl;

cout << stat.interruptCount << " cooking was interrupted" << endl;

return 0;

}

Шаг 7. Вывести для каждого шага статистику.

Шаг 8. При помощи дополнительных переменных – временных счетчиков реализовать поступление в систему новых непостоянных объектов.

Шаг 9. Вывести требуемую статистику.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]