Базовые принципы и понятия технологии разработки объектно-ориентированных инф...DEVTYPE
Основы современной методологии объектно-ориентированного анализа и проектирования. Особенности визуального моделирования информационных систем. Базовые семантические конструкции языка UML 2 и их описание с помощью специальных обозначений. Основные элементы нотации языка UML 2 и их отличие от языка UML 1. Особенности моделей представления структуры и поведения в проектах разработки сложных программных систем и бизнес-процессов. Канонические диаграммы языка UML 2 и их общая характеристика. Механизмы расширения языка UML 2.
Базовые принципы и понятия технологии разработки объектно-ориентированных инф...DEVTYPE
Основы современной методологии объектно-ориентированного анализа и проектирования. Особенности визуального моделирования информационных систем. Базовые семантические конструкции языка UML 2 и их описание с помощью специальных обозначений. Основные элементы нотации языка UML 2 и их отличие от языка UML 1. Особенности моделей представления структуры и поведения в проектах разработки сложных программных систем и бизнес-процессов. Канонические диаграммы языка UML 2 и их общая характеристика. Механизмы расширения языка UML 2.
С.Ковалёв -- теория категорий как математическое основание MBSEAnatoly Levenchuk
Доклад Сергея Ковалёва (ИПУ РАН) "Теория категорий как математическое основание моделеориентированной системной инженерии" на 96 заседании Русского отделения INCOSE, 12 ноября 2014г.
Понятия технологии разработки объектно-ориентированных информационных систем ...Aimurat Adilbekov
ПЛАН:
1. Причины неудачных проектов
2. Отсутствие моделей при разработке ПО
3. Лучшие практики разработки ПО
4. Что такое визуальное моделирование?
5. Основные понятия визуального моделирования
6. Классификация проектов по сложности
7. Основные понятия ООП
Диаграмма развертывания как модель представления физической архитектуры распределенной информационной системы. Понятия узла, устройства и среды выполнения, их графическая нотация. Основные отношения на диаграмме развертывания и их графическое представление. Различные способы представления отношения развертывания. Пути коммуникации и аннотирования манифестов. Представление физических аспектов материальных ресурсов, задействованных в реализации системы. Примеры построения диаграмм развертывания.
Доклад Михаила Бухарина "Разбивка на модули в архитектурном проектировании. Практика DSM (design structure matrix)" на 94 заседании INCOSE, 8 октября 2014г.
Алексей Иванов -- курс по стыку системной и программной инженерийAnatoly Levenchuk
Доклад Алексея Иванова «Стык системной и программной инженерии в учебном курсе моделеориентированной разработки программоёмких систем» на 75 заседании Русского отделения INCOSE, 24 апреля 2013г.
The document discusses C++ inheritance, specifically public, protected, and private inheritance and their implications for class interfaces. Public inheritance adds the base class interface to the derived class interface. Protected inheritance adds the base class protected and public interfaces to the derived class protected interface. Private inheritance hides the base class interface and makes it part of the derived class implementation only. The appropriate inheritance visibility depends on how the derived class wants to expose the base class interface to other classes.
С.Ковалёв -- теория категорий как математическое основание MBSEAnatoly Levenchuk
Доклад Сергея Ковалёва (ИПУ РАН) "Теория категорий как математическое основание моделеориентированной системной инженерии" на 96 заседании Русского отделения INCOSE, 12 ноября 2014г.
Понятия технологии разработки объектно-ориентированных информационных систем ...Aimurat Adilbekov
ПЛАН:
1. Причины неудачных проектов
2. Отсутствие моделей при разработке ПО
3. Лучшие практики разработки ПО
4. Что такое визуальное моделирование?
5. Основные понятия визуального моделирования
6. Классификация проектов по сложности
7. Основные понятия ООП
Диаграмма развертывания как модель представления физической архитектуры распределенной информационной системы. Понятия узла, устройства и среды выполнения, их графическая нотация. Основные отношения на диаграмме развертывания и их графическое представление. Различные способы представления отношения развертывания. Пути коммуникации и аннотирования манифестов. Представление физических аспектов материальных ресурсов, задействованных в реализации системы. Примеры построения диаграмм развертывания.
Доклад Михаила Бухарина "Разбивка на модули в архитектурном проектировании. Практика DSM (design structure matrix)" на 94 заседании INCOSE, 8 октября 2014г.
Алексей Иванов -- курс по стыку системной и программной инженерийAnatoly Levenchuk
Доклад Алексея Иванова «Стык системной и программной инженерии в учебном курсе моделеориентированной разработки программоёмких систем» на 75 заседании Русского отделения INCOSE, 24 апреля 2013г.
The document discusses C++ inheritance, specifically public, protected, and private inheritance and their implications for class interfaces. Public inheritance adds the base class interface to the derived class interface. Protected inheritance adds the base class protected and public interfaces to the derived class protected interface. Private inheritance hides the base class interface and makes it part of the derived class implementation only. The appropriate inheritance visibility depends on how the derived class wants to expose the base class interface to other classes.
Техносфера Mail.ru Group, МГУ им. М.В. Ломоносова.
Курс "Методы распределенной обработки больших объемов данных в Hadoop"
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9rPxMIgPri9YnOpvyDAL9HD
Техносфера Mail.ru Group, МГУ им. М.В. Ломоносова.
Курс "Методы распределенной обработки больших объемов данных в Hadoop"
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9rPxMIgPri9YnOpvyDAL9HD
Техносфера Mail.ru Group, МГУ им. М.В. Ломоносова.
Курс "Методы распределенной обработки больших объемов данных в Hadoop"
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9rPxMIgPri9YnOpvyDAL9HD
Доклад Александра Макарова для Съесть собаку #10: PHP, 12/10/2017.
Тезисы:
- Что такое архитектура сайта и зачем она нужна
- Виноват ли фреймворк в плохой архитектуре
- Где выход из сложности и регрессий
- Что делать со сложным доменом
- Выводы.
Слайды для лекции о паттернах, что я давал в Aller Media Norge в 2019.
Ссылка на исходник на GDocs:
https://docs.google.com/presentation/d/1CL2umKOcEeBehJ_hFlaD7P5pdoey_trCTeSnd5TiBSI/edit?usp=sharing
Introduction
What are design patterns?
List of design patterns in Drupal 8 core
Patterns explanation in simple words
Usage examples from Drupal 8 core
https://drupalcampkyiv.org/node/59
Техносфера Mail.ru Group, МГУ им. М.В. Ломоносова.
Курс "Методы распределенной обработки больших объемов данных в Hadoop"
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9rPxMIgPri9YnOpvyDAL9HD
Техносфера Mail.ru Group, МГУ им. М.В. Ломоносова.
Курс "Методы распределенной обработки больших объемов данных в Hadoop"
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9rPxMIgPri9YnOpvyDAL9HD
Техносфера Mail.ru Group, МГУ им. М.В. Ломоносова.
Курс "Методы распределенной обработки больших объемов данных в Hadoop"
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9rPxMIgPri9YnOpvyDAL9HD
Техносфера Mail.ru Group, МГУ им. М.В. Ломоносова.
Курс "Методы распределенной обработки больших объемов данных в Hadoop"
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9rPxMIgPri9YnOpvyDAL9HD
Техносфера Mail.ru Group, МГУ им. М.В. Ломоносова.
Курс "Методы распределенной обработки больших объемов данных в Hadoop"
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9rPxMIgPri9YnOpvyDAL9HD
Лекция 5. MapReduce в Hadoop (алгоритмы)Technopark
Техносфера Mail.ru Group, МГУ им. М.В. Ломоносова.
Курс "Методы распределенной обработки больших объемов данных в Hadoop"
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9rPxMIgPri9YnOpvyDAL9HD
Техносфера Mail.ru Group, МГУ им. М.В. Ломоносова.
Курс "Методы распределенной обработки больших объемов данных в Hadoop"
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9rPxMIgPri9YnOpvyDAL9HD
Лекция 3. Распределённая файловая система HDFSTechnopark
Техносфера Mail.ru Group, МГУ им. М.В. Ломоносова.
Курс "Методы распределенной обработки больших объемов данных в Hadoop"
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9rPxMIgPri9YnOpvyDAL9HD
Техносфера Mail.ru Group, МГУ им. М.В. Ломоносова.
Курс "Методы распределенной обработки больших объемов данных в Hadoop"
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9rPxMIgPri9YnOpvyDAL9HD
Лекция 1. Введение в Big Data и MapReduceTechnopark
Техносфера Mail.ru Group, МГУ им. М.В. Ломоносова.
Курс "Методы распределенной обработки больших объемов данных в Hadoop"
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9rPxMIgPri9YnOpvyDAL9HD
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"Technopark
Технопарк Mail.ru Group, МГТУ им. Н.Э. Баумана. Курс "Базы данных".
Лекция №10 "Нереляционное решение в области баз данных — NoSQL". Лектор - Станислав Ступников.
Вводная часть посвящена определению и истории развития концепции NoSQL. Даются характеристики, рассказывается о способах использования. Рассматриваются виды NoSQL БД, теоретические основы NoSQL, а в конце лекции обсуждаются недостатки NoSQL-решений, а также проводится сравнение разных NoSQL-решений.
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9obOz5K695ugYuiOOCBciEi
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...Technopark
Технопарк Mail.ru Group, МГТУ им. Н.Э. Баумана. Курс "Базы данных".
Лекция №10 "Нереляционное решение в области баз данных — NoSQL". Лектор - Станислав Ступников.
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9obOz5K695ugYuiOOCBciEi
Технопарк Mail.ru Group, МГТУ им. Н.Э. Баумана. Курс "Базы данных".
Лекция №9 "Безопасность баз данных". Лектор - Павел Щербинин.
Открывается лекция рассказом о резервном копировании (о логических и физических резервных копиях, о выборе данных для копирования). Затем определяется терминология для обсуждения дальнейших вопросов. После этого рассматриваются основы учётных записей: таблицы доступа, привилегии, виды записей. Обсуждаются SQL-injection, список смежных вершин (Adjacency Set), вложенное множество (Nested Set), материализованный путь (Materialized Path) и комбинированный подход.
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9obOz5K695ugYuiOOCBciEi
СУБД 2013 Лекция №8 "Конфигурирование базы данных"Technopark
Технопарк Mail.ru Group, МГТУ им. Н.Э. Баумана. Курс "Базы данных".
Лекция №8 "Конфигурирование базы данных". Лектор - Павел Щербинин.
Сначала объясняются основы конфигурирования и общие принципы настройки. Далее рассказывается об области видимости, о настройке использования памяти, обсуждается размер блока ключей key_cache_block_size. Рассматривается устройство и использование кэша InnoDB, а также кэшей потоков и таблиц. Затем говорится об особенностях ввода/вывода в InnoDB. Далее рассказывается о табличном пространстве, оптимизации файловой сортировки, переменных состояния. Финальная часть лекции посвящена репликации: настройка, синхронизация, топология, планирование пропускной способности, администрирование и обслуживание, проблемы и их решения.
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9obOz5K695ugYuiOOCBciEi
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"Technopark
Технопарк Mail.ru Group, МГТУ им. Н.Э. Баумана. Курс "Базы данных".
Лекция №7 "Оптимизация запросов и индексирование". Лектор - Павел Щербинин.
Вначале рассказывается об оптимизации доступа к данным, о декомпозиции соединения и состоянии запроса. Далее идёт большой блок, посвящённый оптимизатору запросов (изменение порядка соединения, применение алгебраических правил эквивалентности, оптимизации COUNT(), MIN(), MAX(), вычисление и свертка константных выражений, покрывающие индексы, оптимизация подзапросов, раннее завершение, сравнение по списку IN() и распространение равенства). Затем последовательно рассматриваются такие вещи, как соединение (JOIN) в MySQL, оптимизатор сортировки, коррелированные подзапросы, слияние и непоследовательный просмотр индексов, функции SELECT & UPDATE, COUNT(). После этого рассказывается об оптимизации запросов с помощью JOIN, GROUP BY, DISTINCT и LIMIT со смещением. В конце лекции даётся информация о кэшировании запросов, объединённых таблицах и секционировании.
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9obOz5K695ugYuiOOCBciEi
Технопарк Mail.ru Group, МГТУ им. Н.Э. Баумана. Курс "Базы данных".
Лекция №5 "Определение узких мест". Лектор - Павел Щербинин.
Вначале рассказывается о подсистемах хранения: MyISAM, InnoDB, Memory, о критериях выбора подсистем хранения, приводятся практические примеры. Затем обсуждается тема индексирования (B-tree, хеш-индексы) и EXPLAIN (столбцы id, table, possible_keys, key, key_len).
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9obOz5K695ugYuiOOCBciEi
Технопарк Mail.ru Group, МГТУ им. Н.Э. Баумана. Курс "Базы данных".
Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-запросы". Лектор - Павел Щербинин.
Лекция открывается рассказом о том, что такое профилирование запроса, каковы его этапы выполнения в MySQL. Рассказывается о том, как планировать запрос, как осуществляется протоколирование запросов, как собирается статистика. Объясняются основы индексирования, подробно обсуждаются стратегии индексирования для достижения высокой производительности: изоляция столбца, кластерные индексы (преимущества и недостатки), размещение данных в MyISAM и InnoDB, покрывающие индексы. Далее затрагивается тема нормализации и денормализации, а также таблиц счётчиков. В завершении рассказывается о версионировании схемы БД: о методах инкрементных изменений, идемпотентных изменений, уподобления структуры БД исходному коду.
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9obOz5K695ugYuiOOCBciEi
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...Technopark
Технопарк Mail.ru Group, МГТУ им. Н.Э. Баумана. Курс "Базы данных". Лекция №4 "Расширенные возможности работы с базами данных. Триггеры и хранимые процедуры"
Лектор - Павел Щербинин.
Первая часть лекции посвящена хранимым процедурам (использование, примеры кода, аспекты безопасности при использовании хранимых процедур): LOOP, REPEAT, WHILE, HANDLER, курсоры, EXECUTE. Во второй части рассказывается о триггерах: BEFORE, AFTER, INSTEAD OF, о специальных таблицах inserted, updated и deleted, об использовании триггеров для поддержания целостности и бизнес-логики, о проблемах при использовании триггеров, приводятся примеры кода. В завершающей части лекции обсуждаются вопросы, связанные с транзакциями: концепция A.C.I.D.; уровни изоляции ANSI/ISO (SET TRANSACTION ISOLATION LEVEL); взаимовлияние транзакций и проблемы lost update, dirty read, non-repeatable read и phantom read; технология MVCC (контроль версионирования конкуренции); конкуренция; параллельность и согласованность.
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9obOz5K695ugYuiOOCBciEi
СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"Technopark
Технопарк Mail.ru Group, МГТУ им. Н.Э. Баумана. Курс "Базы данных". Лекция №3 "Выборка данных (продолжение). Транзакции"
Лектор - Павел Щербинин.
Лекция начинается с рассказа о добавлении данных и операторе INSERT, о модификации данных и операторе UPDATE, об удалении данных и операторе DELETE. Затем небольшая часть лекции посвящена пользовательским переменным. После этого даётся информация о подзапросах: SUBQUERIES, ROW SUBQUERIES, SUBQUERIES in FROM. Далее говорится об агрегации (UNION), о семействе функций JOIN и соединении таблиц, а в завершение лекции — о понятии VIEW (каковы преимущества, ограничения и особенности, алгоритмы использования и изменение).
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9obOz5K695ugYuiOOCBciEi
СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"Technopark
Технопарк Mail.ru Group, МГТУ им. Н.Э. Баумана. Курс "Базы данных". Лекция №2 "Модификация данных. Выборка данных (начало)"
Лектор - Павел Щербинин.
Сначала завершается рассмотрение типа данных MySQL «Дата и время». Затем рассказывается о создании таблиц (CREATE TABLE): create_definition, column_definition, reference_defenition, обновление кортежа в родительском отношении. Далее обсуждается процедура изменения таблицы (ALTER TABLE), выборка данных и оператор SELECT, а также фильтрация (формирование групп, агрегаторы).
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9obOz5K695ugYuiOOCBciEi
2. Лекция №7. Принципы и шаблоны
ОО-проектирования. Базовые и
порождающие шаблоны
• Ключевые проблемы и принципы объектно-ориентированного
проектирования.
• Типология шаблонов.
• Базовые шаблоны: наследование и композиция, интерфейс,
делегирование, неизменяемые объекты.
• Порождающие шаблоны: абстрактные фабрики, виртуальные
конструкторы, прототипы, строители, классы с единственным
экземпляром.
• Постановка задач к практикуму №5.
3. Объектно-ориентированное
проектирование: общие сведения
Цель объектно-ориентированного проектирования — разработка
архитектуры (дизайна) сложных программных систем в соответствии с
заданными или общепринятыми критериями качества и с учетом
реализуемости архитектуры на выбранном языке объектно-
ориентированного программирования.
Критерии качества архитектуры, как правило, обеспечивают:
• возможность повторного использования;
• гибкость настройки;
• расширяемость и переносимость;
• структурированность и модульность;
• компактность и разумный уровень детализации;
• понятность и простоту (в том числе взаимодействия компонентов).
8. Причины перепроектирования
Явное задание классов при создании объектов:
• привязка к реализации (классу), а не к интерфейсу (типу).
Явное задание способа выполнения операций:
• сужение множества вариантов обслуживания запроса до
единственного возможного.
Зависимость от программной и (или) аппаратной платформы.
Зависимость клиента от представления или реализации объекта:
• потенциальная необходимость модификации клиента при
изменении способа представления, хранения или реализации
объекта.
Зависимость от алгоритмов.
Сильная связанность классов:
• формирование монолитных систем без слоевой структуры.
Чрезмерное использование наследования.
9. Максимы проектирования
Не решать каждую задачу «с нуля»
Инкапсулировать допускающие изменения элементы дизайна и
поведения (напр., алгоритмы, состояния, процессы создания объектов)
Программировать в соответствии с интерфейсом, а не с
реализацией (англ. Programming to interfaces):
• клиент не должен обладать информацией о типах используемых
объектов, если они имеют ожидаемый интерфейс;
• клиент не должен знать о классах, посредством которых
используемые объекты реализованы
Проектировать системы с учетом будущих изменений
Предпочитать композицию объектов, а не наследование классов
Использовать возможности языка программирования
• Но: поведение системы должен определять не язык, а
проектировщик
10. Шаблоны (паттерны)
проектирования
Обобщенные типовые архитектурные решения задач объектно-
ориентированного проектирования известны как шаблоны (паттерны)
проектирования.
Примечание: использованный ранее термин «шаблон класса
(функции)» известен в английском языке как class (function) template,
тогда как для обозначения архитектурных концепций традиционно
применяется англоязычный эквивалент design pattern.
Один из первых авторитетных каталогов шаблонов проектирования
составлен Э. Гаммой (Erich Gamma), Р. Хелмом (Richard Helm), Р.
Джонсоном (Ralph Johnson) и Дж. Влиссидесом (John Vlissides),
известными как «банда четырех» (англ. GoF — Gang of Four) и
опубликовавшими книгу Design Patterns: Elements of Reusable Object-
Oriented Software.
11. Шаблоны: определение,
преимущества, состав
По определению членов GoF, шаблон — это описание
взаимодействия объектов и классов, адаптированных для решения
общей задачи проектирования в конкретном контексте.
Активное использование шаблонов проектирования позволяет:
• повысить качество кода;
• улучшить техническую документацию;
• обеспечить качество сопровождения ПО.
12. Типология шаблонов (1 / 2)
В зависимости от цели использования шаблоны делятся на три
категории:
• порождающие — описывают процессы создания объектов;
• структурные — описывают способы композиции классов
(объектов);
• поведенческие — описывают взаимодействие классов (объектов)
между собой.
16. Базовые шаблоны:
наследование и композиция
Наследование классов (англ. inheritance) и композиция объектов
(англ. composition) являются распространенными приемами
повторного использования функциональных возможностей объектно-
ориентированных систем, а потому могут рассматриваться как базовые
шаблоны.
Наследование Композиция
Что? Определяет реализацию
одного класса в терминах
другого (white-box reuse)
Определяет реализацию
одного объекта в терминах
другого (black-box reuse)
Как? Определение подкласса Определение атрибута
(объединение объектов)
Когда? При компиляции
(статически)
При компиляции
(статически) или при
выполнении (динамически)
17. Наследование и композиция:
«за» и «против»
Критерий качества Наследование Композиция
Реализация и модификация Простая Сложная
Зависимость от реализации Высокая Низкая
Соблюдение инкапсуляции Нет Есть
Замена реализации при
выполнении
Невозможна Возможна
Необходимость тщательного
проектирования интерфейса
Нет Есть
Гибкость и возможность повторного
применения
Низкая Высокая
Размер класса Большой Небольшой
Количество классов Зависит от дизайна
Количество используемых объектов Мало Много
19. Три способа композиции
Характеристика
участника
Implementer
Инкапсуля-
ция
экземпляра
Инкапсуля-
ция ссылки
Инкапсуля-
ция указателя
Обязательность Обязателен Обязателен Необязателен
Количество
(кратность)
1 .. * 1 .. * 0 .. *
Зависимость
времени жизни (ВЖ)
от ВЖ агрегата
Зависит
(совпадает)
Не зависит
(совпадает
или
превышает)
Не зависит
Возможность
совместного
использования
Нет Есть Есть
Определение
атрибута
Implementer
impl;
Implementer
&impl;
Implementer
*impl;
20. Агрегирование или
осведомленность?
Агрегирование (англ. aggregation) и осведомленность (англ.
acquaintance) — две стороны композиции. Различия между ними
весьма существенны, хотя и определяются предполагаемым
использованием объектов, а не механизмами языка.
Характеристика Агрегирование Осведомленность
Семантика «Содержит», «владеет»,
«несет ответственность»
«Знает», «использует»,
«ассоциирован с…»
Сила Сильное Слабое
Постоянство Высокое Низкое
Частота применения Низкая Высокая
Время жизни Одинаково для агрегата и
составляющих
Любое
Инкапсулируемый
элемент
Экземпляр, ссылка,
указатель
Ссылка, указатель
22. Базовые шаблоны:
делегирование
Делегирование (англ. delegation) — это передача ответственности за
выполнение запроса клиента от непосредственного получателя
(делегирующей стороны, англ. delegator) уполномоченному (делегату,
англ. delegate). Различают делегирование при наследовании классов
и при композиции объектов.
Назначение делегирования — абстрагирование (при композиции —
также инкапсуляция) поведения (реакции на клиентский запрос).
Шаблон делегирования используется в целом ряде шаблонов GoF
(«посетитель», «стратегия» и др.).
Ключевое достоинство делегирования — упрощение композиции
поведений на стадии выполнения.
Ключевой недостаток делегирования — трудность статического
анализа и понимания сильно параметризованного исходного кода.
23. Делегирование: реализация
Наследование Композиция
Получатель Производный класс Объект на стороне «целое»
Уполномоченный Базовый класс Объект на стороне «часть»
Доступ к
получателю
Указатель this Указатель на получателя
(должен быть передан)
Абстрактная
семантика
«Является» «Содержит»
Delegate
#DoSomething()
Delegator
+ProcessReq()
Delegator
-delegate
+ProcessReq()
Delegate
+DoSomething()
25. Базовые шаблоны:
неизменяемые объекты
Неизменяемый объект (англ. immutable object) — шаблон,
позволяющий создать программный объект, структурно не
допускающий модификации после (окончательного) создания.
Основное предназначение шаблона — устранение дорогостоящих
операций копирования и сравнения объектов путем использования
семантики ссылок.
В дизайне систем различают неизменность объекта:
• с точки зрения самой системы и ее пользователей;
• на битовом (внутримашинном) и абстрактном (логическом) уровне.
Достоинства неизменяемого объекта:
• константность, гарантируемая компилятором;
• потоковая безопасность;
• структурная надежность;
• простота анализа и понимания кода.
26. Неизменяемые объекты:
реализация
Реализация неизменяемого объекта на языке C++ предполагает:
• полное построение объекта конструктором класса (кроме
отложенной инициализации подмножества атрибутов);
• полное отсутствие неконстантных открытых статических и
нестатических атрибутов (без спецификатора const или со
спецификатором mutable);
• отсутствие мутаторов, изменяющих состояние всего объекта (для
побитовой неизменности) или части, видимой извне пользователю
(для логической неизменности).
27. Базовые шаблоны: интерфейс
Интерфейсный класс, или интерфейс (англ. interface) — шаблон,
структурирующий способы доступа к одному или нескольким (другим)
классам.
Классическое назначение интерфейса — определение нового
абстрактного типа данных (ADT) в целях его дальнейшего повторного
использования. Такой абстрактный тип обычно не содержит никаких
данных, но демонстрирует необходимое поведение.
Достоинство интерфейса состоит в обеспечении возможности
статической или динамической замены конкретных классов,
реализующих указанный интерфейс.
29. Порождающие шаблоны:
общие сведения
Порождающие шаблоны:
• абстрагируют процессы создания объектов и инкапсулируют
сведения об инстанцируемых классах;
• обеспечивают независимость системы от способа создания,
композиции и представления объектов;
• наиболее важны для систем, основанных на композиции больше,
чем на наследовании.
30. Порождающие шаблоны:
абстрактная фабрика
Абстрактная фабрика (инструментарий, англ. kit) — шаблон уровня
объекта, предоставляющий интерфейс для создания семейств
взаимосвязанных (взаимозависимых) объектов.
Используется, когда:
• система не должна зависеть от способов создания, компоновки и
представления объектов;
• объекты разных семейств гарантированно не должны
использоваться совместно;
• используемое семейство объектов должно являться параметром
конфигурации системы.
Участники: абстрактная фабрика, конкретная фабрика, абстрактный
продукт, конкретный продукт, клиент.
32. Абстрактная фабрика:
обсуждение
Результаты:
• сокрытие (изоляция) конкретных классов — имена изготавливаемых
классов известны только абстрактной фабрике;
• упрощение замены семейств продуктов — класс фабрики
упоминается в приложении только при ее инстанцировании;
• обеспечение гарантии сочетаемости продуктов.
Недостаток:
• трудность поддержки новых видов продуктов.
Аспекты реализации:
• фабрика как объект класса с единственным экземпляром;
• создание продуктов через фабричные методы или прототипы;
• расширяемость фабрик.
33. Порождающие шаблоны:
строитель
Строитель — шаблон уровня объекта, отделяющий конструирование
сложного объекта от его представления.
Используется, когда:
• алгоритм создания сложного объекта не должен зависеть от состава
объекта и способов компоновки его частей;
• процесс конструирования объекта должен обеспечивать его
различные представления.
Участники: абстрактный строитель, конкретный строитель,
распорядитель, продукт, клиент.
35. Строитель: обсуждение
Результаты:
• возможность изменения внутреннего представления продукта —
процесс сборки, представление и внутренняя структура продукта
могут быть скрыты за абстрактным интерфейсом строителя;
• изоляция кода создания и представления сложного объекта —
классы, определяющие внутреннюю структуру продукта, в
интерфейсе строителя не присутствуют;
• возможность пошаговой сборки — предоставляемый строителем
контроль над сборкой продукта более тонок, чем у других шаблонов.
Аспекты реализации:
• интерфейс сборки и конструирования;
• отсутствие абстрактных продуктов;
• определение пустых методов в абстрактных строителях.
36. Порождающие шаблоны:
фабричный метод
Фабричный метод (виртуальный конструктор, англ. virtual constructor)
— шаблон уровня класса, определяющий абстрактный интерфейс
создания объектов и делегирующий выбор типов инстанцируемых
объектов конкретным подклассам.
Используется, когда:
• заранее неизвестен тип инстанцируемых объектов;
• дизайн класса с фабричным методом предполагает, что
создаваемые объекты специфицируются подклассами;
• класс делегирует свои обязанности по инстанцированию объектов
одному из своих подклассов.
Участники: абстрактный создатель, конкретный создатель,
абстрактный продукт, конкретный продукт.
38. Фабричный метод:
обсуждение (1 / 2)
Результаты:
• независимость системы от классов продуктов — имена классов
продуктов инкапсулированы в фабричных методах конкретных
создателей;
• возможность использования фабричных методов как операций-
«зацепок» (англ. hook operations);
• соединение параллельных иерархий классов — фабричный метод
инкапсулирует сведения о том, какие классы могут работать вместе.
39. Фабричный метод:
обсуждение (2 / 2)
Недостаток:
• подкласс конкретного создателя должен определяться для создания
даже одного экземпляра интересующего продукта.
Аспекты реализации:
• базовый класс-создатель с неабстрактным фабричным методом;
• параметризация фабричного метода дискриминантом продукта;
• использование шаблонов классов для автоматизации определения
классов конкретных создателей.
40. Порождающие шаблоны:
прототип
Прототип — шаблон уровня объекта, определяющий вид создаваемого
объекта при помощи экземпляра-прототипа, который явно копируется
при создании объекта.
Используется, когда:
• инстанцируемые классы определяются динамически;
• необходимо избежать возникновения иерархий классов или фабрик,
параллельных иерархиям классов продуктов;
• количество прототипов невелико.
Участники: абстрактный прототип, конкретный прототип, клиент.
42. Прототип: обсуждение (1 / 2)
Результаты:
• сокрытие (изоляция) конкретных классов — сокращает количество
имен классов, известных клиенту;
• поддержка динамического изменения состава продуктов — клиент
может удалять и устанавливать прототипы во время выполнения
кода;
• сокращение количества необходимых системе классов — роль
«класса»-продукта может выполнять должным образом
настроенный и зарегистрированный на стороне клиента экземпляр-
прототип, а роль класса-создателя — операция клонирования;
• динамическое конфигурирование приложений.
43. Прототип: обсуждение (2 / 2)
Недостаток:
• необходимость поддержки (в общем случае, нетривиальной)
операции клонирования объектов.
Аспекты реализации:
• использование диспетчера прототипов (ассоциативного реестра,
возвращающего искомый прототип по заданному ключу);
• клонирование путем «глубинного» (не имеет встроенной поддержки
в C++) или «поверхностного» (выполняется почленно, по
умолчанию) копирования;
• инициализация клонов.
44. Порождающие шаблоны: класс
с единственным экземпляром
Класс с единственным экземпляром (одиночка, жарг. синглтон, англ.
singleton) — шаблон уровня объекта, гарантирующий, что класс
располагает единственным экземпляром, и предоставляющий к нему
глобальную точку доступа.
Используется, когда:
• экземпляр класса должен быть один и только один;
• экземпляр класса должен быть доступен для любого клиента;
• класс должен допускать порождение подклассов с возможностью
работать с ними без модификации клиентской части системы.
Участник: одиночка.
45. Класс с единственным
экземпляром: минимальная
реализация
class Singleton
{
public: static Singleton* Instance();
protected: Singleton();
private: static Singleton* _instance;
};
Singleton* Singleton::_instance = NULL;
Singleton* Singleton::Instance()
{
if(_instance == NULL)
_instance = new Singleton;
return _instance;
}
46. Класс с единственным
экземпляром: обсуждение (1 / 2)
Результаты:
• контролируемый доступ к единственному экземпляру;
• сокращение количества глобальных переменных;
• возможность уточнения операций и представления;
• возможность существования переменного количества экземпляров;
• большая гибкость в сравнении с классом, содержащим только
статические атрибуты и методы (альтернативный подход к
реализации одиночек).
47. Класс с единственным
экземпляром: обсуждение (2 / 2)
Недостатки:
• искусственное ограничение масштабируемости проекта;
• усложнение процедур модульного тестирования системы.
Аспекты реализации:
• гарантия единственности;
• отложенная инициализация — статическая может быть невозможна;
• невозможность установления взаимозависимостей одиночек —
порядок вызова конструкторов глобальных объектов через границы
единиц трансляции в C++ не определен.