Вы находитесь на странице: 1из 41

МИНОБРНАУКИ РОССИИ

Федеральное государственное бюджетное образовательное учреждение


высшего образования
«Московский технологический университет»
МИРЭА

Институт Информационных технологий


наименование института (полностью)

Кафедра Вычислительной техники


наименование кафедры (полностью)

Методическое пособие студента для выполнения


практических заданий, контрольных и курсовых работ

Объектно-ориентированное программирование
(наименование дисциплины)

Направление подготовки
(код и наименование)

Профиль
(код и наименование)

Форма обучения Очное


(очная, очно-заочная, заочная)

Программа подготовки
(академический, прикладной бакалавриат)

Квалификация выпускника Бакалавр

Москва 2020
Содержание
1. Введение .................................................................................................... 4
2. Классификация задач ............................................................................... 5
3. Этапы решения задачи ............................................................................. 7
4. Aрхитектура программы .......................................................................... 9
4.1. Схема взаимосвязи объектов ............................................................... 9
4.2. Схема взаимодействия объектов ....................................................... 10
4.3. Способы взаимодействия объектов ................................................... 11
4.4. Алгоритм решения задачи .................................................................. 12
4.5. Классификация сложности задания .................................................. 12
5. Способы описания этапов ..................................................................... 13
5.1. Общие пояснения ................................................................................ 13
5.2. Метод решения .................................................................................... 13
5.2.1. Перечень объектов ........................................................................... 15
5.3. Описание алгоритма............................................................................ 16
5.3.1. Последовательность изложения материала ................................... 16
5.3.2. Иерархия объектов ........................................................................... 16
5.3.3. Взаимодействия объектов ............................................................... 17
5.3.4. Алгоритм функции ........................................................................... 17
5.3.5. Алгоритм метода объекта................................................................ 18
5.4. Блок-схема алгоритма ......................................................................... 19
5.4.1. Последовательность рисования схем ............................................. 19
5.4.2. Схемы алгоритмов функций и методов ......................................... 19
5.5. Код программы .................................................................................... 19
5.6. Тестирование ....................................................................................... 20
5.6.1. Пояснения к тестированию ............................................................. 20
5.6.2. Метод эквивалентного разбиения .................................................. 21
5.6.3. Анализ граничных значений ........................................................... 25

2
6. Ориентированный нагруженный граф ................................................. 28
7. Класс ........................................................................................................ 31
7.1. Виртуальный объект ........................................................................... 31
7.2. Описание класса .................................................................................. 32
7.3. Распределение частей класса по файлам .......................................... 33
7.4. Взаимодействие с объектом ............................................................... 34
7.5. Дерево иерархии объектов ................................................................. 34
8. Фрагменты программной реализации .................................................. 36
8.1. Конструирование программы ............................................................ 36
8.2. Реализация ввода и вывода ................................................................ 36
8.3. Базовый класс ...................................................................................... 36
8.4. Форма вывода данных относительно дерева иерархии и объектов38
8.5. Класс приложение ............................................................................... 38
8.6. Основная функция main ( ) ................................................................. 39
9. Отчет по лабораторной (контрольной) работе .................................... 40
9.1. Общие пояснения ................................................................................ 40
10. Список учебников и интернет ресурсов .............................................. 41

3
1. ВВЕДЕНИЕ

Методика предназначена для студента для выполнения практических зада-


ний, контрольных и курсовых работ по дисциплине «Объектно-ориентированное
программирование» (ООП) с использованием автоматической системы обучения
«Аврора» (АСО «Аврора»).
Методика предназначена для достижения следующих целей:
1. Освоение объектно-ориентированного программирования.
2. Освоение объектно-ориентированного языка программирования С++.
3. Закрепление навыка разработки программы согласно этапам, указанным в
разделе 3.
4. Освоение выполнения всех необходимых работ согласно этапам разра-
ботки программы и соответствующих программных инструментов.
5. Освоение умения разработки программы как системы.
6. Освоение умения проектирования архитектуры программы на базе постро-
ения иерархии объектов.
7. Освоение навыка программирования по заранее определенным правилам.
8. Освоение версионности при разработке программ.
9. Использование единой базы заданий.
10.Унификация системы требований к студентам.
11.Унификация контроля и оценки знаний и качества выполненных заданий.
12.Унификация требований и используемых инструментов (стандартов) при
выполнении этапов решения задачи по ООП.
13.Соблюдение требований относительно отчетных форм документов, утвер-
жденных учебно-методическим отделом университета.
14.Повышение производительности и качества труда студента.
15.Повышение качества образования студента.

Лекционный курс по ООП построен с учетом подготовки будущих инже-


неров. Изложение лекционного материала ведется взаимно однозначным соот-
ветствием окружающего объектного и системного мира. Такой подход облегчает
усвоение и закрепление излагаемого материала.
Окружающий нас мир состоит из объектов. Объекты созданы человеком
или природой. Человек научился из объектов конструировать системы для реше-
ния определенных задач. Система, в свою очередь тоже является объектом. Так
что все происходящее вокруг – это взаимодействие объектов.

Объект – то, что может быть индивидуально описано и рассмотрено.


Система – множество взаимосвязанных и взаимодействующих объектов для ре-
шения одной или множества задач (достижения одной или множе-
ства целей).

Любое программное приложение, разработанное с соблюдением


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

Лекционный курс построен и ориентирован на подготовку будущих инже-


неров. Специалистов, которые будут принимать участие в разработке масштаб-
ных, развивающихся проектов. Поэтому в данном курсе архитектура программы
(правила построения) важнее функциональности (разнообразия и сложности ал-
горитмов, правильной работы). Простота изменения программы важнее ее пра-
вильной работы (после изменения). Любую программу после изменения необхо-
димо заново протестировать и отладить. Если изменения выполняются просто и
согласно определенным правилам, то дальнейшее тестирование и отладка тоже
не вызывают существенных осложнений. Если изменения программы сложны,
не по правилам, то они вызывают появление непредсказуемых ошибок и суще-
ственно усложняют этап повторного тестирования и отладки. Во многих проек-
тах такая ситуации приводит к прекращению дальнейшего развития или просто
краху.
Если правильно работающая программа не допускает возможности ее из-
менения, она перестанет работать правильно, когда изменятся требования, и не-
возможно заставить ее работать правильно.
Если программа работает неправильно, но легко поддается изменению,
можно заставить работать ее правильно и поддерживать ее работоспособность
по мере изменения требований. То есть программа постоянно будет оставаться
полезной.

