Экскурсии в офис Mail.Ru. Успейте записаться!

Углубленное программирование на C/C++

Цель курса — Цель курса — формирование практических навыков и умений, необходимых специалистам по разработке программного обеспечения (ПО) UNIX-подобных операционных систем для участия в проектах промышленной разработки среднего уровня сложности на языках C и C++, в том числе для замещения стажерских должностей разработчиков серверной части высоконагруженных приложений.

В процессе изучения курса у студентов формируются знания в области многопоточного программирования, шаблонов объектно-ориентированного программирования, стандартах кодирования и определения качества кода, а также формируются навыки и умения написания безопасного кода, использования элементов библиотек STL и BOOST и рефакторинга своего и чужого кода.

Подробнее

Учебный курс «Углубленное программирование на C/C++» состоит из 9 лекций и 7 практикумов. Общая аудиторная нагрузка составляет 64 а.ч., из которых 36 а.ч. приходится на лекционные занятия, 28 а.ч. — на практические работы.
Внеаудиторная нагрузка на слушателей компенсирует незначительный дисбаланс в пользу теоретической направленности аудиторных занятий, обусловлена доступностью лабораторной инфраструктуры и определяющей ролью проектной работы в практической части курса, предполагает самостоятельное изучение рекомендуемой литературы по дисциплине и в представленном варианте учебно-методического плана не регламентирована.
Итоговая оценка знаний студентов по дисциплине формируется на протяжении учебного семестра в соответствии с правилами балльно-рейтинговой системы (см. ниже).

На протяжении всего семестра за определенные виды работ, выполняемые студентами, выставляются баллы. Итоговый рейтинг по дисциплине представляет собой сумму баллов, полученных студентом за прохождение контрольных точек – рубежных контролей, домашних заданий, защиты итогового проекта. Важное условие — своевременное выполнение работ. Для успешной аттестации по данному курсу студентам необходимо набрать пороговый рейтинг — 50 баллов. При пересчете баллов студенты могут получить итоговую оценку: 0–49 неудовлетворительно, 50–69 удовлетворительно, 70–79 хорошо, 80–100 отлично.

Подробнее

Преподаватели

Алексей Петров Алексей Петров

Эксперт-практик в области информационного и программного обеспечения автоматизированных систем, а...


Подробнее

Дмитрий Исайкин Дмитрий Исайкин

Работаю ведущим разработчиком проекта Почта в компании Mail.Ru Group. Имею богатый опыт разработк...


Подробнее

Виктор Могилин Виктор Могилин

Руководитель группы разработки С/C++ в проекте почта@mail.ru. Отвечаю за работу почтового back-end.

Программа

занятие Часы в ауд. + сам. работа

Лекция №1: Цели и задачи курса. Организация и использование оперативной и сверхоперативной памяти в программах на языке С.   + ДЗ №1

Цели, задачи, структура курса. Язык C в современной промышленной разработке. Организация оперативной памяти. Одно- и многомерные массивы, строки и указатели. Выравнивание и упаковка переменных простых и составных типов. Выделение и освобождение памяти, управление памятью и производительность кода. Стандарт POSIX и переносимый исходный код.

Постановка индивидуальных задач к практикуму №1.

Домашнее задание №1: ДЗ №1
К практикуму №1 вам предстоит индивидуально решить 2 задачи по программированию на языке С в соответствии с назначенным вариантом.
4 часа + 4 часа СР

Семинар №1: Решение индивидуальных задач повышенной сложности на тему «Адресная арифметика. Одно- и многомерные массивы и строки. Алгоритмы их обработки»  

Задача студента — предложить эффективное решение индивидуальных задач в виде программы (исходного кода) на языке C. В решении задач максимально актуализируются знания, полученные на лекции №1.
4 часа + 3 часа СР

Лекция №2: Организация и использование сверхоперативной памяти. Основы многопоточного программирования. Вопросы качества структурного программного кода   + ДЗ №2

• Оптимизация работы с кэш-памятью ЦП ЭВМ. Анти-шаблоны структурного программирования, их поиск и устранение. Взаимодействие приложения с операционной системой (ОС) семейства UNIX. Многопоточное программирование с использованием потоков POSIX. Поддержка многопоточного программирования в языке C++11. Работа с разделяемой памятью. Вопросы производительности и безопасности структурного исходного кода.

• Постановка индивидуальных задач к практикуму №2.

