Пояснительная записка Курс разработан для студентов 1 курса фртк мфти, обучающихся в лаборатории Intel




страница4/4
Дата28.08.2016
Размер0.52 Mb.
1   2   3   4

II семестр




Содержание темы

К-во часов

Лек.

Сем.



Преобразование структуры выражения. Выражения, эквивалентные в смысле вычисления. Примеры преобразования выражений. Символьное дифференцирование. Реализация символьного дифференцирования как обход дерева выражения с построением нового дерева. Реализация функции дифференцирования и ее сходство с таблицей производных элементарных функций и правил дифференцирования. Дифференцирование сложной функции. Реализация «оператора символьного дифференцирования».

2

2



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

2

2



Понятие объекта и класса, их реализация и синтаксис в С++. Создание и уничтожение объекта, конструкторы и деструктор. Список инициализации конструктора. Конструктор по умолчанию и конструкторы с единственным параметром, неявность их применения и опасности, с этим связанные. Ключевое слово explicit. Реализация и синтаксис инкапсуляции данных в С++. Функции get* и set*.

Динамическая память в C++. Динамическое размещение отдельных объектов и массивов объектов, имеющих деструкторы. Применение подходящей формы оператора delete и проблемы, связанные с применением неверной его формы. Реализация класса Стек на С++ через рефакторинг «структуры Стек в стиле С», реализованной ранее.



2

2



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

2

2



Реализация класса «массив» с проверкой границ и переопределенными операторами. Этапы переопределения оператора «квадратные скобки». Необходимость обрабатывать его вхождения в левых частях выражений присваивания. Понятие ссылки. Ссылка как «синтаксический сахар» над указателем. Реализация переопределенного оператора «квадратные скобки» с возвратом ссылки на элемент массива. Опасность побочных эффектов в случае неявного применения ссылок.

2

2



Проблема владения для контейнерных классов. Особенности и методики реализации контейнеров как объектов первого класса. Понятие конструктора копирования и оператора присваивания, их ключевая роль для контейнерных объектов и ресурсных классов в целом. Стратегии реализации копирования (запрет, поверхностное копирование, глубокое копирование, подсчет ссылок). Реализация класса «строка».

2

2



Статический полиморфизм, шаблоны классов и их применение в С++. Обобщение класса Стек по типу хранимых данных. Шаблонные декларации классов, виды шаблонных параметров. Принципы вывода типов при шаблонных конструкций С++. Стадии компиляции шаблонов классов (при декларации и инстанцировании), обработка синтаксических ошибок в них на разных стадиях компиляции. Реализация класса «Массив» через шаблон класса. Спецификация шаблона как средство сохранения оптимальности в частных случаях применения шаблона. Шаблоны функций. Перегрузка функций.

2

2



Композиция классов. Наследование без виртуальных функций и приведений типов производных и базовых классов. Синтаксис и семантика открытого и закрытого наследования. Принципы Б. Лисков для верификации отношений наследования. Агрегирование как частая лучшая альтернатива наследованию с неясной природой и мотивацией.

2

2



Исключения в С++. Задача об обработке исключительных ситуаций. реализация обработки исключительных ситуаций средствами языка С, тяжеловесность синтаксических конструкций. Исключения С++ как синтаксический сахар для решения таких задач. Реализация исключений в С++. try/catch-блоки, оператор throw. Работа оператора throw, свертка стека, гарантии С++ для процесса свертки стека. Исключения в конструкторах и деструкторах, поведение системы обработки исключений в случае двойного исключения и отсутствия перехвата исключения. Использование библиотечных классов исключений.

2

2



Реализация классов «Список» и «Дерево» с помощью С++. Перечисление элементов контейнера. Понятие итератора. Необходимость в задании пределов итерации контейнера и функциях begin и end. Переопределенные операторы итераторов. Реализация итераторов для списка и дерева. Объявление переменной итератора в случае итерации по шаблону контейнера. Основные стандартные контейнеры С++ (библиотека STL). Классы vector, stack, deque, set, map, auto_ptr и другие. Обзор основных функций контейнерных классов STL. Обзор примеров применений контейнерных классов в сравнении с реализациями, использующими собственные классы и реализациями на С. Стандартные алгоритмы С++ (библиотека STL). Обзор основных стандартных алгоритмов STL. Обзор примеров применений алгоритмов в сравнении с реализациями, использующими собственные функции и реализациями на С.

2

2



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

2

2



Понятие иерархии классов, ее роль в обобщенном программировании для систем с высоким повторным использованием кода. Понятие о программном движке. Примеры задач, приводящих к таким системам. Архитектура «менеджер и подчиненные», ключевая роль виртуальных функций во взаимодействии «менеджера» и «подчиненного». Чисто виртуальные функции. Понятие события и событийной функции. Ситуации, требующие восстановления типов. Механизмы восстановления точного типа объекта, основанные на тегах типов и виртуальных функциях. Оператор dynamic_cast. Динамическое приведение типов. Задача о взаимодействии объектов, зависящего от их типов.

2

2



Понятие о компонентном программировании. Задачи, приводящие к компонентной архитектуре. Реализация ядра системы компонентной архитектуры (основной программы) и подключаемых модулей. Динамически подключаемые библиотеки.

2

2



Разбор проекта мультипроцессорной системы с подключаемыми модулями (полигон для соревнований виртуальных роботов). Архитектура системы, разработка API среды исполнения процессоров и API виртуального процессора.

2

2



Ускорение работы виртуального процессора. Задача бинарной трансляции кода. Just-in-time-компиляторы.

2

2




Всего за 2 семестр

30

30






Всего за год

60

60



1Здесь и далее выделение полужирным шрифом подразумевает текст, относящийся к обязательной части курса. Текст без выделения относится к факультативным (хотя крайне желательным для примененияи и проведения) принципам, подходам, разделам и темам.

1   2   3   4


База данных защищена авторским правом ©infoeto.ru 2016
обратиться к администрации
Как написать курсовую работу | Как написать хороший реферат
    Главная страница