- •Введение
- •1 Цели и задачи курсового проектирования
- •2 Организация курсового проектирования
- •3 Задание на курсовое проектирование
- •4 Структура пояснительной записки
- •4.1 Типовая структура
- •4.2 Титульный лист
- •4.3 Лист задания
- •4.4 Раздел «Введение»
- •4.5 Раздел «Постановка задачи»
- •4.6 Раздел «Выбор метода решения»
- •5 Метод
- •5.1 Объектно-ориентированный анализ
- •5.2 Объектно-ориентированное проектирование
- •5.2.1 Диаграммы классов
- •5.2.2 Диаграммы объектов
- •5.2.3 Диаграммы состояний и переходов
- •5.2.4 Диаграммы взаимодействия
- •5.3 Объектно-ориентированное программирование
- •5.3.1 Диаграммы модулей
- •5.3.2 Диаграммы процессов
- •5.3.3 Протоколы классов
- •Часть 1. Работа с оо словарем ПрО.
- •Часть 2. Работа с crc-карточками.
- •Часть 3. Работа с диаграммой классов.
- •Часть 4. Определение модификаторов доступа, типов данных и начальных значений.
- •Часть 5. Реализация методов.
- •Часть 6. Распределение классов по модулям.
- •Часть 7. Реализация многопоточности.
- •5.3.4 Реализация модуля главной программы
- •6 Указания по оформлению материалов курсового проекта
- •6.1 Требования к оформлению пояснительной записки
- •6.2 Требования к оформлению программного продукта
- •Перечень ссылок
- •Приложение а Тематика курсовых проектов
- •Приложение б Пример оформления титульного листа
- •Приложение в Пример оформления листа задания на курсовое проектирование
- •Приложение г Пример оформления листа «Реферат»
- •Приложение д Пример оформления листа «Содержание»
- •Приложение е Пример оформления листа «Перечень обозначений, символов, единиц, сокращений и терминов»
- •Приложение ж Пример оформления Технического задания
- •Приложение з Пример оформления листинга программы Приложение г Листинги программных модулей
- •Приложение и Пример оформления экранных форм
Часть 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. Вывести требуемую статистику.