За преподавателем остается право оценки и принятия окончательного ре-


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

2. КЛАССИФИКАЦИЯ ЗАДАЧ

Задания для студентов классифицируются по разным характеристикам.


Основная характеристика – назначение задания. Приведем их перечень:
− упражнение;
− контрольная;
− лабораторная;
− домашняя (самостоятельная);
5
− курсовая.

Упражнение – предназначено для прояснения работы конструкций алго-


ритмического языка. Задание выполняется при активной поддержке со стороны
преподавателя. Даются необходимые пояснения, подсказки. Тут не имеется в
виду поиск ошибки вместо студента. Подсказки касаются теоретической части и
имеют методический характер, как построить определенную конструкцию сред-
ствами алгоритмического языка, как проектировать тест, для локализации
ошибки или определения ее характера. Делаются замечания при несоблюдении
требований и правил изложения методов, алгоритмов или рисования схем.
Контрольная – предназначена для усвоения навыка конструктивного по-
строения программы. Задание выполняется студентом самостоятельно на одной
паре. Со стороны АСО, дополнительно, после сдачи отчета выполняется про-
верка на заимствование кода программы.
Лабораторная – предназначена для усвоения навыка конструктивного по-
строения программы. Задание выполняется студентом самостоятельно на одной
паре. Студенту предоставляются определенные дополнительные пояснительные
методические материалы и фрагменты (шаблоны) исходного программного кода.
Со стороны АСО, после сдачи отчета, дополнительно выполняется проверка на
заимствование кода программы.
Домашняя (самостоятельная) – предназначена для самостоятельного вы-
полнения студентом. Выдается преподавателем:
− для закрепления пройденного материала;
− студентам с хорошей успеваемостью, для совершенствования и раз-
вития накопленных знаний и навыков;
− в качестве дополнительного задания, при обнаружении заимствова-
ния или после анализа успеваемости (при соответствующей
настройке это может на автомате выполнить АСО).
Курсовая работа – предназначена для решения содержательной задачи.
При ее реализации студент обязан соблюдать все ранее оговоренные правила и
использовать все конструктивные построения, разработанные при реализации
контрольных (лабораторных) задач. Курсовая работа является новым функцио-
нальным наполнением уже реализованных в контрольных (лабораторных) рабо-
тах программ. Работа выполняется студентом самостоятельно. Необходимым
условием допуска студента на защиту курсовой является успешное прохождение
контрольных тестов в рамках АСО «Аврора» и подготовка отчета с соблюдением
всех требований к содержательной части разделов.

6
3. ЭТАПЫ РЕШЕНИЯ ЗАДАЧИ

Этапы решения задачи фиксированы, соответствуют требованиям ГОСТ и


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

Процедурное программиро- Объектно-ориентированное программирование


вание
Постановка задачи (что) Постановка задачи (что)
Метод решения (чем) Используемые методы решения (чем).
Перечень используемых объектов (чем).
Алгоритм решения задачи Архитектура программы – системы, схема
(как) иерархической взаимосвязи объектов (как).
Связи и правила взаимодействия объектов
(как).
Алгоритмы функций (как).
Алгоритмы методов объектов (как).
Блок-схема алгоритма Схема архитектуры.
Схема взаимодействия объектов.
Схема алгоритмов, реализованных в функциях.
Схема алгоритмов реализованных в методах
объектов.
Код программы Код описания классов объектов.
Код конструирования системы, взаимосвязи
объектов.
Код установки взаимодействия объектов.
Код основного алгоритма отработки приложе-
ния.
Тестирование и отладка Определение множества необходимых тестов.
Проектирование тестов.
Тестирование.
Отладка.
Доработка документации Доработка документации
Сдача программы и сопро- Сдача программы и сопроводительной доку-
водительной документации ментации (отчета)
(отчета)
Таблица 1

7
Если выделить самостоятельно и учесть особенности используемой АСО
«Аврора», то этапы решения задачи в ООП выглядят следующим образом;

Объектно-ориентированное программирование
Постановка задачи (что)
Используемые методы решения (чем).
Используемые конструкции алгоритмического языка, если требование за-
дано в постановке задачи (чем).
Используемые стандартные функции или классы, если требование задано в
постановке задачи (чем).
Перечень используемых согласно постановке задачи пользовательских
функций (чем).
Перечень используемых объектов (чем).
Архитектура программы – системы, схема иерархической взаимосвязи объ-
ектов. (как)
Связи и правила взаимодействия объектов (как).
Алгоритмы функций (как).
Алгоритмы методов объектов (как).
Схемы алгоритмов реализованных в функциях.
Схемы алгоритмов реализованных в методах объектов.
Код реализации пользовательских функций.
Код описания классов объектов (заголовочная часть и часть реализации).
Код конструирования системы, иерархической взаимосвязи объектов и
установка связей взаимодействия объектов (реализуется в методе объекта
приложение, см. п.п. 8.5).
Код основного алгоритма отработки приложения (реализуется в методе
объекта приложение, см. п.п. 8.5).
Определение множества необходимых тестов.
Проектирование тестов.
Тестирование.
Отладка.
Доработка документации.
Генерация отчета.
Передача задачи на контрольное тестирование и проверку преподавателю.

На АРМ студента для каждого этапа решения задачи реализована отдель-


ная вкладка. В рамках каждой вкладки студенту предоставляется инструмент для
выполнения работ, предусмотренных соответствующим этапом. Инструменты
функционально упрощены и адаптированы для первокурсника.
Основные цели и требования, которые реализованы в целом в АСО «Ав-
рора» и в рамках АРМ студента:

8
− последовательно выполнять разработку программы для решения по-
ставленной задачи согласно заданным этапам;
− корректно излагать текст в содержательной части этапов;
− соблюдать взаимно однозначное соответствие излагаемого матери-
ала поэтапно, сверху вниз;
− освоить навык разработки программы с соблюдением определенных
технологических правил;
− уметь корректно читать код программы (тренажер на чтение кода);
− уметь составлять необходимое количество тестов для поиска макси-
мального количества потенциальных ошибок в программе;
− уметь целостно, логически непротиворечиво и терминологически
корректно излагать содержание всех этапов выполненной работы.

АСО «Аврора» автоматизирует, освобождает студента от множества ра-


