• A
  • A
  • A
  • ABC
  • ABC
  • ABC
  • А
  • А
  • А
  • А
  • А
Regular version of the site

Software Design

2019/2020
Academic Year
RUS
Instruction in Russian
8
ECTS credits
Course type:
Compulsory course
When:
2 year, 1-4 module

Instructor


Shtanyuk, Anton A.

Программа дисциплины

Аннотация

Дисциплина "Конструирование программного обеспечения" знакомит студентов с подходами к написанию программ различной сложности и размера на языке С++. В курсе рассматриваются структурный, объектно-ориентированный и и функциональный подходы. Особое внимание уделяется стандартной библиотеке шаблонов (STL), широко применяемой в промышленном программировании.
Цель освоения дисциплины

Цель освоения дисциплины

  • Знакомство с основными парадигмами программирования и их использования на практике
  • Освоение современного С++
  • Изучение некоторых важнейших паттернов объектно-ориентированного программирования
  • Овладение приемами модульного тестирования
Планируемые результаты обучения

Планируемые результаты обучения

  • Формулировать особенности размещения различных объектов программы в памяти
  • Определять возможности различных типов данных и правильно их использовать
  • Описывать механизм вызова функций
  • Демонстрировать уверенную работу с указателями и ссылками
  • Формулировать назначение механизма шаблонов
  • Демонстрировать создание шаблонов для решения широкого круга задач
  • Определять вывод типов при инстанцировании шаблонов
  • Формулировать назначение ООП
  • Демонстрировать использование принципа объектной декомпозиции
  • Создавать классы с конструкторами и деструктором
  • Формулировать назначение перегрузки операций
  • Формулировать способы перегрузки и уметь их использовать
  • Формулировать тонкости перегрузки отдельных операций
  • Формулировать особенности отношений классов и объектов при декомпозиции задачи
  • Определять типы отношений при анализе предметной области
  • Демонстрировать умение инициализировать встроенные объекты и использовать дружественность
  • Формулировать понятие и свойства механизма наследования
  • Демонстрировать применение наследования и полиморфизма
  • Формулировать понятие механизма шаблонов классов
  • Демонстрировать использование паттернов при анализе предметной области и проектировании ПО
  • Формулировать архитектурные принципы STL
  • Определять временную сложность алгоритмов работы STL и методов контейнеров
  • Использовать контейнеры и алгоритмы для решения прикладных задач
  • Формулировать понятия функционального программирования (функтор, лямбда-выражение и другие)
  • Формулировать понятия многопоточного программирования (поток, гонка за ресурсы и другие)
Содержание учебной дисциплины

Содержание учебной дисциплины

  • Память и базовые механизмы программ
    Иерархия памяти, виды памяти для работающей программы, модель памяти, классы хранения, базовые типы данных, ссылки и указатели, механизм вызова функций
  • Шаблоны функций
    Понятие шаблона, описание и инстанцирование шаблонов, вывод типов при инстанцировании, параметры шаблонов, специализация шаблонов, тонкости специализации
  • Классы и объекты
    Основные составляющие и суть объектно-ориентированного подхода, анатомия классов, инстанцирование классов, специальные члены классов, статические члены классов
  • Перегрузка операций
    Смысл и назначение перегрузки, перегружаемые операции, правила перегрузки, способы перегрузки
  • Отношения между классами и объектами
    Дружественность, агрегация и композиция, передача параметров в конструктор вложенных объектов, понятие наследования
  • Наследование и полиморфизм
    Дерево наследования, разрешение имен при наследовании, ключи наследования, приведение типов при наследовании, виртуальные функции, позднее связывание, чисто-виртуальные функции, интерфейсы и абстрактные классы, множественное наследование, таблица виртуальных функций
  • Шаблоны и паттерны
    Шаблоны классов и их использование, паттерны объектно-ориентированного программирования: фабрика, фабричный метод, декоратор, наблюдатель
  • Стандартная библиотека шаблонов
    Принципы построения и состав STL, контейнеры, итераторы, алгоритмы, итераторные адапторы
  • Функциональное и параллельное программирование на С++
    Принципы и отличительные особенности функционального подхода, функторы и лямбда-выражения, работа с потоками thread, гонка за ресурсы, синхронизация потоков, асинхронное программирование
