• A
  • A
  • A
  • АБB
  • АБB
  • АБB
  • А
  • А
  • А
  • А
  • А
Обычная версия сайта
Бакалавриат 2025/2026

Программирование на С++

Статус: Курс по выбору (Программная инженерия)
Когда читается: 2-й курс, 1, 2 модуль
Охват аудитории: для своего кампуса
Язык: русский
Кредиты: 4
Контактные часы: 56

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

Аннотация

Язык программирования (ЯП) C++ является одним из самых востребованных инструментов для разработки программного обеспечения и стабильно входит в тройку самых популярных языков согласно индексу TIOBE. Первые версии языка увидели свет более тридцати лет назад под названием «C с классами» как попытка добавить относительно новую на тот момент объектно-ориентированную парадигму (ООП) программирования. C++ быстро развился в полноценный язык программирования общего назначения, области применения которого по настоящему охватывают все уровни стека и все возможные вычислительные платформы: от написания низкоуровневых системных компонентов, драйверов операционных систем, кода встраиваемых приложений до высокоуровневых веб-приложений, от настольных офисных, издательских систем, приложений для работы с мультимедиа до высокоскоростных мобильных приложений. На C++ написан frontend поисковых движков таких технологических гигантов как Google и Яндекс. Без C++ не было бы современных игровых движков, высокочастотного трейдинга, 3D- и дополненной реальности в том виде, как мы их знаем сегодня. Наконец, большинство ядерные компонентов современных инструментов машинного обучения и ИИ также реализованы на C++. Одной из основных ключевых основ C++ является возможность высокоуровневой разработки высокоабстрактной логики с компиляцией ее в быстродействующий код с аккуратной и экономной утилизацией системных ресурсов, сопоставимых с существенно более низкоуровневыми языками, такими как C и даже Assembler. Важную роль играет и его мультипарадигменная природа: на нем можно писать в процедурном, ООП-, функциональном и обобщенном стиле, совмещая их при необходимости для профилирования получаемого результата в точности под контекст задачи. С академической точки зрения C++ является удачным методическим пособием для изучения на его основе концептуальных идей программирования, которые впоследствии без труда переносятся на другие ЯП. За время своего существования язык пережил несколько больших «эволюционных» волн, отразившихся в стандартах, среди которых следует выделить стандарты 2003, 2011 и 2020 годов, каждый из которых в значительной степени влиял на подходы к разработки программ на C++. Данный курс посвящен изучению концептуальных основ и наработки практических навыков разработки на C++ с использованием стандартной библиотеки с опорой на указанные стандарты.
Цель освоения дисциплины

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

  • Настоящая дисциплина является базовой и относится к профессиональному циклу дисциплин. Студенты, успешно окончившие его, будут владеть не просто отдельно взятым набором конъюнктурных приемов, но — понимать идеи, лежащие в основе дизайна и эволюции языка на разных этапах его развития, что в целом отражает эволюцию подходов к разработке ПО. Дисциплина является основой для последующего изучения дисциплин: Конструирование программного обеспечения, Алгоритмы и структуры данных, Построение и анализ алгоритмов, Базы данных, Распределенные вычисления, Компьютерная графика.
Планируемые результаты обучения

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

  • Знает основные элементы языка С++. Знает состав стандартной библиотеки STL. Знает принципы организации ввода-вывода в языке C++. Знает различные типы потоков ввода-вывода. Умеет применять их при решении практических задач. Умеет на практике корректно обрабатывать исключительные ситуации.
  • Понимает устройство наследования и организацию собственных типов. Способен самостоятельно выстроить архитектуру программ средней сложности Знает основные принципы проектирования шаблонных типов. Умеет решать задачи с использованием собственных шаблонных типов. Знает базовые шаблоны проектирования. Умеет с помощью них корректно выстраивать архитектуру программ в типовых задачах.
  • Знает как ускорять программы при помощи потоков. Понимает методы их синхронизации. Знает что такое тупиковые ситуации и голодание. Умеет корректно работать с памятью в рамках потоков. Знает параллельные алгоритмы, реализованные в стандартной библиотеке STL.
  • Знает конструкции языка, используемые для функционального программирования. Умеет использовать их на практике. Знает в каких случаях могут применяться ленивые вычисления.
  • Знает что такое метапрограммирование и понимает границы его применения.
  • Понимать идейные концепции дизайна и эволюции языка C++, включая современные стандарты.
  • Уметь настраивать программное окружение для разработки программ на современном C++, включая инструменты компиляции (toolchain), организации программных проектов (CMake), разработки и отладки программного кода (IDE, VCS).
  • Уметь проектировать структуру программного проекта C++, разрабатывать архитектуру программы C++.
  • Уметь проектировать интерфейсную часть программы (API) и разрабатывать для нее эффективную реализацию.
  • Уметь отлаживать программы, обнаруживать синтаксические, семантические, логические ошибки, ошибки некорректного обращения с ресурсами, неопределенные ошибки (UB).
  • Разрабатывать и применять модульные тесты для программ на C++.
Содержание учебной дисциплины

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

  • Введение
  • Текущее состояние языка C++, инфраструктуры и сообщества
  • Структура программы на C++
  • Ликбез по C++, основные определения
  • Функция как базовые строительных элемент программы на C++
Элементы контроля

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

  • неблокирующий Оэкз
    Оэкз – проводится в формате теста и или контеста, если состоит из двух частей то оценка вычисляется по формуле min(Отест, Oконтест) < 3.5 ? min(Отест, Oконтест) : 0,5 * Отест + 0,5 * Оконтест.
  • неблокирующий Одз_1
    Средняя арифметическая за все домашние задания выданные в течение модуля.
  • неблокирующий Одз_2
    Средняя арифметическая за все домашние задания выданные в течение модуля.
  • неблокирующий Окр
    Окр – проводится в формате теста и или контеста, если состоит из двух частей то оценка вычисляется по формуле min(Отест, Oконтест) < 3.5 ? min(Отест, Oконтест) : 0,5 * Отест + 0,5 * Оконтест.
  • неблокирующий Опр.зан.
    Опр.зан – Оценка, выставляемая преподавателем практических занятий, на основании работы на практических занятия
Промежуточная аттестация

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

  • 2025/2026 2nd module
    0.15 * Одз_1 + 0.15 * Одз_2 + 0.1 * Окр + 0.2 * Опр.зан. + 0.4 * Оэкз
Список литературы

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

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

  • Программирование : принципы и практика с использованием С++, Страуструп, Б., 2018
  • Стандартный Си++: учеб. пособие - 978-5-00184-081-7 - Подбельский В.В. - 2022 - Москва: Финансы и статистика - https://ibooks.ru/bookshelf/388182 - 388182 - iBOOKS

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

  • Липпман, С. Язык программирования С++. Полное руководство : руководство / С. Липпман, Ж. Лажойе. — 3-е изд. — Москва : ДМК Пресс, 2006. — 1105 с. — ISBN 5-94074-040-5. — Текст : электронный // Лань : электронно-библиотечная система. — URL: https://e.lanbook.com/book/1216 (дата обращения: 00.00.0000). — Режим доступа: для авториз. пользователей.

Авторы

  • Буцкая Евгения Александровна
  • Чуйкин Николай Константинович