Компьютерные науки

Программирование на C/C++

Программа о полном стеке разработки на C и C++, от основ управления памятью до современных стандартов и паттернов проектирования.
Студентов 1261 Выпускников 13 Для всех
690 ₽ 1 200 ₽
или любая сумма на ваше усмотрение
Вы можете оплатить любую сумму, чтобы поддержать наш проект и авторов программы. Объем услуг не зависит от размера вашей оплаты.
Объем

36 час.
Длительность

30 дней
Нагрузка в неделю

9 час.
Формат обучения

Дистанционно (самостоятельно)
Описание Учебный курс посвящен глубокому изучению языков С и С++, которые остаются стандартом индустрии для разработки системного программного обеспечения и высоконагруженных сервисов. В материалах подробно разбираются тонкости работы с памятью, арифметика указателей, выравнивание данных и оптимизация алгоритмов на уровне процессора. Обучение адресовано разработчикам, желающим научиться писать максимально эффективный и безопасный код.
Цели
  • Сформировать понимание модели управления памятью в языках С и С++.
  • Раскрыть методы оптимизации кода под архитектуру современных процессоров.
  • Подготовить к промышленной разработке системных приложений.
Чему я научусь?
  • Управлять жизненным циклом объектов и выделением памяти.
  • Использовать указатели, массивы и адресную арифметику.
  • Применять техники выравнивания и упаковки структур данных.
  • Оптимизировать код для эффективного использования кэш-памяти команд.

Авторы

Петров Алексей
Петров Алексей
Чему я научусь?
  • Управлять жизненным циклом объектов и выделением памяти.
  • Использовать указатели, массивы и адресную арифметику.
  • Применять техники выравнивания и упаковки структур данных.
  • Оптимизировать код для эффективного использования кэш-памяти команд.

Учебный план

