- •Введение
- •Общая постановка задачи
- •Детальная постановка задачи
- •Описание предметной области
- •Теоретическое введение
- •Что такое тестирование?
- •Преимущества
- •Ограничения
- •План модульного тестирования
- •План ют:
- •Абстрактный класс, его назначение и основные характеристики.
- •Приложения модульного тестирования Экстремальное программирование
- •Полиморфный класс, его назначение и основные характеристики
- •Указатели на базовый класс. Их свойства
- •Статический и динамический полиморфизм. Понятие о раннем и позднем связывании member-функций.
- •Статический и динамический полиморфизм
- •Понятие о раннем связывании member-функций.
- •Понятие о позднем связывании member-функций.
- •Использование позднего статического связывания
- •Файловый ввод-вывод.
- •Текстовые и двоичные файлы.
- •Архитектура проекта
- •Тестирование
- •Тестирование взаимодействия классов
- •5.1.1 Тесты
- •Тестирование взаимодействия классов в составе динамической коллекции
- •Тестирование всех задач заданных по варианту
- •Usability тестирование
- •Проведение тестирования
- •Приложение а. Листинги исходных кодов
- •Приложение б. Результат работы программы (режим debug)
- •Приложение в. Результат работы программы (режим release)
Полиморфный класс, его назначение и основные характеристики
Полиморфизм — один из четырёх важнейших механизмов объектно – ориентированного программирования (наряду с абстракцией, инкапсуляцией и наследованием).
Абстрактные (или чисто виртуальные) методы не имеют реализации вообще (на самом деле некоторые языки, например C++, допускают реализацию абстрактных методов в родительском классе). Они специально предназначены для наследования. Их реализация должна быть определена в классах-потомках.
Класс может наследовать функциональность от нескольких классов. Это называется множественным наследованием.
Класс называется полиморфным, если в нем есть хотя бы одна виртуальная функция. В общем случае полиморфизм представляет собой способность объекта изменять форму. Если вы разделите этот термин на части, то обнаружите, что «поли» означает много, а «морфизм» относится к изменению формы. Полиморфный объект, следовательно, представляет собой объект, который может принимать разные формы.
Полиморфизм представляет собой способность объекта изменять форму во время выполнения программы.
C++ упрощает создание полиморфных объектов.
Для создания полиморфных объектов ваши программы должны использовать виртуальные (virtual) функции.
Виртуальная (virtual) функция — это функция базового класса, перед именем которой стоит ключевое слово virtual.
Любой производный от базового класс может использовать или перегружать виртуальные функции.
Для создания полиморфного объекта вам следует использовать указатель на объект базового класса
Чисто виртуальная функция — это виртуальная функция базового класса, для которой в базовом классе не определены операторы. Вместо них базовый класс присваивает такой функции значение 0.
При использовании наследования указатель или ссылка на тип базового класса способен адресовать объект любого производного от него класса. Возможность манипулировать такими указателями или ссылками независимо от фактического типа адресуемого объекта называется полиморфизмом.
Указатели на базовый класс. Их свойства
Ссылки на базовый класс могут быть использованы для ссылок на объект производного типа. Такая техника наиболее употребительна при работе с функциями. Если параметр является ссылкой на базовый класс, то он может принимать значение ссылки как на объект базового класса, так и на объекты производных типов.
Статический и динамический полиморфизм. Понятие о раннем и позднем связывании member-функций.
Статический и динамический полиморфизм
Полиморфизм позволяет писать более абстрактные программы и повысить коэффициент повторного использования кода. Общие свойства объектов объединяются в систему, которую могут называть по-разному — интерфейс, класс. Общность имеет внешнее и внутреннее выражение:
Полиморфизм может пониматься как наличие точек кастомизации в коде, когда один и тот же написанный программистом фрагмент кода может означать разные операции в зависимости от чего-либо.
В одном случае конкретный смысл фрагмента зависит от того, в каком окружении код был построен. Это т.н. статический полиморфизм. Перегрузка функций, шаблоны в Си++ реализуют именно статический полиморфизм. Если в коде шаблонного класса вызвана, например, std::sort, то реальный смысл вызова зависит от того, для каких именно типовых параметров будет развернут данный шаблон - вызовется одна из std::sort<T>.
В другом случае конкретный смысл фрагмента определяется только на этапе исполнения и зависит от того, как именно и где именно был построен данный объект. Это обычный, динамический полиморфизм, реализуется через виртуальные методы.
Полиморфизм-перегрузка
Это частный случай полиморфизма. С помощью перегрузки одно и то же имя может обозначать различные методы, причем методы могут различаться количеством и типом параметров, то есть не зависят от своих аргументов. Метод может не ограничиваться специфическими типами параметров многих различных типов.
