Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторные работы Case-средства СУ

.pdf
Скачиваний:
39
Добавлен:
11.02.2015
Размер:
1.16 Mб
Скачать

МИНОБРНАУКИ РОССИИ федеральное государственное бюджетное образовательное учреждение

высшего профессионального образования

«Московский государственный технологический университет «СТАНКИН»

(ФГБОУ ВПО МГТУ «СТАНКИН»)

Факультет информационных технологий и систем управления

Кафедра компьютерных систем управления

Евстафиева Светлана Владимировна

Case-средства систем управления

Методические рекомендации по выполнению лабораторных работ по дисциплине «Case-

средства систем управления» для студентов МГТУ «СТАНКИН», обучающихся по

направлению220700.62 Автоматизация технологических процессов и производств

(шифр направления, название)

Москва 2013г.

Оглавление

 

Лабораторная работа №1. Абстрактные классы. Полиморфизм...................................

3

Лабораторная работа №2. Использование паттерна Стратегия ..................................

12

Лабораторная работа №3. Использование паттерна Наблюдатель.............................

21

Лабораторная работа №4. Использование паттерна Декоратор .................................

32

2

Лабораторная работа №1. Абстрактные классы. Полиморфизм

Цель работы: освоить основные принципы полиморфизма и позднего связывания в

C++.

Порядок выполнения работы:

1.Выполнить общую часть лабораторной работы

2.Выполнить индивидуальную часть лабораторной работы

Введение

Класс - разновидность абстрактного типа данных в объектно-ориентированном программировании (ООП), характеризуемый способом своего построения. Суть отличия классов от других абстрактных типов данных состоит в том, что при задании типа данных класс определяет одновременно и интерфейс, и реализацию для всех своих экземпляров.

Модификаторы доступа:

private (закрытый, внутренний член класса) — обращения к члену допускаются только из методов того класса, в котором этот член определён. Любые наследники класса уже не смогут получить доступ к этому члену. Наследование по типу private

запрещает доступ из дочернего класса ко всем членам родительского класса,

включая даже public-члены (С++);

protected (защищённый, внутренний член иерархии классов) — обращения к члену допускаются из методов того класса, в котором этот член определён, а также из любых методов его классов-наследников. Наследование по типу protected делает все public-члены родительского класса protected-членами класса-наследника (С++);

public (открытый член класса) — обращения к члену допускаются из любого кода.

Наследование по типу public не меняет модификаторов родительского класса (С++).

Статический полиморфизм – на этапе компиляции определяется какая именно

функция для объекта будет вызвана.

Динамический полиморфизм – функция, которую необходимо вызвать,

выбирается на этапе выполнения программы, в зависимости от того к какому реальному

классу относится объект.

3

Насле́дование — механизм объектно-ориентированного программирования,

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

Простое наследование

Класс, от которого произошло наследование, называется базовым или родительским (англ. baseclass). Классы, которые произошли от базового, называются потомками, наследниками или производными классами (англ. derivedclass).

Множественное наследование

При множественном наследовании у класса может быть более одного предка. В

этом случае класс наследует методы всех предков. Достоинства такого подхода в большей гибкости. Множественное наследование поддерживается в языке UML.

Общая часть лабораторной работы

1.Создайте новый консольный проект.

2.Добавьте в проект новый класс, отвечающий за общую структуру объекта – геометрической фигуры.

3.Кроме автоматически созданных конструктора и деструктора добавьте к классу еще 2 метода:

GetSquare – возвращающий площадь фигуры;

4

PrintName – печатающий на экране название фигуры.

Описание класса должно выглядеть примерно следующим образом:

class Figure

{

public:

Figure(void);

~Figure(void);

double GetSquare();

void PrintName();

};

4. Реализйте методы класса следующим образом:

Figure::Figure(void)

{

cout << "Figure Constructor called!" << endl;

}

Figure::~Figure(void)

{

cout << "Figure Destructor called!" << endl;

}

double Figure::GetSquare()

{

cout << "Common Figure can't have a square!" << endl; return 0;

}

void Figure::PrintName()

{

cout << "Abstract Figure" << endl;

}

5.Так как в классе Figure используется оператор cout, не забудьте добавить в файл с реализацией класса подключение библиотеки iostream:

#include <iostream> using namespace std;

5

6. По аналогии добавьте класс Rectangle, унаследованный от класса Figure.

В этом классе будут переопределены все методы таким образом, чтобы они сообщали об операциях с классом Rectangle, а не Figure. Что касается площади, то необходимо добавить в класс еще два поля: double a, b. Эти поля будут отвечать за длину и ширину прямоугольника. Метод GetSquare должен расчитывать и печатать площадь.

6

7.Добавьте к проекту новый файл, в котором будет располагаться основная программа:

8.Создайте основную программу, в которой будут динамически создаваться объекты класса Figure и Rectangle. Далее будут вызываться различные методы, а в конце

7

эти объекты будут уничтожаться.

9. Обратите внимание на порядок вызова методов, конструкторов и деструкторов:

8

10.Измените основную программу так, чтобы можно было понаблюдать явления,

происходящие после преобразования дочернего класса Rectangle к классу Figure.

11.Пронаблюдайте за результатом. Что изменилось. Свои наблюдения и причину изменений изложите в отчете.

12.Добавьте в описание всех методов класса Figure ключевое слово virtual, кроме методов PrintName и конструктора:

13.Пронаблюдайте за результатом. Что изменилось. Свои наблюдения и причину

изменений изложите в отчете.

9

14.Приведите класс Figure в полный порядок, добавив ключевое слово virtual к методу

PrintName.

15.Реализуйте массив из 10 элементов типа Figure. В цикле, при помощи cin

запрашивайте какую фигуру хочет добавить в массив пользователь, в зависимости от того, какая фигура выбрана, запросите ее необходимые параметры.

16.В цикле выведите площади всех фигур, добавленных в массив.

Индивидуальные задания

1.Реализуйте класс Circle для работы с кругом. В главной программе поставьте в очередь несколько кругов и прямоугольников.

2.Реализуйте класс Triangle для работы с треугольником. В главной программе поставьте в очередь несколько треугольников и прямоугольников.

3.Реализуйте класс Trapecia для работы с трапецией. В главной программе поставьте в очередь несколько трапеций и прямоугольников.

4.Реализуйте класс Romb для работы с ромбом. В главной программе поставьте в очередь несколько ромбов и прямоугольников.

5.Выполните задание №1, реализовав во всех классах вместо нахождения площади – нахождение периметра фигуры (для круга – длины окружности).

6.Выполните задание №2, реализовав во всех классах вместо нахождения площади – нахождение периметра фигуры (для круга – длины окружности).

7.Выполните задание №3, реализовав во всех классах вместо нахождения площади – нахождение периметра фигуры (для круга – длины окружности).

8.Выполните задание №4, реализовав во всех классах вместо нахождения площади – нахождение периметра фигуры (для круга – длины окружности).

Содержание отчета по лабораторной работе

В отчете по лабораторной работе должны содержаться выполненные общая и индивидуальная части лабораторной работы, со всеми необходимыми пояснениями.

Контрольные вопросы

1. Что такое статический полиморфизм?

10

Соседние файлы в предмете Системы управления