Занятия
Экзамен экстерном Внимание! Экзамен экстерном не обязательный для сдачи. При желании вы можете его пройти, если хотите подтвердить свои знания по данному курсу без его изучения или поверить свои знания по нему. Экзамен экстерном можно сдать только один раз. 90 мин
1 Цели, задачи и особенности проведения курса
Цели, задачи и особенности проведения курса тест для курса Программирование на C/C++ 55 мин
2 Литература и веб-ресурсы. Блог дисциплины
3 Язык C в современной промышленной разработке
4 Основы препроцессорной разработки
5 Примеры использования #define, условной компиляции и #error
6 Вопросы управления памятью и производительностью кода
7 Модели управления памятью и области видимости объектов данных
8 Связывание объектов данных и время жизни объектов данных и инициализация переменных
9 Классы памяти в языке С, автоматические и регистровые переменные
10 Размещение объектов данных на регистрах процессора
11 Статические объкты с внутренним связыванием, без связывания с внешним связыванием
12 Классы памяти функций, Операции sizeof и тип size_t
13 Указатели и арифметика указателей. Тип ptrdiff_t
14 Одномерные массивы (строки) и указатели
15 Макроопределение NULL, вопросы безопасного программирования
16 Стандартные функции
17 Выравнивание объектов, размещаемых статически и динамически, posix_memalign
18 Многомерные массивы, примеры
19 Эффективный обход двухмерных массивов
20 Задача об умножении матриц
21 Двухмерные массивы и вектора векторов, пример кода
22 Многомерные массивы и указатели, пример кода. Совметимость указателей
23 Указатели на константы и константные указатели
24 Указатели и квалификатор restrict
25 Многомерные массивы и функции
26 Массивы переменной длины
27 Выравнивание переменных составных типов
28 Упаковка переменных составных типов. Утилита pahole
29 Реорганизация структур данных: рекомендации, пример, недостатки при реорганизации кода
30 Оптимизация загрузки кэш-памяти команд: ассиметрия условий. Функция __builtin_expect()
31 Оптимизация загрузки кэш-памяти команд: встраивание функций, Утилита pfunct. Формат DWARF
32 Системные аспекты выделения и освобождения памяти, Область данных и сегмент BSS
33 Куча и программный стек. Функции malloc() и free()
34 Стандарт POSIX
Стандарт POSIX тест для курса Программирование на C/C++ 60 мин
35 Парадигмы программирования поддерживаемые языком С++
36 Инкапсуляция - базовый принцип ООП
37 Класс: в узком или широком смысле? Определение и описание класса
38 Объект класса
39 Константный объект класса
40 Состав класса: атрибуты, методы. Нестатические члены класса
41 Статические члены класса
42 Неустойчивые объекты. Изменчивые атрибуты
43 Указатель this
44 Нестатические и встроенные методы класса
45 Константные методы
46 Статические методы класса. Неустойчивые члены класса
47 Указатели на атрибуты класса
48 Указатели на методы класса
49 Дружественные классы и функции
50 Потоковый ввод-вывод
51 Классы-объединения, анонимное объединение. Битовые поля в определении классов
52 Класс как область видимости. Вложенные классы. Конструкторы и деструкторы
53 Инициализация без конструктора
54 Конструкторы по умолчанию. Конструкторы с параметрами. Массивы объектов
55 Закрытые и защищённые конструкторы
56 Почленная инициализация и присваивание
57 Конструкторы копирования
58 Конструкторы и операции преобразования
59 Деструкторы, виртуальные деструкторы
60 Идиома RAII
61 Явный вызов деструкторов
62 Список инициализации в конструкторе
63 Семантика переноса
64 Наследование: ключевые понятия, примеры. Полиморфизм классов
65 Раннее и позднее связывание
66 Базовые и производные классы
67 Определение наследования
68 Защищённые и закрытые члены класса. Перегрузка и перекрытие членов класса
69 Порядок вызова конструкторов производных классов
70 Список инициализации при наследовании. Порядок вызова деструкторов производных классов
71 Виртуальные функции. Чистые виртуальные функции. Абстрактные классы
72 Множественное наследование. Виртуальное наследование
73 Динамическая идентификация типов времени исполнения (RTTI), dynamic_cast. Операция typeid
74 Вопросы производительности и домашнее задание
Вопросы производительности и домашнее задание тест для курса Программирование на C/C++ 60 мин
75 Шаблоны классов
76 Параметры шаблонов классов. Конкретизация шаблонов классов. Методы шаблонов классов
77 Дружественные методы в шаблонах классов. Статические члены шаблонов классов
78 Специализация шаблонов классов. Специализация члена класса. Полная и частичная специализация класса
79 Рекурсивное определение шаблонов как пример метапрограммирования
80 Идиома SFINAE и интроспекция времени компиляции
81 Интроспекция времени компиляции в библиотеке boost::type_traits
82 Характеристики типов: иерархии классов. Характеристики типов: структура remove_extend
83 Характеристики типов: оптимизация функций (общий случай)
84 Характеристики типов: оптимизация функций, исключение деструкторов
85 Понятие исключительной ситуации. Объекты-исключения. Оператор throw
86 Защищённые блоки, операторы try, catch, примеры. Функциональные защищённые блоки
87 Варианты описания исключений. Раскрутка стека и уничтожение объектов. Повторное возбуждение исключения и универсальный блок-обработчик
88 Безопасность ПО как показатель качества. Стандарты кодирования - за безопасный код
89 Безопасность классов и методов
90 Безопасность конструкторов и безопасность деструкторов
91 Безопасность или нейтральность кода?
92 Пользовательские и стандартные классы исключительных ситуаций. Стандартные классы - логические ошибки и ошибки времени исполнения
Пользовательские и стандартные классы исключительных ситуаций. Стандартные классы - логические ошибки и ошибки времени исполнения тест для курса Программирование на C/C++ 55 мин
93 Стандартная библиотека шаблонов (STL): история создания. Предпосылки создания STL. Ключевые ценности STL
94 Состав STL. Гарантии производительности
95 Контейнеры: обзор. Последовательные контейнеры. Последовательные контейнеры: сложность основных операций. Упорядоченные ассоциативные контейнеры
96 Векторы: общие сведения, встроенные типы, порядок конструкции
97 Деки: общие сведения. Списки: общие сведения, описание интерфейса
98 Множества и мультимножества: основные сведения, встроенные типы, порядок конструкции
99 Отображения и мультиотображения: основные сведения, встроенные типы, порядок конструкции
100 Обобщённые алгоритмы: обзор. Последовательные алгоритмы. Алгоритмы упорядочения. Алгоритмы на числах. Копирующие, предикатные и алгоритмы, работающие на месте
101 Отношения сравнения. Обратные отношения. Алгоритмы сортировки
102 Операции над множествами и хипами: обзор. Алгоритмы на числах
103 Итераторы: обзор. Допустимые диапазоны и операции. Встроенные указатели С++
104 Итераторы в стандартных контейнерах: общие сведения. Итераторы вставки. Потоковые итераторы
105 Пример: потоковый итератор обобщённый алгоритм find. Пример: обобщённый алгоритм copy, обобщённый алгоритм replace"
106 Функциональные объекты: обзор. Функциональные объекты: базовые классы. Стандартные функциональные объекты STL. Пример: функциональный объект multiplies
107 Адаптеры: обзор, контейнерные адаптеры. Функциональные адаптеры
108 STL в C++11: контейнеры, алгоритмы
109 Вступление
110 Лямбда-функции и замыкания в языке С++11
111 Основные правила оформления лямда-функций
112 Ключевые перимущества лямбда функций. Применение анонимных и именованных лямбда-функций. Внешние переменные и замыкание лямбда-функций
113 Библиотека Boost: общие сведения, состав и назначение
114 Пример 1. Проверки времени компиляции: общие сведения, реализация, использование
115 Пример 2. Вариантный контейнер: общие сведения, требования к типам контейнерам, определение и обход элементов, класс-посетитель
116 Пример 3. Произвольный тип: общие сведения, класс any, работа со стандартными списками, проверка типов значений
117 Пример 4. Циклический буфер: общие сведения, техника применения, порядок использования
118 Пример 5. Умные указатели: общие сведения, разновидности и библиотеки
119 Пример 5. Умные указатели: шаблон scoped_ptr
120 Пример 5. Умные указатели: шаблон shared_ptr
121 Пример 5. Умные указатели: допустимые преобразования, пример некорректного использования shared_ptr
122 Пример 5. Умные указатели: шаблоны weak_ptr, intrusive_ptr
123 Boost: что ещё? Математические библиотеки
124 Требования стандартной библиотеки языка С++. Требование CopeConstructible. Стандартные функции проверки соответствия требованиям
125 Требование Container
Требование Container тест для курса Программирование на C/C++ 60 мин
126 Введение. Объектно-ориентированное программирование: общие сведения. Проектирование как искусство компромисса. Проблемы проектирования
127 Проблемы №1-2. Определение состава и степени детализации объекта
128 Проблемы №3-4. Определение интерфейса и реализации объектов
129 Причины перепроектирования. Максимы проектирования
130 Шаблоны (паттерны) проектирования. Шаблоны: определение и преимущества. Типология шаблонов. Пространство шаблонов GoF. Стек шаблонов: от потоков до служб
131 Базовые шаблоны: наследование и композиция. Наследование и композиция: за и против, реализация. Три способа композиции. Агрегирование или осведомлённость
132 Базовые шаблоны: делегирование, неизменяемые объекты, реализация, интерфейс, реализация
133 Порождающие шаблоны: общие сведения, абстрактная фабрика и ее реализация
134 Порождающие шаблоны: строитель, фабричный метод, реализация
135 Порождающие шаблоны: прототип, реализация, класс с единственным экземпляром, минимальная реализация
136 Структурные шаблоны: общие сведения, адаптер, мост, реализация
137 Структурные шаблоны: компоновщик, декоратор, реализация
138 Структурные шаблоны: фасад, заместитель, реализация
139 Поведенческие шаблоны: общие сведения, команда. Команда без памяти: шаблон класса, реализация и использование
140 Поведенческие шаблоны: итератор. Частные случаи. Внешний или внутренний итератор? Итератор: реализация
141 Поведенческие шаблоны: посредник, реализация
142 Поведенческие шаблоны: наблюдатель. реализация. Вытягивание или проталкивание
143 Поведенческие шаблоны: состояния, реализация
144 Поведенческие шаблоны: стратегия. Параметризация стратегией шаблона класса-контекста
145 Поведенческие шаблоны: шаблонный метод, реализация. Зацепки или примитивные операции?
146 Поведенческие шаблоны: посетитель. Двойная диспетчеризация. Структура абстрактного посетителя
147 Неустранимые конфликты в архитектуре. CAP-теорема. Закон Деметра. Принципы S.O.L.I.D.
Неустранимые конфликты в архитектуре. CAP-теорема. Закон Деметра. Принципы S.O.L.I.D. тест для курса Программирование на C/C++ 60 мин
148 Идиома языка программирования?. Пространство идиом С++. Идиомы процедурного программирования. Объектно-ориентированные идиомы: обзор
149 Классы или структуры? Объектно-ориентированные идиомы С++
150 Идиомы повышенного уровня сложности, Идиома №1. Контекстно-зависимая перегрузка индексирования
151 Идиома №2. Автоматическая сборка мусора. Подсчёт ссылок
152 Идиома №3. Управление памятью заменой операций new и delete. Создание объектов в пуле динамического размера
153 Идиома №4. Конверт/письмо и делегированный полиморфизм. Делегированный полиморфизм в действии
154 Рефакторинг исходного кода. Статический анализ и инспекция кода
155 Типовые антишаблоны и грязные техники. Типовые логико-семантические ошибку в программном коде
156 Вопросы оптимизации. Оптимизация программ по производительности. Оптимизация программ по размеру объектного кода и памяти данных
157 Актуальность проблем качества ПО. Понятие качества. Что такое качественное ПО? Функциональные и структурные показатели качества кода
158 Модели качества ПО. Качество ПО по МакКолу. Факторы качества ПО. Треугольник МакКола
159 Модель МакКола: Как это работает? Качество ПО по Боэму. Качество ПО согласно ISO 9126
160 Желаемые структурные характеристики ПО. Цели в модели качества ISO 9126 и характеристики SQuaRE. Модель SQuaRE: надёжность, эффективность, безопасность, удобство сопровождения, размер кода. Метрики в модели качества ISO 9126
161 Сложность как атрибут качества ПО. Управление сложностью исходного кода. Влияние модульности. Предварительное проектирование и сложность кода
162 Технический долг: его накопление и снижение
163 Стандарты и стили кода, Соглашения о кодировании и его роль в командной разработке ПО. Правила организации и способы записи исходного кода на языке С++
164 Ортодоксальная каноническая форма класса. Комментирование и документирование кода
165 Жизненный цикл разработки ПО. Каскадная и итеративная модели жизненного цикла ПО. V-модель жизненного цикла разработки программных систем
166 Гибкие методологии разработки. Методологии TDD, Scrum. Горбатая диаграмма в Unified Process. Руководство SWEBoK
167 Практикум
Практикум тест для курса Программирование на C/C++ 60 мин
Тренировочный экзамен Внимание! Тренировочный экзамен экстерном не обязательный для сдачи. При желании вы можете его пройти, если хотите проверить свои знания курса перед сдачей экзамена. Тренировочный экзамен можно сдавать сколько угодно один раз. 90 мин
Экзамен 60 мин

Какой документ я получу?

Сертификат

Выдаётся автоматически после успешного завершения программы.

Удостоверение о повышении квалификации

Выдается при наличии среднего специального или высшего образования (необходимые документы).

Стоимость программы

690 ₽ 1 200 ₽
или любая сумма на ваше усмотрение
Вы можете оплатить любую сумму, чтобы поддержать наш проект и авторов программы. Объем услуг не зависит от размера вашей оплаты.