бот:
− ведет архив задач студента и всех сопутствующих материалов;
− гарантирует их сохранность;
− обеспечивает доступ к АРМ студента в режиме 7/24;
− организует проведение занятий согласно расписанию;
− организует оперативное взаимодействие с преподавателем во время
занятия и в любое другое оговоренное время;
− автоматизирует проверку соответствия фактически полученных ре-
зультатов с ожидаемыми согласно тестам студента;
− автоматизирует проверку соответствия фактически полученных ре-
зультатов с ожидаемыми согласно контрольным тестам;
− генерирует отчет с соблюдением требований методического управ-
ления МИРЭА.

4. AРХИТЕКТУРА ПРОГРАММЫ
4.1. Схема взаимосвязи объектов

В основе архитектуры программы лежит иерархическая (древовидная)


схема взаимосвязи объектов.

9
Схема описания архитектуры программы имеет следующий вид

Программа Внешняя среда


Объект 1

Объект 3

Объект 4

Объект 2
Объект 5

Объект 6
Объект 7

Объект 8

Объект 9

Объект 10

Рисунок 1

Внешней среде соответствует:


− клавиатура;
− консоль;
− файл.

4.2. Схема взаимодействия объектов

Схема взаимодействия объектов дополняет схему взаимосвязи.

10
Приложение (программа) Внешняя среда
Объект 1

Объект 3

Объект 4

Объект 2
Объект 5

Объект 6
Объект 7

Объект 8

Объект 9

Объект 10

Рисунок 2

4.3. Способы взаимодействия объектов

Для взаимодействия объектов существует несколько способов.


1. Взаимосвязанные объекты могут непосредственно взаимодейство-
вать.
2. Объекты могут непосредственно взаимодействовать, получая доступ
по координате объекта согласно его расположению на дереве иерар-
хии.
3. Взаимодействие объектов с использованием сигналов и обработчи-
ков. До использования такого способа взаимодействия, предвари-
тельно такие связи необходимо определить (установить).

11
4.4. Алгоритм решения задачи

Алгоритм решения задачи содержит последовательность взаимодействия


объектов.

4.5. Классификация сложности задания

Классифицируем сложность задания (программы) исходя из конструктив-


ного построения взаимосвязи объектов и их взаимодействия.
Первый уровень сложности: взаимодействие допустимо между конструк-
тивно взаимосвязанными объектами и внешней средой.
Второй уровень сложности: взаимодействие допустимо между конструк-
тивно не взаимосвязанными объектами посредством использования координаты
объекта на дереве объектов.
Третий уровень сложности: взаимодействие допустимо между конструк-
тивно не взаимосвязанными объектами посредством использования сигналов и
обработчиков.
Четвертый уровень сложности: курсовая работа.

12
5. СПОСОБЫ ОПИСАНИЯ ЭТАПОВ
5.1. Общие пояснения

При написании содержательного текста, не зависимо от формы изложения,


придерживаться следующих правил:
1. Излагать текст поэтапно, сверху вниз.
2. Текст излагать в третьем лице.
3. Любое понятие или объект первоначально должен быть описан (опре-
делен), а потом использован.
4. Структура описания объекта: назначение; свойства; функционал.
5. Структурировать содержание текста, использовать шаблоны.
6. Обеспечить логическую связность и взаимно однозначную наслед-
ственность изложенного материала, не зависимо от формы изложения,
сверху вниз (от первого этапа до последнего).
7. Каждый последующий этап детализирует и отображает в другой форме
текст из предыдущего этапа.
8. Не допускается первоначальное написание кода программы и затем
полностью переносить фрагменты кода в тексты описания алгоритмов
и схем.

Курс ООП преподается на базе алгоритмического языка С++. Поэтому,


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

5.2. Метод решения

В данном разделе текст должен отвечать на вопрос: чем? Другими словами,


с использованием какого «инструмента» собираемся решить задачу. Под «ин-
струментом», в зависимости от постановки задачи, подразумевается:
1. Математический метод выбранный для решения задачи;
2. Множество требуемых согласно постановке задачи к использованию
конструкций или операторов алгоритмического языка;
3. Множество определенных в постановке задачи стандартных функ-
ций для обязательного использования;
13
4. Множество определенных в постановке функции для разработки и
использования;
5. Множество определенных в постановке задачи объектов;
6. Сверх требуемых, можно добавлять «инструменты» по усмотрению
разработчика исходя из постановки задачи;
7. и т.д. исходя из постановки задачи.

В методе решения материал излагать согласно выше приведенной после-


довательности.

Пример выбора математического метода.


Краткая постановка задачи.
Написать программу решения квадратного уравнения для заданных трех
целочисленных коэффициентов.
Методов решения квадратного уравнения много:
1. Разложение левой части уравнения на множители.
2. Метод выделения полного квадрата.
3. Решение квадратного уравнения по формулам (сюда входит метод
дискриминанта).
4. С использованием теоремы Виета.
5. Решение уравнения способом «переброски».
6. Множество приближенных методов решения.
7. И т.д.
Выбираем один, и его указываем его в качестве «инструмента» решения
задачи. Выбор метода однозначно определяет, как будет выглядеть алгоритм ре-
шения задачи. В пункте «Метод решения» пишем:
Используем метод дискриминанта.

Пример выбора определенных объектов.


Воспользуемся постановкой задачи 4_1_1. В пункте «Метод решения» пи-
шем (согласно шаблону из п.п. 5.2.1):
Используем: базовый объект.
Назначение: класс данного объекта будет наследоваться всеми классами
других объектов; обеспечивает построение дерева иерархии объектов.
Наименование класса объекта: cl_base
14
Свойства:
− наименование объекта: строкового типа;
− указатель на головной объект для текущего объекта (для корневого
объекта значение указателя равно 0); указатель типа базового класса;
− список указателей на объекты подчиненных к текущему объекту в
дереве иерархии: указатели типа базового класса.
Функционал:
− параметризированный конструктор с параметром указателя на го-
ловной объект в дереве иерархии;
− параметризированный конструктор с параметром указателя на го-
ловной объект в дереве иерархии и наименованием объекта;
− метод задания, изменения имени объекта;
− метод получения имени объекта;
− метод вывода наименований объектов в дереве иерархии слева
направо и сверху вниз.