Домашнее задание №2: ДЗ №2 "Постановка индивидуальных задач к практикуму №2"
К практикуму №2 вам предстоит индивидуально решить еще 2 задачи по программированию на С в соответствии с назначенным вариантом
4 часа + 3 часа СР

Контрольное занятие №1: Практическое занятие №2. Решение индивидуальных задач повышенной сложности на тему  

Задача студента — предложить эффективное решение индивидуальных задач в виде программы (исходного кода) на языке C. В решении задач максимально актуализируются знания, полученные на лекции №1 – 2.
4 часа + 4 часа СР

Лекция №3: Основные вопросы объектно-ориентированного программирования на языке C++   + ДЗ №3

• Инкапсуляция и ответственность класса. Принципы SRP, OCP. Идиома RAII. Праводопустимые выражения. Конструкторы (операции) переноса и иные расширения объектной модели в C++11. Инкапсуляция и вопросы производительности.

• Постановка задач к практикуму №3.

Домашнее задание №3: ДЗ №3 "Постановка домашних задач к практикуму №3"
Спроектировать (сформировать диаграмму) полиморфную иерархию из трех или более классов с множественным наследованием, семантика и функциональная нагрузка которых определяются самостоятельно выбранным или назначенным вариантом задания (напр., моделирование поведения робота-исполнителя, стратегическая игра и т.д.). В решении задачи максимально актуализируются знания, полученные на лекциях №3 – 4.
4 часа + 3 часа СР

Лекция №4: Дополнительные вопросы объектно-ориентированного программирования на языке C++. Динамическая идентификация типов (RTTI)   + ДЗ №4

• Абстрактные классы. Принципы LSP, ISP, DIP. Множественное и виртуальное наследование. Динамическая идентификация типов времени выполнения (RTTI) и операции приведения типов. Производительность и безопасность полиморфизма и средств поддержки RTTI.

• Постановка задач к практикуму №4.

Домашнее задание №4: ДЗ №4 "Постановка индивидуальных задач к практикуму №4."
Реализовать полученную как результат практикума №3 полиморфную иерархию классов на языке C++, преобразовать один из элементов иерархии в шаблон класса, при необходимости его специализировать, дополнить результат иерархией классов-обработчиков исключительных ситуаций, смоделировать каждую подобную ситуацию и обеспечить ее корректную обработку. В решении задачи максимально актуализируются знания, полученные на лекциях №3 – 5
4 часа + 3 часа СР

Семинар №2: Практическое занятие №3. Проектирование полиморфной иерархии классов повышенного уровня сложности  

Спроектировать (сформировать диаграмму) полиморфную иерархию из трех или более классов с множественным наследованием, семантика и функциональная нагрузка которых определяются самостоятельно выбранным или назначенным вариантом задания (напр., моделирование поведения робота-исполнителя, стратегическая игра и т.д.). В решении задачи максимально актуализируются знания, полученные на лекциях №3 – 4.
4 часа + 3 часа СР

Лекция №5: Шаблоны классов и методов. Обработка исключительных ситуаций. Обобщенное и безопасное программирование  

Обобщенное программирование. Рекурсивное определение шаблонов. Элементы метапрограммирования. Идиома SFINAE. Библиотека Boost.Type Traits. Обработка исключительных ситуаций и вопросы производительности. Безопасное программирование. Нейтральность кода. Критерии безопасности и нейтральности классов и методов. Безопасность конструкторов и деструкторов. Исключения в стандартной библиотеке.
4 часа + 3 часа СР

Контрольное занятие №2: Практическое занятие №4. Разработка и обеспечение безопасности полиморфной иерархии с шаблонами классов  

Реализовать полученную как результат практикума №3 полиморфную иерархию классов на языке C++, преобразовать один из элементов иерархии в шаблон класса, при необходимости его специализировать, дополнить результат иерархией классов-обработчиков исключительных ситуаций, смоделировать каждую подобную ситуацию и обеспечить ее корректную обработку. В решении задачи максимально актуализируются знания, полученные на лекциях №3 – 5.
4 часа

Лекция №6: Практическое введение в STL   + ДЗ №5

• Предпосылки создания, назначение и гарантии производительности библиотеки Standard Templates Library (STL). Итераторы STL: итераторы вставки и работа с потоками. Контейнеры и адаптеры STL. Обобщенные алгоритмы: основные характеристики и условия применения. Отношения сравнения. Функциональные объекты: предопределенные и пользовательские классы-функторы. STL в языке C++11

