Аннотация:
Курс посвящен продвинутому программированию на С++ с использованием шаблонов. Различные подходы и механизмы рассматриваются вместе с их реализацией. Приводятся несколько реализаций: современная и ретроспективная, что помогает лучше понять современные стандарты языка.

Программа учебной дисциплины
«Метапрограммирование»

Утверждена
Академическим советом ОП
Протокол №_____ от _______._______.20_______

РазработчикиСтаричков Никита Юрьевич, Департамент программной инженерии
Крахмалев Денис Сергеевич, Департамент программной инженерии
Число кредитов2
Контактная работа (час.)42
Самостоятельная работа (час.)34
Курс, Образовательная программаКурс не указан,ОП не указана
Формат изучения дисциплиныБез использования онлайн курса


1. Цель, результаты освоения дисциплины и пререквизиты
Цели:
  1. Ознакомиться с продвинутыми подходами и методологиями программирования с использованием шаблонов на примере языка программирования С++
Планируемые результаты обучения (ПРО):
  1. Знать, как работать со списками типов
  2. Уметь создавать и использовать абстрактные фабрики
  3. Уметь использовать генераторы иерархий
  4. Уметь реализовывать множественную диспетчеризацию
Пререквизиты:
  1. Базовое знание С++
2. Содержание учебной дисциплины
Тема (раздел дисциплины)Объем в часахПланируемые результаты обучения (ПРО), подлежащие контролюФормы контроля
лк
см/пр
onl/cр
1. Введение, списки типов4
  1. Знать, как работать со списками типов
  2. Уметь создавать и использовать абстрактные фабрики
  3. Уметь использовать генераторы иерархий
  4. Уметь реализовывать множественную диспетчеризацию
1.
4
8
2. Фабрики объектов3
  1. Уметь создавать и использовать абстрактные фабрики
1.
3
6
3. Генерация классов на основе списка типов4
  1. Уметь использовать генераторы иерархий
1.
4
6
4. Обобщенные функторы5
  1. Уметь реализовывать множественную диспетчеризацию
1.
5
8
5. Мультиметоды5
  1. Уметь реализовывать множественную диспетчеризацию
1.
5
6
Часов по видам учебных занятий:21
21
34
Итого часов:76

Содержание разделов дисциплины:
  1. Введение, списки типов
    Хранение типа как объекта данных, различные подходы Списки типов a) создание b) обработка c) операция получения размера списка d) операция получения элемента по индексу e) операция поиска элемента / элементов f) операции добавления и удаления элементов
  2. Фабрики объектов
    a) различные подходы к реализации на С++ b) фабрика клонирования c) абстрактные фабрики
  3. Генерация классов на основе списка типов
    a) генерация распределенных иерархий b) генерация кортежей c) генерация линейных иерархий d) генерация сложных иерархий
  4. Обобщенные функторы
    a) шаблон Command b) вызываемые сущности в языке С++ c) скелет шаблонного класса функтора d) преобразования типов аргументов и возвращаемого значения e) указатели на функции-члены f) связывание и сцепление
  5. Мультиметоды
    a) двойное переключение по типу — грубый подход b) симметричность грубого подхода c) логарифмический двойной диспетчер d) двойная диспетчеризация функторов e) мультиметоды
3. Оценивание

Формула округления: Стандартное арифметическое округление
Шкала оценки: Десятибалльная
Вид формулы оценивания: Линейная
Формула оценивания:

Оценка = Оценка за устный экзамен


4. Примеры оценочных средств

Вопросы к экзамену:
1. Хранение типа как объекта данных, различные подходы
2. Списки типов
a) создание
b) обработка
c) операция получения размера списка
d) операция получения элемента по индексу
e) операция поиска элемента / элементов
f) операции добавления и удаления элементов
3. Фабрики объектов
a) различные подходы к реализации на С++
b) фабрика клонирования
c) абстрактные фабрики
4. Генерация классов на основе списка типов
a) генерация распределенных иерархий
b) генерация кортежей
c) генерация линейных иерархий
d) генерация сложных иерархий
5. Обобщенные функторы
a) шаблон Command
b) вызываемые сущности в языке С++
c) скелет шаблонного класса функтора
d) преобразования типов аргументов и возвращаемого значения
e) указатели на функции-члены
f) связывание и сцепление
6. Мультиметоды
a) двойное переключение по типу — грубый подход
b) симметричность грубого подхода
c) логарифмический двойной диспетчер
d) двойная диспетчеризация функторов
e) мультиметоды


5. Ресурсы
5.1. Рекомендуемая основная литература
п/пНаименование
1Андрей Александреску Современное проектирование на С++

5.2. Рекомендуемая дополнительная литература
Не требуется

5.3. Программное обеспечение
п/пНаименованиеУсловия доступа/скачивания
1Microsoft Windows 7 Professional RUS
Microsoft Windows 8.1 Professional RUS
Microsoft Windows 10
Из внутренней сети университета (договор)
2Microsoft Office Professional Plus 2010Из внутренней сети университета (договор)

5.4. Профессиональные базы данных, информационные справочные системы, интернет-ресурсы (электронные образовательные ресурсы)
п/пНаименованиеУсловия доступа/скачивания
Профессиональные базы данных, информационно-справочные системы
1Электронно-библиотечная система ЮрайтURL: https://biblio-online.ru/
Интернет-ресурсы (электронные образовательные ресурсы)
1Открытое образованиеURL: https://openedu.ru/

5.5. Материально-техническое обеспечение дисциплины
Учебные аудитории для лекционных по дисциплине обеспечивают использование и демонстрацию тематических иллюстраций, соответствующих программе дисциплины в составе:
- ПЭВМ с доступом в Интернет (операционная система, офисные программы, антивирусные программы);
- мультимедийный проектор с дистанционным управлением.
Учебные аудитории для семинарских и самостоятельных занятий по дисциплине оснащены ПЭВМ, с возможностью подключения к сети Интернет и доступом к электронной информационно-образовательной среде НИУ ВШЭ.

6. Особенности организации обучения для лиц с ограниченными возможностями здоровья и инвалидов
В случае необходимости, обучающимся из числа лиц с ограниченными возможностями здоровья (по заявлению обучающегося) а для инвалидов также в соответствии с индивидуальной программой реабилитации инвалида, могут предлагаться следующие варианты восприятия учебной информации с учетом их индивидуальных психофизических особенностей, в том числе с применением электронного обучения и дистанционных технологий:
6.1.1. для лиц с нарушениями зрения: в печатной форме увеличенным шрифтом; в форме электронного документа; в форме аудиофайла (перевод учебных материалов в аудиоформат); в печатной форме на языке Брайля; индивидуальные консультации с привлечением тифлосурдопереводчика; индивидуальные задания и консультации.
6.1.2. для лиц с нарушениями слуха: в печатной форме; в форме электронного документа; видеоматериалы с субтитрами; индивидуальные консультации с привлечением сурдопереводчика; индивидуальные задания и консультации.
6.1.3. для лиц с нарушениями опорно-двигательного аппарата: в печатной форме; в форме электронного документа; в форме аудиофайла; индивидуальные задания и консультации.