Используем множество объектов двух типов (классов, производных от ба-


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

5.2.1.Перечень объектов

Перечень используемых объектов содержит их последовательное краткое


описание согласно следующему шаблону:
Используем: текстовое наименование объекта
Назначение: описание назначения объекта
Наименование класса объекта: наименование класса объекта
Свойства: назначение свойства объекта, тип.
Функционал: описание функционала объекта по методам.

Описание метода объекта содержит его назначение и необходимые мате-


матические пояснения. Можно указать и наименование метода.

15
5.3. Описание алгоритма
5.3.1.Последовательность изложения материала

При описании алгоритма соблюдать следующую последовательность из-


ложения материала:
1. Описание иерархии объектов.
2. Описание взаимодействия объектов.
3. Описание алгоритмов функции.
4. Описание алгоритмов методов объектов.

5.3.2.Иерархия объектов

Иерархия объектов в составе программы-системы описывается посред-


ством иерархического нумерованного списка.
Пример.
1. Программа, наименование корневого объекта.
1.1. Наименование объекта 1.
1.1.1. Наименование объекта 3.
1.1.2. Наименование объекта 4.
1.2. Наименование объекта 2.
1.3. Наименование объекта 5.
1.3.1. Наименование объекта 6.
1.3.1.1. Наименование объекта 7.

Допускается иерархию представить посредством отступов.

Наименование корневого объекта.


Наименование объекта 1.
Наименование объекта 3.
Наименование объекта 4.
Наименование объекта 2.
Наименование объекта 5.
Наименование объекта 6.
Наименование объекта 7.

16
5.3.3.Взаимодействия объектов

Непосредственное взаимодействие объектов описывается посредством


иерархии объектов. Дополнительное описание для этих взаимодействий не тре-
буется. Тут имеется в виду, что головной объект может вызвать метод непосред-
ственно подчиненного на дереве иерархии объекта. Подчиненный объект тоже
может вызвать метод головного объекта.
Второй способ непосредственного взаимодействия объектов, посредством
доступа к ним по координате на дереве объектов. Дополнительное описание не
требуется.
Взаимодействие по сигналам и обработчикам задается посредством таб-
лицы следующего вида

Объект Сигнал Объект Обработчик

В первом столбце указывается наименование объекта, который выдает сиг-


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

5.3.4.Алгоритм функции

Описание функции задается согласно следующему шаблону:


Функция: наименование функции
Функционал: описание назначения функции (повторяет или уточняет
назначение функции описанный на этапе «Метод решения»).
Параметры: тип, наименование, описание назначения.
Возвращаемое значение: тип и описание содержания.
17
Алгоритм:
Номер Предикат Действие Номер Комментарии
пункта пере-
хода

Алгоритм функции описывается посредством таблицы, которая соответ-


ствует ориентированному нагруженному графу (см. раздел 6). Первый столбец
содержит номера пунктов по порядку возрастания номеров.

5.3.5.Алгоритм метода объекта

Описание метода объекта задается согласно следующему шаблону (струк-


туре):
Класс объекта: наименование класса объекта
Метод: наименование метода
Функционал: описание назначения метода (повторяет или уточняет
функционал объекта данного класса описанный на этапе «Метод решения» ).
Параметры: тип, наименование, описание назначения.
Возвращаемое значение: тип и описание содержания.
Алгоритм:
Номер Предикат Действие Номер Комментарии
пункта пере-
хода

Алгоритм метода описывается посредством таблицы, которая соответ-


ствует ориентированному нагруженному графу. Первый столбец содержит но-
мера пунктов по порядку возрастания номеров.

18
5.4. Блок-схема алгоритма
5.4.1.Последовательность рисования схем

При рисовании схем соблюдать следующую последовательность изложе-


ния материала:
1. Схемы алгоритмов функций.
2. Схемы алгоритмов методов объектов.

5.4.2.Схемы алгоритмов функций и методов

Для алгоритма каждой функции и метода составляется отдельная схема.


Начало и конец задается только для схемы алгоритма основной функции (main()).
В схемах алгоритмов функции или метода начало задается заголовком функции
или метода. В завершении алгоритма пишется «Выход» если функция (метод)
ничего не возвращает или «Возврат» и указывается, что возвращает функция (ме-
тод).
Схемы должны быть набраны постранично. Необходимо, чтобы в отчете
все отображалось корректно, без потерь и искажений.

5.5. Код программы

Для основной функции создается отдельный файл с именем main.cpp. Для


каждого класса создаются два файла. Наименование файлов совпадают с наиме-
нованием класса. Расширения «h» для заголовочной части описания класса, и
расширение «cpp» для части реализации описания класса.
В начало файла с расширением «.cpp» надо добавить инструкцию:
#include "имя_класса.h"
Для исключения повторного добавления описания класса в код про-
граммы, в начале заголовочного файла добавить директивы препроцессора:
#ifndef CLASS_NAME_H
#define CLASS_NAME_H
А в конце заголовочного файла:
#endif

19
Где CLASS_NAME заменяется на «имя класса» набранном в верхнем ре-
гистре.
Текст кода пишется с соблюдением требований структурного программи-
рования. Обязательно задается иерархия вложенности операторов и фрагментов
программного кода.
Блок или составной оператор, заключенный в фигурных скобках, всегда
пишется с новой строки. На первой строке «{«. На последующих строках, с со-
блюдением необходимого сдвига операторы из состава блока или составного
оператора. На последней строке «}».
Часть операторов и фрагменты программ снабжается пояснительными
комментариями.
Идентификаторы переменных, объектов, классов, методов, функций и т.д.
составляются так, чтобы отражали функциональное назначение.

5.6. Тестирование
5.6.1.Пояснения к тестированию

Тестирование — это процесс исполнения программы с целью обнаруже-


ния ошибок.
Тестирование показывает присутствие ошибок, а не их отсутствие. Иными
словами, тестированием можно доказать неправильность программы, но нельзя
доказать ее правильность. Все, что дает тестирование после приложения доста-
точных усилий, – это уверенность, что программа действует достаточно пра-
вильно.
Используем тесты, чтобы попытаться доказать неправильность программы
в целом или его частей (функций, методов). Если такие тесты терпят неудачу, т.е.
тест проходит, тогда считаем функции, методы и в целом реализованный алго-
ритм достаточно правильными.
Тест должен включать две компоненты: описание входных данных и опи-
сание ожидаемого результата.
Каждый тест надо проектировать тщательно, комментируя, для определе-
ния наличия какой ошибки он предназначен.
Система «Аврора» не содержит функцию удаления теста. Это соответ-
ствует одному из принципов (правил) тестирования: «Не следует выбрасывать
тесты».
20
Процесс тестирования и отладки – итерационный. Отладочные действия,
т.е. устранение обнаруженной ошибки не гарантирует, что не появятся новые
или заново уже исправленные ошибки. Поэтому, т.к. каждый тест проектиро-
вался для обнаружения определенной ошибки, его надо сохранить. Такой тест
сразу обнаружит ошибку, которая повторно может появиться.
Необходимо, чтобы были представлены тесты, покрывающие все опреде-
ленные в постановке задачи возможные выходные данные программы. К каж-
дому тесту добавить комментарии, для чего тест предназначен.
При проектировании тестов, как минимум, использовать:
- метод эквивалентного разбиения;
- метод анализа граничных значений.

Надо руководствоваться еще одним принципом тестирования: «Тестиро-


вание — процесс творческий».

5.6.2.Метод эквивалентного разбиения

Разработка тестов методом эквивалентного разбиения осуществляется в


два этапа:
1) выделение классов эквивалентности;
2) построение тестов.