• Постановка задач к практикуму №5.
Домашнее задание №5: ДЗ №5 "Постановка домашних задач к практикуму №5"
На практикуме №5 ваша команда демонстрирует работу с любыми стандартными библиотеками (за исключением STL)
4 часа + 3 часа СР

Контрольное занятие №3: Практическое занятие №5. Оптимизация полиморфной иерархии классов и использованием элементов библиотек STL и BOOST  

Задача студента — спланировать и осуществить системную оптимизацию иерархии классов, полученной как результат практикумов №№3 – 4, с использованием возможностей библиотек STL и Boost (напр., стандартных и интервальных контейнеров, обобщенных алгоритмов, «умных» указателей и т.д.). В решении задачи максимально актуализируются знания, полученные на лекциях №№6 – 7.
4 часа + 4 часа СР

Лекция №7: Принципы и шаблоны объектно-ориентированного проектирования. Базовые шаблоны, шаблоны GoF   + ДЗ №6

• Ключевые проблемы и принципы объектно-ориентированного проектирования. Основные конфликты. CAP-теорема. Типология шаблонов. Базовые шаблоны: наследование и композиция, интерфейс, делегирование, неизменяемые объекты. Каталог GoF: порождающие, структурные и порождающие шаблоны. Закон Деметра. Правила Фута — Опдайка.

• Постановка задач к практикуму №6.

Домашнее задание №6: ДЗ №6 "Постановка домашних задач к практикуму №6."
На практикуме №6 ваша команда демонстрирует применение стандартных шаблонов объектно-ориентированного проектирования, решающих возникшие в ходе развития проекта проблемы с архитектурой
4 часа + 3 часа СР

Лекция №8: Принципы и шаблоны объектно-ориентированного проектирования. Базовые шаблоны, шаблоны GoF  

Ключевые проблемы и принципы объектно-ориентированного проектирования. Основные конфликты. CAP-теорема. Типология шаблонов. Базовые шаблоны: наследование и композиция, интерфейс, делегирование, неизменяемые объекты. Каталог GoF: порождающие, структурные и порождающие шаблоны.

Постановка задач к практикуму №6.

4 часа + 3 часа СР

Семинар №3: Практическое занятие №6. Оптимизация полиморфной иерархии классов с использованием шаблонов объектно-ориентированного проектирования однопоточных приложений  

Выявить потенциальные проблемы дальнейшего сопровождения и развития иерархии классов, полученной как результат практикумов №№3 – 5, спланировать и осуществить системную трансформацию интерфейсов и реализации приложения с использованием соответствующих шаблонов объектно-ориентированного проектирования. В решении задачи максимально актуализируются знания, полученные на лекции №8.
4 часа + 2 часа СР

Лекция №9: Идиоматика C++. Основы рефакторинга и качество исходного кода. Стандарты кодирования и методологии разработки ПО   + ДЗ №7

• Объектно-ориентированные идиомы языка C++ и управление памятью. Статический анализ и рефакторинг исходного кода. Анти-шаблоны, логические и семантические ошибки, «технический долг» проекта. Понятие, факторы и метрики качества исходного кода. Оформление и документирование кода. Методологии промышленной разработки.

• Постановка задач к практикуму №7.

Домашнее задание №7: ДЗ №7 "Постановка индивидуальных задач к практикуму №7."
Готовясь к практикуму №7, ваша команда осуществляет инспекцию кода другой команды, также отдавая свой продукт на анализ. По результатам анализа обе команды исправляют найденные недочеты и снижают «технический долг» проектов.
4 часа + 3 часа СР

Семинар №4: Практическое занятие №7. Инспекция и рефакторинг объектно-ориентированного исходного кода  

Произвести статический анализ исходного кода приложения, полученного как результат практикумов №№3 – 6, в том числе на наличие анти-шаблонов, осуществить рефакторинг приложения и добиться самодокументируемости его исходного кода. В решении задачи максимально актуализируются знания, полученные на лекции №9.
4 часа

Контрольное занятие №4: Экзамен  

На экзамене студенты могут повысить оценку в случае, если набранные баллы за курс их не устраивают.
4 часа

Контрольное занятие №5: Пересдача  

На пересдаче студенты могут сдать задолженности по курсу
4 часа