- •1. Понятие класса. Методы класса. Управление доступом к компонентам.
- •2. Объявление и определение класса. Внешнее определение функций.
- •3. Создание, копирование и удаление объекта.
- •4. Статические компоненты класса. Инициализация статических компонентов класса.
- •5. Наследование. Типы наследования. Виртуальное наследование.
- •6. Виртуальные функции
- •7. Абстрактные классы и чистые виртуальные функции. Интерфейс
- •8. Дружественность. Дружественные классы и функции.
- •10. Шаблоны классов
- •9. Вложенные классы. Внутреннее и внешнее определение.
- •11.Создание экземпляров шаблона. Инстанцирование.
- •12.Шаблоны и наследование.
- •13.Терминология шаблонов.
- •14. Параметры и аргументы шаблона.
- •15. Шаблоны компонентных функций
- •16. Полная специализация шаблонов.
- •17. Частичная специализация шаблонов.
- •18. Перегрузка операций. Основные понятия.
- •19. Перегрузка унарных операций.
- •20. Перегрузка бинарных операций.
- •Int test() {
- •Int test() {
- •Int test() {
- •// Делаем что-то
- •Вопрос 23
- •24. Группировка и композиция исключений. Повторная генерация. Перехват всех исключений.
- •25. Автоматическое управление ресурсами. Методика raii.
- •Void f() { FileOpen("myfile.Txt", "rt"); //здесь выполняем нужную работу с файлом //... }
- •Void f (int a) throw (x2, x3)
- •27. Стандартная библиотека. Организация стандартной библиотеки
- •28. Тип вектора. Вложенные типы. Итераторы. Доступ к элементам
- •29.Тип Вектора. Конструкторы. Операции со стеком. Списочные операции. Размеры и емкость.
- •30. Стандартные контейнеры. Вопросы производительности операций.
- •31. Процесс разработки по. Цели и этапы проектирования.
- •32. Процесс разработки по. Выявление классов. Определение операций.
- •33. Процесс разработки по. Определение взаимосвязей. Определение интерфейсов.
- •Этап 3: выявление зависимостей
- •Этап 4: определение интерфейсов
- •34. Паттерны проектирования. Основные паттерны.
- •35. Тестирование по. Методы тестирования.
34. Паттерны проектирования. Основные паттерны.
Паттерны проектирования
Название |
Оригинальное название |
Описание |
Основные паттерны |
||
Делегирование |
Delegation pattern |
Объект передает ответственность за выполнение некоторого действия, связанного с ним, другому объекту |
Функциональный дизайн |
Functional design |
Каждый класс системы реализует только одну обязанность (функцию) и исполняет ее с минимумом побочных эффектов для других объектов |
Неизменяемый объект |
Immutable |
Объект, который неизменен после его создания |
Порождающие паттерны |
||
Абстрактная фабрика |
Abstract factory |
Класс, который представляет интерфейс для создания других объектов |
Строитель |
Builder |
Интерфейс, используемый для создания сложного объекта (объекта-агрегата) |
Фабричный метод |
Factory method |
Определяет интерфейс для создания объекта, но оставляет наследником о том, объект какого класса создавать |
Отложенная инициализация |
Lazy initialization |
Объект не инициализируется до своего использования |
Пул одиночек |
Multiton |
Паттерн гарантирует, что класс имеет только именованные экземпляры объекта и обеспечивает глобальную общую точку доступа к ним. |
Объектный пул |
Object pool |
Класс, который пердставлюет собой интерфейс для работы с инициализированными и готовыми к использованию объектов |
Прототип |
Prototype |
Определяет интерфейс для создания объекта через клонирование другого объекта вместо создания через конструктор |
RAII |
… |
… |
Структурные паттерны |
||
Адаптер |
Wrapper (Adapter) |
Объект, который обеспечивает взаимодействие двух других объектов, первый из которых использует, а другой предоставляет несовместимый с первым интерфейс |
Мост |
Bridge |
Структура, позволяющая изменять интерфейс обращения и интерфейс реализации независимо друг от друга |
Компоновщик |
composite |
Объект, который объединяет в себе другие объекты, подобные ему самому |
Декоратор |
Decorator |
Расширяет функционал другого класса без использования наследования |
Фасад |
Façade |
Объект, который абстрагирует работу с несколькими классами, объединяя их в единое целое |
Поведенческие паттерны |
||
Команда |
Command |
Представляет собой некоторое действие и хранит в себе как само действие, так и его параметры. |
Итератор |
Iterate |
Обеспечивает доступ к элементам некоторого контейнера, не зная его реализации |
Наблюдатель |
Observer |
Объект, который реализует связь «один-ко-многим», при изменении состояния одного из связанных с ним объектов об этом оповещаются все остальные |
Стратегия |
Strategy |
Паттерн предназначен для определения семейства алгоритмов и обеспечения их взаимозаменяемости. |
Шаблонный метод |
Template method |
Определяет основу алгоритма и позволяет наследникам переопределять некоторые его шаги, не изменяя структуры в целом. |
Экспериментирование и анализ
Для проверки выбранной концепции выполняется построение прототипа: прототипа интерфейса (позволяющий «пощупать» программу)/прототип ядра (реализация функционала либо его части).
Самое главное назначение прототипа – это более глубокое осознание решаемой задачи. Нельзя принимать прототип за готовое изделие! Далее выполняется анализ прототипа – это его детальное рассмотрение с целью избегания неоправданного усложнения/упрощения проекта.
Тестирование: на вопрос: «Когда тестировать?», следует отвечать: «При любой возможности».
Методы тестирования:
Метод черного ящика
Метод белого ящика