Классы эквивалентности выделяются путем выбора каждого входного


условия и разбиением его на две или более групп. Для проведения этой операции
используют таблицу
Входные условия Правильные классы экви- Неправильные классы
валентности эквивалентности

Правильные классы эквивалентности, представляющие правильные вход-


ные данные программы, и неправильные классы эквивалентности, представляю-
щие ошибочные входные значения. Это соответствует еще одному принципу те-
стирования: тесты для неправильных и непредусмотренных входных данных

21
следует разрабатывать так же тщательно, как для правильных и предусмот-
ренных.
Выделение классов эквивалентности представляет собой в значительной
степени эвристический процесс. При этом существует ряд правил:
1. Если входное условие описывает область значений (например, «целое
данное может принимать значения от 1 До 999»), то определяются один правиль-
ный класс эквивалентности (1 <= значение целого данного <= 999) и два непра-
вильных (значение целого данного < 1 и значение целого данного > 999).
2. Если входное условие описывает число значений (например, «в автомо-
биле могут ехать от одного до шести человек»), то определяются один правиль-
ный класс эквивалентности и два неправильных (ни одного и более шести чело-
век).
3. Если входное условие описывает множество входных значений и есть
основание полагать, что каждое значение программа трактует особо (например,
«известны способы передвижения на АВТОБУСЕ, ГРУЗОВИКЕ, ТАКСИ, ПЕШ-
КОМ или МОТОЦИКЛЕ»), то определяется правильный класс эквивалентности
для каждого значения и один неправильный класс эквивалентности (например,
«НА ПРИЦЕПЕ»).
4. Если входное условие описывает ситуацию «должно быть» (например,
«первым символом идентификатора должна быть буква»), то определяется один
правильный класс эквивалентности (первый символ — буква) и один неправиль-
ный (первый символ — не буква).
5. Если есть любое основание считать, что различные элементы класса эк-
вивалентности трактуются программой неодинаково, то данный класс эквива-
лентности разбивается на меньшие классы эквивалентности.

Построение тестов.
Второй шаг заключается в использовании классов эквивалентности для по-
строения тестов. Этот процесс включает в себя:
1. Назначение каждому классу эквивалентности уникального номера.
2. Проектирование тестов, каждый из которых покрывает как можно боль-
шее число непокрытых правильных классов эквивалентности, пока все правиль-
ные классы эквивалентности не будут покрыты тестами.
З. Проектирование тестов, каждый из которых покрывает один и только
один из непокрытых неправильных классов эквивалентности, пока все
22
неправильные классы эквивалентности не будут покрыты тестами.
Причина покрытия неправильных классов эквивалентности индивидуаль-
ными тестами состоит в том, что определенные проверки с ошибочными входами
скрывают или заменяют другие проверки с ошибочными входами. Например,
требование в постановке задачи устанавливает «тип книги при поиске (ВЫЧИС-
ЛИТЕЛЬНАЯ ТЕХНИКА, ПРОГРАММИРОВАНИЕ или ОБЩИЙ) и количество
(1-9999)». Тогда тест
XYZ 0
отображает два ошибочных условия (неправильный тип книги и количе-
ство) и, вероятно, не будет осуществлять проверку количества, так как про-
грамма может ответить: «ХУZ — НЕСУЩЕСТВУЮЩИЙ ТИП КНИГИ» и не
проверять остальную часть входных данных.

Пример проектирования тестов для задачи 1_2_1 о треугольнике.


Для наглядности, немного изменим постановку задачи.

Создать объект «треугольник», который содержит длины сторон треуголь-


ника. Длины сторон определяются в момент конструирования объекта.
Объект вычисляет периметр и площадь треугольника.
Написать программу, которая создает объект «треугольник» и выводит пе-
риметр и площадь.
Если длины сторон треугольника заданы некорректно, то вычисления не
производятся и выводится сообщение:

Входные данные.
Три целых числа разделенных пробелом.
Значение каждого целого числа должно принадлежать интервалу [1, 100].

Выходные данные.
Если стороны треугольника заданы корректно, то первая строка:
P = «периметр треугольника»
Вторая строка:
S = «площадь треугольника»

Если стороны треугольника заданы некорректно, то первая строка:


23
The sides of the triangle are incorrect

Проведем проектирование тестов по методу эквивалентного разбиения.


Обозначим стороны треугольника: a, b, c. Первоначально надо определить
условия корректности сторон треугольника.
1. Значения a, b, c принадлежат интервалу [1, 100].
2. Сумма длин любых двух сторон должна быть больше длины третьей
стороны.

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


числом.

Выделим классы эквивалентности.


Входные условия Правильные классы экви- Неправильные классы
валентности эквивалентности
Значения a, b, c при- 1) a [1, 100]; b [1, 100]; 2) a < 1
надлежат интервалу [1, c [1, 100] 3) b < 1
100] 4) c < 1
5) a > 100
6) b > 100
7) c > 100
Сумма длин любых 8) a + b > c 11) a + b <= c
двух сторон должна 9) a + c > b 12) a + c <= b
быть больше длины 10) c + b > a 13) c + b <= a
третьей стороны.

Построение тестов для правильных классов эквивалентности.


