- •Введение
- •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.3.3 Протоколы классов
Программирование протоколов классов осуществляется на основе результатов ОО анализа и проектирования. В рамках данного курсового проектирования метод составления протоколов можно формализовать следующим алгоритмом.
Часть 1. Работа с оо словарем ПрО.
Шаг 1.1. Из ОО словаря ПрО взять первый класс и записать следующий код на C++.
class <имя класса>
{
};
Пример. Объявление классов.
class ElectricalAppliance // класс электроприбор
{
};
Шаг 1.2. Записать свойства из ОО словаря ПрО, оставив на потом выбор неизвестных типов данных и модификаторов доступа.
Пример. Объявление свойств классов.
class ElectricalAppliance // класс электроприбор
{
bool state; // состояние
};
Шаг 1.3. Записать объявление методов, оставив на потом выбор параметров, типа возвращаемого значения и модификатора доступа.
Пример. Объявление методов классов.
class ElectricalAppliance // класс электроприбор
{
bool state; // состояние
ElectricalAppliance(); // конструктор по умолчанию
~ElectricalAppliance(); // деструктор
void GetState(); // геттер для состояния
void On(); // включить
void Off(); // выключить
void Imitate(); // имитировать работу в течении еденицы времени
};
Шаг 1.4. Перейти к следующему классу.
Часть 2. Работа с crc-карточками.
Шаг 2.1. Взять CRC-карточку для первого класса и проанализировать второй столбец. При необходимости в параметры методов добавить соответствующие типы.
Пример. Реализация взаимодействия классов.
class Man // класс человек
{
int timeToAction; // время до взаимодействия с печью
Man(); // конструктор
~Man(); // детсруктор
void Imitate( // имитировать деятельность в течении еденицы времени
MicrowaveOven&); // используется печь
};
Шаг 2.2. Перейти к следующему классу.
Часть 3. Работа с диаграммой классов.
Шаг 3.1 Взять диаграмму классов и проанализировать отношения:
наследование: реализовать наследование;
агрегация: объекты одного класса должны быть свойствами класса-агрегата, при этом у класса-агрегата из параметров методов можно удалить параметры типа классов-частей;
использование: отметить, что класс-клиент может вызывать методы класса-сервера – обявить соответствующие методы у сервера как открытые;
ассоциация: сделать то же, что и при использовании, но с двух сторон либо объявить классы друзьями.
Примеры реализации отношений между классами на C++ по диаграмме классов подробно рассмотрены в пункте 4.5.2.1.
Часть 4. Определение модификаторов доступа, типов данных и начальных значений.
Шаг 4.1. По описанию ПрО и диаграмме классов установить модификаторы доступа.
Пример. Установка модификаторов доступа.
class ElectricalAppliance abstract // класс электроприбор - абстрактный класс
{
protected: // защищенные члены класса
bool state; // состояние
public: // открытые члены класса
ElectricalAppliance(); // конструктор по умолчанию
~ElectricalAppliance(); // деструктор
bool GetState(); // геттер для состояния
void On(); // включить
void Off(); // выключить
virtual void Imitate() = 0; // имитировать работу в течении еденицы времени
// чисто виртуальная функция
};
Шаг 4.2. Осмысленно в соответствии с описанием ПрО определить типы данных свойств. При необходимости реализовать свои типы данных (struct, enum, class).
Пример. Реализация типов данных свойств.
enum DoorStates // состояние дверцы
{
Opened, // открыта
Closed // закрыта
};
class Door // класс дверь
{
protected:
DoorStates state; // текущее состояние двери
public:
Door();
~Door();
DoorStates GetState(); // геттер для состояния
void Open(); // открыть дверь
void Close(); // закрыть дверь
};
Шаг 4.3. В соответствии с описанием ПрО и диаграммой состояний и переходов создать конструкторы с параметрами (либо использовать конструкторы по умолчанию).
Шаг 4.4. Добавить параметры в методы в соответствии с описанием ПрО.
Пример. Объявление методов с параметрами.
class Random
{
public:
Random();
~Random();
static void Initialize(); // инициализация ГСЧ
static float Uniform( // равномерный закон
float Min, // левая граница отрезка
int Max); // правая граница отрезка
static float Normal( // нормальный закон
float M, // матожидание
float D); // дисперсия
};
