Проектирование больших систем на С++ — различия между версиями

Материал из Кафедра математической кибернетики
Перейти к: навигация, поиск
(Новая страница: «Курс по магистерской программе Дискретные управляющие системы и их приложения. Чтение …»)
 
Строка 1: Строка 1:
 
Курс по магистерской программе Дискретные управляющие системы и их приложения.
 
Курс по магистерской программе Дискретные управляющие системы и их приложения.
  
Чтение курса обеспечивается кафедрой математической кибернетики, лектор к.т.н. Мелик-Адамян Арег Фрикович (areg@cs.msu.ru).
+
Чтение курса обеспечивается кафедрой математической кибернетики, лектор к.т.н. Мелик-Адамян Арег Фрикович (areg@cs.msu.ru).
  
 
Рассматриваются вопросы, которые обычно остаются за рамками академических курсов по программированию на С++, но очень востребованы в промышленном программировании. Разбираются  вопросы связанные с обобщенным программированием, шаблонами, перегрузкой, исключениями, множественным наследованием и стандартной библиотекой шаблонов. Отдельно разбираются новые возможности появившиеся в стандарте языка С++ 11 (C++11 Programming Language Standard ISO/IEC 14882:2011 ): семантика переноса и ссылки на временные объекты, внешние шаблоны, списки инициализации, поддержка многопоточности, лямбда выражения и др. Даются примеры использования из реальных САПР во время занятий.
 
Рассматриваются вопросы, которые обычно остаются за рамками академических курсов по программированию на С++, но очень востребованы в промышленном программировании. Разбираются  вопросы связанные с обобщенным программированием, шаблонами, перегрузкой, исключениями, множественным наследованием и стандартной библиотекой шаблонов. Отдельно разбираются новые возможности появившиеся в стандарте языка С++ 11 (C++11 Programming Language Standard ISO/IEC 14882:2011 ): семантика переноса и ссылки на временные объекты, внешние шаблоны, списки инициализации, поддержка многопоточности, лямбда выражения и др. Даются примеры использования из реальных САПР во время занятий.

Версия 22:06, 31 августа 2015

Курс по магистерской программе Дискретные управляющие системы и их приложения.

Чтение курса обеспечивается кафедрой математической кибернетики, лектор — к.т.н. Мелик-Адамян Арег Фрикович (areg@cs.msu.ru).

Рассматриваются вопросы, которые обычно остаются за рамками академических курсов по программированию на С++, но очень востребованы в промышленном программировании. Разбираются вопросы связанные с обобщенным программированием, шаблонами, перегрузкой, исключениями, множественным наследованием и стандартной библиотекой шаблонов. Отдельно разбираются новые возможности появившиеся в стандарте языка С++ 11 (C++11 Programming Language Standard ISO/IEC 14882:2011 ): семантика переноса и ссылки на временные объекты, внешние шаблоны, списки инициализации, поддержка многопоточности, лямбда выражения и др. Даются примеры использования из реальных САПР во время занятий.

Цель курса — научить приемам и навыкам промышленного программирования и прогаммной инженерии с помощью совереммного языка С++.

Задачи курса:

  • актуализировать знание языка С++;
  • способствовать пониманию студентами принципов и возможностей языка С++ для построения промышленных систем;
  • ознакомить с технологией построения больших систем с использованием языка С++ на примере программирования современных САПР микроэлектроники.

Изучение курса основывается на знаниях, полученных студентами при изучении языков программирования ранее, а также приобретенных знаний на спец. курсах уроках по САПР и технологиям программирования.

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

Содержание курса

Занятиe 1. Обзор основных возможностей С++ 14. Структура компилятора, структура компоновщка. Система хранения исходных кодов. Примеры.

Занятиe 2. Шаблоны. Перегрузка функций. Шаблонные функции. Специализация шаблонных функций. Разрешение конфликтов во время специализации. Классы шаблоны. Инстанциация классов-шаблонов. Правила для классов-шаблонов. Не функции-члены с шаблонными аргументами.

Занятиe 3. Списки инициализации для членов класса. Списки инициализации во время простого наследования, множественного наследования, множественного наследования и композиции. Operator=, конструкторы и композиция. Публичное наследование. Виртуальные функции. Полиморфизм. Чистые виртуальные функции и абстрактные классы. Закрытое наследование, ассоциации.

Занятиe 4. Множественное наследование. Неопределенности при множественном наследовании. Виртуальный базовый класс. Правило доминирования. Список инициализации членов класса. Простой список. Шаблонный список. Итераторы. Шаблонные итераторы. Шаблоны и наследование.

Занятиe 5. Указатели на функции. Передача функций в качестве параметров. Указатели функций в С++. Функции обратного вызова. Функторы в STL. Bind. Boost::function и Boost::bind. Пример класса Cell.

Занятиe 6. Исключения. Традиционные подходы к обработке ошибок. try, catch и throw. Множественные блоки catch. Список спецификации исключений. Повторный вызов исключений (rethrow). Очистка. Сопоставление исключений. Аллокация ресурсов. Конструкторы, десктрукторы и исключения. Стандартные исключения.

Занятиe 7. Стандартная библиотека шаблонов – STL. Принцип проектирования. Обобщенное программирование. Компоненты STL: алгоритмы, итераторы, контейнеры, функционалы. Адапторы. Примеры использования.

Занятиe 8. Ввод/вывод. Манипуляторы. Перегрузка операторов ввода/вывода. Файлы. Чтение и запись объектов. Обработка потоков внутри конструкторов и деструкторов. Примеры.

Занятиe 9. Эволюция языка. C++11. Зачем был нужен новый стандарт? Изменения в ядре языка: семантика переноса и ссылки на временные объекты. Внешние шаблоны. Списки инициализации. Циклы в диапазоне. Лямбда-выражения. Альтернативный синтаксис функций. Явная перегрузка и final. Вариадические шаблоны. Новые литералы. Поддержка многопоточности. Статический утверждения. Обновление STL. Возможности, которые не вошли в новый стандарт. Устаревшие и удаленные возможности.

Занятиe 9. Шаблоны программирования. Обобщенное программирование. Применение.

Занятиe 10. Учебный пример проектирования и программирования системы физического проектирования микроэелктроники. Разбор входного формата. Внутреннее представление. Алгоритмы. Вывод.

Занятия 11, 12. Практические занятия с примерами в аудитории. Желательно иметь ноутбук с собой.

Литература

  • ISO/IEC C++ Programming Language Standard 14482:2011.
  • Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.
  • Б. Страуструп, Язык программирования С++, 4-е издание.
  • Б. Страуструп, Программирование. Принципы и практика использования C++.
  • Б. Страуструп, Дизайн и эволюция языка С++.
  • J. Lakos, Large Scale Software Design in C++, Addison-Wesley, 1996.
  • A. Fox, D. Patterson, Engineering Software as a Service: An Agile Approach Using Cloud Computing, Addison-Wesley, 2013.
  • D. Spinellis, G. Gousios, Beautiful Architecture: Leading Thinkers Reveal the Hidden Beauty in Software Design, O’Reilly Media, 2009.
  • N. Martz, J, Warren, Big Data:Principles and best practices of scalable realtime data systems, Manning, 2013.
  • J. L. Hennessy and D. A. Patterson, Computer Architecture: A Quantitative Approach, 5th Edition, Morgan Kaufmann Publishing Co., Menlo Park, CA. 2013.