Тест № 1. Покрывает все правильные классы эквивалентности (1, 8, 9, 10)
и значение площади треугольника целое число.
Входные значения:
345
Ожидаемые выходные значения:
P = 12
S=6

Тест № 2. Покрывает все правильные классы эквивалентности и значение


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

24
Входные значения:
468
Ожидаемые выходные значения:
P = 18
S = 11.6189

Построение тестов для неправильных классов эквивалентности.


Ожидаемое выходное значение во всех тестах:
The sides of the triangle are incorrect
Будем приводить только входные значения тестов.
Тест № 3. Неправильный класс эквивалентности 2.
047
Тест № 4. Неправильный класс эквивалентности 3.
5 -4 7
Тест № 5. Неправильный класс эквивалентности 4.
11 4 -7
Тест № 6. Неправильный класс эквивалентности 5.
101 48 77
Тест № 7. Неправильный класс эквивалентности 6.
55 104 88
Тест № 8. Неправильный класс эквивалентности 7.
90 44 107
Тест № 9. Неправильный класс эквивалентности 11.
4 8 17
Тест № 10. Неправильный класс эквивалентности 12.
5 14 8
Тест № 11. Неправильный класс эквивалентности 13.
90 14 17

5.6.3.Анализ граничных значений

Граничные условия—это ситуации, возникающие непосредственно на,


выше или ниже границ входных и выходных классов эквивалентности. Анализ
граничных значений отличается от эквивалентного разбиения в двух
25
отношениях:
1. Выбор любого элемента в классе эквивалентности в качестве представи-
тельного при анализе граничных значений осуществляется таким образом, чтобы
проверить тестом каждую границу этого класса.
2. При разработке тестов рассматривают не только входные условия (про-
странство входов), но и пространство результатов (т. е. выходные классы экви-
валентности).
Трудно однозначно описать анализ граничных значений, так как это тре-
бует определенной степени творчества и хорошего понимания предметной обла-
сти согласно постановке задачи. Тем не менее приведем несколько общих правил
этого метода.
1. Построить тесты для границ области и тесты с неправильными вход-
ными данными для ситуаций незначительного выхода за границы области, если
входное условие описывает область значений. Например, если правильная об-
ласть входных значений есть от -1,0 до +1,0, то написать тесты для ситуаций:
-1,0; 1,0; -1,001; 1,001.
2. Построить тесты для минимального и максимального значений условий
и тесты, большие и меньшие этих значений, если входное условие удовлетворяет
дискретному ряду значений. Например, если входной файл может содержать от
1 до 255 записей, то получить тесты для 0,1, 255 и 256 записей.
3. Использовать правило 1 для каждого выходного условия. Не всегда
также можно получить результат вне выходной области, но тем не менее стоит
рассмотреть эту возможность.
4. Использовать правило 2 для каждого выходного условия.
5. Если вход или выход программы есть упорядоченное множество (напри-
мер, последовательный файл, линейный список, таблица), то сосредоточить вни-
мание на первом и последнем элементах этого множества.
6. Попробовать свои силы в поиске других граничных условий.

Пример проектирования тестов анализа граничных значений для задачи


1_2_1 о треугольнике из п.п. 5.6.2. Нумерацию тестов продолжим с 12.
Согласно условию: a [1, 100]; b [1, 100]; c [1, 100], значит граничными
значениями являются 1 и 100.
Согласно условию корректности треугольника: a + b > c; a + c > b; c + b > a.
Граничным можно считать значения a, b, c когда: a + b = c + 1; a + c = b + 1; c + b
26
= a + 1.
Исходя из этого проектируем следующее множество тестов
№ Входное значение Ожидаемое выходное значение
теста
12 0 4 7 The sides of the triangle are incorrect
13 1 5 5 P = 11
S = 2.48747
14 100 44 88 P = 232
S = 1934.35
15 101 44 88 The sides of the triangle are incorrect
16 4 0 7 The sides of the triangle are incorrect
17 5 1 5 P = 11
S = 2.48747
18 44 100 88 P = 232
S = 1934.35
19 44 101 88 The sides of the triangle are incorrect
20 4 7 0 The sides of the triangle are incorrect
21 5 5 1 P = 11
S = 2.48747
22 44 88 100 P = 232
S = 1934.35
23 44 88 101 The sides of the triangle are incorrect
24 3 4 5 P = 12
S=6
25 3 4 6 P = 13
S = 5.33268
26 3 4 7 The sides of the triangle are incorrect
27 3 5 4 P = 12
S=6
28 3 6 4 P = 13
S = 5.33268
29 3 7 4 The sides of the triangle are incorrect
30 5 3 4 P = 12
S=6
31 6 3 4 P = 13
S = 5.33268
32 7 3 4 The sides of the triangle are incorrect

27
6. ОРИЕНТИРОВАННЫЙ НАГРУЖЕННЫЙ ГРАФ

Для описания алгоритма метода класса объекта будем пользоваться ориен-


тированным нагруженным графом. Элементами ориентированного нагружен-
ного графа являются:
− вершина, которой сопоставляется определенная функциональная
нагрузка и наименование;
− ориентированное ребро, соединяющее две вершины, имеющее опре-
деленную нагрузку над и под ребром;
− комплекс – это вершина, с исходящими из него определенного коли-
чества ориентированных ребер и вершин перехода по данным реб-
рам.
Схема алгоритма собирается из множества комплексов. Входом в ком-
плекс является вершина, из которой выходят ребра. Схема собирается совмеще-
нием входной вершины одного комплекса с исходящей вершиной другого ком-
плекса. Графически комплекс вершины, для описания алгоритма выглядит сле-
дующим образом:

28
Имя вершины
[ Линейные операторы 0 ]

Предикат 1
Имя вершины 1
[ Линейные операторы 1 ]

Предикат 2
Имя вершины 2
[ Линейные операторы 2 ]

[ Предикат N ]
Имя вершины N
[ Линейные операторы N ]

Рисунок 3

Рассмотрим элементы, представленные на рис. 3:


− «Имя вершины» - наименование комплекса, целое число. Оно совпа-
дает с номером пункта алгоритма.
− «Линейные операторы 0» - операторы вершины комплекса.
− «Предикат i» - условие перехода по ребру. Предикат представляет
определенное логическое выражение ( i = {1÷N} ).
− «Имя вершины i» - наименование комплекса перехода ( i = {1÷N}).
Наименование комплекса перехода совпадает c наименованием очередного ком-
плекса согласно алгоритму или является отметкой завершения алгоритма .
− «Линейные операторы i» - операторы, выполняемые при переходе по
соответствующим ребрам ( i = {1÷N} ).