Элементы контроля

Элементы контроля

  • неблокирующий Лабораторная работа "Шаблоны функций"
  • неблокирующий Лабораторная работа "Классы"
  • неблокирующий Лабораторная работа "Типы, выражения, функции"
  • неблокирующий Лабораторная работа "Деканат"
  • неблокирующий Лабораторная работа "Отдел кадров"
  • неблокирующий Лабораторная работа "Генератор текста"
  • неблокирующий Лабораторная работа "Функциональное и многопоточное программирование"
  • неблокирующий Экзамен - 2 модуль
  • неблокирующий Экзамен - 3 модуль
    "Экзамен проводится в письменной форме. Экзамен проводится на платформе Teams + Github. К экзамену необходимо подключиться за 15 минут до начала экзамена. Компьютер студента должен удовлетворять требованиям: наличие рабочей камеры и микрофона, поддержка Teams + Github. Для участия в экзамене студент обязан: поставить на аватар свою фотографию, явиться на экзамен согласно точному расписанию. Во время экзамена студентам запрещено: выключать камеру, пользоваться конспектами и подсказками. Кратковременным нарушением связи во время экзамена считается нарушение связи менее 5 минут. Долговременным нарушением связи во время экзамена считается нарушение 5 минут и более. При долговременном нарушении связи студент не может продолжить участие в экзамене. Процедура пересдачи аналогична процедуре сдачи."
  • неблокирующий Экзамен - 4 модуль
    "Экзамен проводится в письменной форме. Экзамен проводится на платформе Teams + Github. К экзамену необходимо подключиться за 15 минут до начала экзамена. Компьютер студента должен удовлетворять требованиям: наличие рабочей камеры и микрофона, поддержка Teams + Github. Для участия в экзамене студент обязан: поставить на аватар свою фотографию, явиться на экзамен согласно точному расписанию. Во время экзамена студентам запрещено: выключать камеру, пользоваться конспектами и подсказками. Кратковременным нарушением связи во время экзамена считается нарушение связи менее 5 минут. Долговременным нарушением связи во время экзамена считается нарушение 5 минут и более. При долговременном нарушении связи студент не может продолжить участие в экзамене. Процедура пересдачи аналогична процедуре сдачи."
Промежуточная аттестация

Промежуточная аттестация

  • Промежуточная аттестация (2 модуль)
    0.2 * Лабораторная работа "Классы" + 0.2 * Лабораторная работа "Типы, выражения, функции" + 0.2 * Лабораторная работа "Шаблоны функций" + 0.4 * Экзамен - 2 модуль
  • Промежуточная аттестация (3 модуль)
    0.125 * Лабораторная работа "Деканат" + 0.125 * Лабораторная работа "Отдел кадров" + 0.25 * Промежуточная аттестация (2 модуль) + 0.5 * Экзамен - 3 модуль
  • Промежуточная аттестация (4 модуль)
    0.125 * Лабораторная работа "Генератор текста" + 0.125 * Лабораторная работа "Функциональное и многопоточное программирование" + 0.25 * Промежуточная аттестация (3 модуль) + 0.5 * Экзамен - 4 модуль
Список литературы

Список литературы

Рекомендуемая основная литература

  • Gregoire, M. (2018). Professional C++ (Vol. Fourth edition). Indianapolis, IN: Wrox. Retrieved from http://search.ebscohost.com/login.aspx?direct=true&site=eds-live&db=edsebk&AN=1729638
  • Страуструп Б. - Язык программирования C++ для профессионалов - Национальный Открытый Университет "ИНТУИТ" - 2016 - 670с. - ISBN: - Текст электронный // ЭБС ЛАНЬ - URL: https://e.lanbook.com/book/100542

Рекомендуемая дополнительная литература

  • О’Двайр А. - Осваиваем C++17 STL - Издательство "ДМК Пресс" - 2018 - 352с. - ISBN: 978-5-97060-663-6 - Текст электронный // ЭБС ЛАНЬ - URL: https://e.lanbook.com/book/116126
  • Павловская Т.А. - Программирование на языке C++ - Национальный Открытый Университет "ИНТУИТ" - 2016 - 154с. - ISBN: - Текст электронный // ЭБС ЛАНЬ - URL: https://e.lanbook.com/book/100409