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

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 Взять диаграмму классов и проанализировать отношения:

  1. наследование: реализовать наследование;

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

  3. использование: отметить, что класс-клиент может вызывать методы класса-сервера – обявить соответствующие методы у сервера как открытые;

  4. ассоциация: сделать то же, что и при использовании, но с двух сторон либо объявить классы друзьями.

Примеры реализации отношений между классами на 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); // дисперсия

};

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