29
Правило обхода комплекса.
Вход в комплекс осуществляется только через вершину наименования ком-
плекса. После входа отрабатывают операторы вершины комплекса. Далее, по
порядку, сверху вниз проверяются предикаты. Если предикат «Предикат i» при-
нимает значение «истина», то отрабатывается «Линейные операторы i» и проис-
ходит переход к комплексу «Имя вершины i». Если ни один из предикатов не
принимает значение «истина», то фиксируется ошибка. Если на ребре предикат
отсутствует, значение считается истинным и можно выполнить движение по
ребру.
Графическое представление комплекса однозначно отображается в таб-
лице. Ниже приведено правило взаимно однозначного отображения графиче-
ского изображения комплекса в табличной форме.
Номер Предикат Действие Номер пе- Коммента-
пункта рехода рии
Имя вер- Линейные операторы 0
шины
Предикат 1 Линейные операторы 1 Имя вер-
шины 1
Предикат 2 Линейные операторы 2 Имя вер-
шины 2
… … …
Предикат N Линейные операторы N Имя вер-
шины N
Таблица 2

Пример описания алгоритма схемой нагруженного ориентированного


графа.

30
1

2
sum = 0;
i<n
i = 0; 2
sum += a [ i ];
i ++;

Рисунок 4

Достоинства предложенного описания блок-схем алгоритма:


1) Простота используемых графических элементов.
2) Графическое изображение алгоритма строится слева на право и
сверху вниз.
3) Взаимная однозначность реализации кода на языке С++.
4) Возможность и взаимная однозначность представления алгоритма в
табличном виде.

Номер Предикат Действие Номер пе- Коммента-


пункта рехода рии
1 sum = 0; 2
i = 0;
i<n sum += a [i]; 2
2 i++;
Ø

7. КЛАСС
7.1. Виртуальный объект

В языке С++ реальному объекту из предметной области ставится в соот-


ветствие виртуальный объект. Язык обеспечивает жизненный цикл виртуального
объекта по аналогии жизненного цикла объекта из предметной области. Схемы

31
этих жизненных циклов совпадают.
Схема жизненного цикла виртуального объекта.

План Старт объекта Остановка Уничто-


Описание жение

Создание. Функционирование Демонтаж


Конструирование

Рисунок 5

Реализация жизненного цикла виртуального объекта на языке С++


Описание Описание класса
Создание Оператор объявления, new.
Выполняется выделение памяти и исходная инициализа-
ция. Вызывается и отрабатывает конструктор объекта.
Старт объекта Корректное завершение работы конструктора означает,
что объект создан и он готов к работе (начало функцио-
нирования).
Функционирова- Участие объекта в работе программы
ние
Остановка Оператор delete.
Вызов деструктора объекта
Демонтаж Отработка деструктора объекта
Завершение После завершения работы деструктора объекта, освобож-
дается выделенная объекту память.

7.2. Описание класса

Описание класса состоит из двух частей: заголовка и реализации.


Синтаксис описания заголовочной части класса:

32
class «имя класса»
{
[private:]
«список скрытых элементов класса»
public:
«список доступных элементов класса»
protected:
«список защищенных элементов класса»
};

имя класса ::= идентификатор


элемент класса ::= описание свойства (поля, переменной)
::= описание заголовка метода

Синтаксис описания заголовка метода:


«тип возвращаемого значения» «имя метода» ( [список параметров] );

Описание свойств аналогично описанию переменных в языке С.


Часть реализации содержит описание методов класса. Синтаксис описания
метода:

«тип возвращаемого значения» «имя класса» :: «имя метода» ( [список парамет-


ров] )
{
// тело метода (код алгоритма метода)
}

Здесь «имя класса» — это имя того класса, которому принадлежит опреде-
ляемый метод.

7.3. Распределение частей класса по файлам

Описание заголовочной части и части реализации класса в некоторых слу-


чаях можно разместить в одном файле или разнести в двух файлах.
Рекомендуется разместить описание класса в двух файлах. Для
33
размещения заголовочной части описания класса используется файл с наимено-
ванием класса и расширением «.h». Для размещения части реализации описания
класса используется файл с наименованием класса и расширением «.cpp». В
начало файла с расширением «.cpp» надо добавить инструкцию:
#include “имя_класса.h”

Описание класса в некоторых случаях можно разместить в одном файле.


Заголовочная часть должна располагаться перед описанием части реализации. В
качестве наименования файла использовать имя класса, а расширение «.h».

7.4. Взаимодействие с объектом

Обращение к объекту для выполнения определенного метода (реакции)


инициируется:
1. Непосредственным вызовом метода объекта.
2. По сигналу.

7.5. Дерево иерархии объектов

Дерево иерархии объектов формируется согласно архитектуре программы.


Корнем (root) дерева является объект класса приложение.
Относительно корня, каждый объект имеет свою координату на дереве
объектов. Координатой является путь по именам объектов от корня до требуе-
мого объекта. Для исключения неоднозначности, для каждого объекта необхо-
димо задавать уникальное имя.
Например, пусть имеется следующая иерархия объектов программы.

34
root

ob_1

ob_2

ob_3

ob_4

ob_5

ob_6

ob_7

Рисунок 6

Вид координаты (идентификации) объекта ob_ 5 на дереве иерархии объ-


ектов будет следующим:
/root/ob_3/ob_4/ob_5

35
8. ФРАГМЕНТЫ ПРОГРАММНОЙ РЕАЛИЗАЦИИ
8.1. Конструирование программы

Программа конструируется как техническое изделие. Программа состоит


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

8.2. Реализация ввода и вывода

Для взаимосвязи с внешней средой в код программы добавляется:

#include <iostream>
using namespace std;

После этого, в состав программы компилятором добавляются объект вы-


вода и объект ввода. Они организуют обмен данными между консолью и клави-
атурой соответственно. Стандартное наименование объекта вывода «cout» и
«cin» объекта ввода.

8.3. Базовый класс

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


базового объекта. Все используемые в программной реализации классы должны
по иерархии наследственности быть порождены от данного базового класса. В
базовом классе реализовать методы для организации взаимодействия объектов с
использованием сигналов и обработчиков.
Базовый класс должен содержать:
− свойства:
− наименование объекта;
− указатель на головной объект на дереве иерархии объектов;
− перечень указателей на иерархически подчиненных объектов
36
(объектов-потомков).
− методы:
− конструктор объекта с параметром - указатель на головной объ-
ект;
− конструктор объекта с параметрами - имя объекта, указатель на
головной объект;
− присвоения имени объекту;
− получения имени объекта;
− получения указателя на головной объект;
− добавления нового объекта потомка;
− переопределения головного объекта;
− получения указателя на объект потомок по имени объекта;
− получения количества подчиненных объектов;
− получения указателя на объект потомок по индексу в списке
подчиненных объектов;
− удаления объекта потомка (удалить все подчиненные объекты
по иерархии);
− получения указателя на объект по координате на дереве объек-
тов;
− определения номера состояния объекта;
− получения номера состояния объекта;
− установки связи между сигналом и обработчиком;
− удаления связи между сигналом и обработчиком;
− выдачи сигнала и передачи текстового сообщения.

Особо обратить внимание на реализацию сигналов и обработчиков. При


выдаче сигнала (вызове метода emit_signal) в качестве аргументов передаются
указатель на метод сигнала и строковая переменная, содержащая определенное
сообщение. Реализовать алгоритм в котором метод сигнала вызывается один раз
и по одному разу все обработчики, связанные с данным сигналом. Строковая пе-
ременная методу сигнала передается по ссылке и его содержимое может быть
отредактировано алгоритмом реализации метода сигнала. Та же строковая пере-
менная обработчикам передается по значению. Так обеспечивается передача
одинакового сообщения всем обработчикам при выдаче сигнала.

37
8.4. Форма вывода данных относительно дерева иерархии и
объектов

Пример вывода на консоль дерева иерархии объектов.


root
ob_1
ob_2
ob_3
ob_4
ob_5
ob_6
ob_7

Вид вывода на консоль списка состояний объектов.

The object «имя объекта» state «номер состояния объекта»


The object «имя объекта» is not ready

Сообщение неготовности объекта выводится, если номер состояния равен


0.

8.5. Класс приложение

Класс приложения наследуется от базового класса. Объект класса прило-


жения в программе создается в единственном экземпляре и является корневым
объектом в дереве иерархии. Класс содержит:
− методы:
− построения исходного дерева иерархии объектов (конструирова-
ния программы-системы, изделия) и определение (установка)
взаимосвязи объектов;
− запуска приложения (начало функционирования системы, вы-
полнение алгоритма решения задачи).

Примерная заголовочная часть класса приложения.

38
#include "cl_base.h"
class cl_application : public cl_base
{
public:
void bild_tree_objects ( );
int exec_app ( );
};

Тут можно предложить создать абстрактный класс приложения, в котором


определить виртуальные методы bild_tree_objects() и exec_app().
Далее на базе данного класса создать собственный класс приложения.

8.6. Основная функция main ( )

Основная функция реализует стандартный алгоритм.


1. Создать объект приложение.
2. Вызов метода исходного построения дерева объектов.
3. Вызов метода запуска приложения.

#include "cl_application.h"

int main ( )
{
cl_application ob_application ( NULL ); // объявление объекта приложение

ob_application.bild_tree_objects ( ); // создание исходного дерева объектов

return ob_application.exec_app ( ); // запуск функционирования системы


}

Такое построение в обязательном порядке использовать в контрольных за-


дачах и в курсовой работе. В примерах - исходя из постановки задачи и по усмот-
рению преподавателя.

39
9. ОТЧЕТ ПО ЛАБОРАТОРНОЙ (КОНТРОЛЬНОЙ) РАБОТЕ
9.1. Общие пояснения

Отчет генерируется посредством АСО. Форма отчета для курсовой работы


соответствует утвержденной форме по университету. Отчет состоит из:
1. Титульных листов курсовой работы.
2. Содержания.

Форма отчета для упражнения, самостоятельной, лабораторной (контроль-


ной) задания строится по аналогии с отчетом курсовой, в сокращенном формате.
Отчет состоит из:
1. Титульного листа задания.
2. Содержания.

Содержание отчета состоит из следующих разделов и пунктов:


1. Постановка задачи.
2. Методы и объекты.
3. Архитектура программы-системы.
3.1. Иерархия объектов.
3.2. Взаимодействие объектов.
4. Алгоритм функционирования системы, решение задачи.
5. Схемы.
5.1. Схема алгоритмов, реализованных в методах классов.
5.2. Схема алгоритма решения задачи
6. Код программы.
6.1. Код описания классов .
6.2. Код конструирования системы (метода класса «приложение»).
6.3. Код алгоритма решения задачи (метода класса «приложение»).
7. Тестирование.

40
10. СПИСОК УЧЕБНИКОВ И ИНТЕРНЕТ РЕСУРСОВ

Основная и дополнительная учебная литература, необходимая для освое-


ния дисциплины
а) основная литература:
1. Васильев А.Н. Объектно-ориентированное программирование на С++.
Издательство: Наука и Техника. Санкт-Петербург, 2016г. 543 стр.
2. Васильев А.Н. Программирование на С++ в примерах и задачах. Изда-
тельство: Эксмо. Москва, 2017г. 368 стр.
3. Шилдт Г. С++: базовый курс. 3-е изд. Пер. с англ.. — М.: Вильямс,
2017. — 624 с.
4. Иванова Г.С. Объектно-ориентированное программирование. Учебник
для студентов ВУЗов. Издательство: МГТУ им. Н.Э. Баумана. Москва,
2014г. 455 стр.

б) дополнительная литература:
1. Ашарина И.В. Объектно-ориентированное программирование на С++:
лекции и упражнения. Учебное пособие для ВУЗов. Издательство: Горя-
чая линия - Телеком. Москва, 2014г. 335 стр.
2. Ашарина И.В. Язык С++ и объектно-ориентированное программирование
в С++. Лабораторный практикум. Учебное пособие для ВУЗов. Издатель-
ство: Горячая линия - Телеком. Москва, 2015г. 231 стр.
3. Шилдт Г. Полный справочник по С++ [Текст] / Пер. с англ.. — М.: Виль-
ямс, 2008. — 796 с.. — Библиогр.: с https://library.mirea.ru/mgupi/55972

41