Вы находитесь на странице: 1из 14

Рабочая программа утверждена в составе учебного

плана (-ов): 19/5156/1


___________________________________________
Заместитель начальника Управления
образовательных программ Т.В.Фролова

(заполняется работниками Управления образовательных программ)

Санкт-Петербургский государственный университет

РАБОЧАЯ ПРОГРАММА
УЧЕБНОЙ ДИСЦИПЛИНЫ

C++
C++

Язык(и) обучения

русский

Трудоемкость в зачетных единицах: 8

Регистрационный номер рабочей программы: 058902

Санкт-Петербург
2019
Раздел 1. Характеристики учебных занятий
1.1. Цели и задачи учебных занятий
Подготовка по данной рабочей программе учебной дисциплины является составной частью
основной образовательной программы бакалавриата «Современное программирование» по
направлению «Прикладная математика и информатика». Дисциплина ориентирована на
профессиональное и личностное становление будущих бакалавров в области
информационных технологий. Основной целью освоения дисциплины «С++» является
изучение парадигм современного программирования на примере языка C++, а также
получение навыка разработки программ на этом языке.

Задачи курса:
1. научить студентов проектированию и разработке программ на языке C++ с
использованием парадигм современного программирования (процедурного,
объектно-ориентированного и обобщенного подходов);
2. научить студентов использованию стандартных библиотек (libc, STL);
3. научить студентов использованию технологий и инструментов, позволяющих
производить разработку, отладку и тестирование программ на C++ на современном
технологическом уровне;
4. ознакомить студентов с техническими деталями работы аппаратного обеспечения и
операционных систем, понимание которых необходимо для разработки на С++.
1.2. Требования подготовленности обучающегося к освоению содержания учебных
занятий (пререквизиты)
Студент, обучающийся по данной дисциплине, должен иметь знания, умения и навыки,
соответствующие полному среднему образованию, т.е. иметь базовые навыки
алгоритмизации и разработки программ на одном из существующих языков
программирования (например, Basic, Pascal или C). Одновременно с изучением
дисциплины он должен иметь или получать знания, умения, навыки и компетенции по
дисциплинам: «Алгоритмы и структуры данных», «Основы математической логики и
теоретической информатики», которые создают теоретико-методологические и
инструментально-прикладные основы формирования компетенций, формируемых в рамках
учебной дисциплины «С++».
1.3. Перечень результатов обучения (learning outcomes)

Дисциплина участвует в формировании компетенций обучающихся по образовательной


программе, установленных учебным планом для данной дисциплины. Обучающийся
должен овладеть теоретическим материалом в объеме, предусмотренном программой,
уметь применять полученные знания при решении теоретических и прикладных задач, на
основе анализа освоенных разделов:

1. Программа, состоящая из нескольких файлов;


2. Указатели ;
3. Три вида памяти в C++;
4. Стандартная библиотека libc;
5. Объектно-ориентированное программирование ;
6. Обобщенное программирование (шаблоны);
7. Обработка ошибок с использованием исключений;
8. Стандартная библиотека STL (контейнеры, алгоритмы);
9. Стандарты C++11 – С++17.

По результатам обучения обучающийся должен:


Знать
- основные языковые конструкции С/С++;
- механизмы процедурного программирования на C/C++;
- механизмы объектно-ориентированного программирования на C++;
- механизмы обобщенное программирование на C++;
- принципы обработки ошибок на C/C++;
- возможности библиотек libc и STL;
-средства разработки (препроцессор, компилятор, ассемблер, компоновщик, система
сборки, отладчик и т.д.);
Уметь:
- разрабатывать программы для выбранной задачи на языке С++;
- писать код в соответствии с заданным стилем программирования;
- читать чужой код;
- организовывать автоматическое тестирование программ, используя юнит-тесты;
- проводить отладку программы.
Владеть:
- навыками разработки программы с использованием парадигм современного
программирования (процедурный, объектно-ориентированный и обобщенный подходы);
- навыками создания программы с использованием современных средств разработки;
- навыками определения целесообразности применения изученных технологий (языковых
конструкций С++, стандартных и сторонних библиотек) и средств разработки для
решения выбранной задачи.
1.4. Перечень и объём активных и интерактивных форм учебных занятий
Лекции: 60 часов, практические занятия 60 часов, промежуточная аттестация (экзамен) 4
часа.
Раздел 2. Организация, структура и содержание учебных занятий
2.1. Организация учебных занятий

2.1.1 Основной курс

Трудоёмкость, объёмы учебной работы и наполняемость групп обучающихся


Контактная работа обучающихся с преподавателем Самостоятельная работа Объё
м
акти
вных
и Тр
инте уд
ракт оё
ивны мк
х ос
форм ть
Код учеб
модуля в ных
составе занят
дисципли ий
ны, сам.
про
практики раб.
тек ме
и т.п. с
лаб те ущ жу
пром ито под в испо итог
ора кон ко ку ий точ
кон прак ежут гов руко прис льзо овая
Се тор тро лл щи ко ная
лек сул тиче очна ая водс утств вани аттес
ми ны льн ок й нтр атт
ци ьта ские я атт твом ии ем таци
на е ые ви ко оль ест
и ци занят аттес ест преп преп мето я
ры раб раб ум нт (са аци
и ия таци аци одав одав диче (сам.
от оты ы ро м.р я
я я ателя ателя ских раб.)
ы ль аб. (са
мате
) м.р
риал
аб.)
ов
ОСНОВНАЯ ТРАЕКТОРИЯ
Форма обучения: очная
Семестр
30 2 30 2 56 24 32 4
1
2- 2- 10- 10-
1-1 1-1
70 70 25 25
Семестр
30 2 30 2 56 24 32 4
2
ИТОГО 60 4 60 4 112 8

Виды, формы и сроки текущего контроля успеваемости и промежуточной аттестации


Виды итоговой
аттестации
Формы текущего контроля Виды промежуточной (только для программ
Код модуля в успеваемости аттестации итоговой аттестации и
составе дополнительных
дисциплины, образовательных программ)
практики и т.п. Формы Сроки Виды Сроки Виды Сроки
ОСНОВНАЯ ТРАЕКТОРИЯ
Форма обучения: очная
экзамен, по графику
устно, промежуточно
Семестр 1
традицион й аттестации,
ная форма
экзамен, по графику
устно, промежуточно
Семестр 2
традицион й аттестации,
ная форма
2.2. Структура и содержание учебных занятий

В данной таблице указываются разделы (модули), их содержание (темы) и часы.


Период обучения (модуль): Семестр 1

Количество
п/ Наименование темы (раздела, части) Вид учебных занятий
часов
п
1. Программа, состоящая из нескольких лекции 4
файлов. Практические занятия 4
6
1 ● заголовочные файлы
● компиляция и линковка по методическим материалам
● утилита make

2 2. Указатели, массивы, ссылки. Три вида лекции 2


памяти. Работа с кучей на C. практические занятия 2
по методическим материалам 4
● применение указателей
и ссылок
● арифметика указателей
● глобальная/статическая
память, стек, куча
● malloc/calloc/realloc
● void*

3 3. Стуктуры. Cвязный список на C. лекции 4


Практические занятия 4
● неинтрузивная по методическим материалам 6
реализация
● интрузивная реализация
● typedef

4 4. Функции. Указатели на функции. лекции 2


● как происходит вызов Практические занятия 2
функции по методическим материалам 4
● реализация сортировки
● void sort(void* base,
size_t num, size_t size, int
(*compar)(const void*,const
void*));

5 5. Обзор стандартной библиотеки C. лекции 2


● ввод-вывод на C (stdio.h, Практические занятия 2
обработка ошибок) по методическим материалам 4
● string.h
● stdlib.h

6 6. Классы и объекты. лекции 2


● зачем нужно ООП? Практические занятия 2
● инкапсуляция: по методическим материалам 4
private/public
● конструктор
(overloading), деструктор
● инициализация

7 7. Работа с кучей на C++. лекции 2


● new/delete Практические занятия 2
● cоздание объектов в по методическим материалам 4
куче
● конструктор копий
● оператор присваивания

8 8. Наследование и полиморфизм. лекции 2


● protected Практические занятия 2
● virtual (overriding) по методическим материалам 4
● таблица виртуальных
функций
● статическое/динамическ
ое связывание

9 9. Умные указатели. лекции 2


● scoped_ptr Практические занятия 2
● auto_ptr по методическим материалам 4
● shared_ptr

10 10. Перегрузка операторов. лекции 2


● бинарные и унарные Практические занятия 2
● в классе/вне классе по методическим материалам 4
● friend
● приведение типов

11 11. Ввод-вывод на C++. лекции 2


● иерархия классов Практические занятия 2
● методы/флаги/манипуля по методическим материалам 4
торы
● обработка ошибок
● overloading

12 12. Ключевые слова extern, static, лекции 2


inline. Практические занятия 2
● extern у переменных по методическим материалам 4
● static у переменных и
функций
● static у полей и методов
● inline у функций
● паттерн Singleton.
13 13. Разное лекции 2
● Автотесты Практические занятия 2
● Декомпозиция по методическим материалам 5
программы (Model, View)
● Ключевые слова const,
enum

Семестр 2


Количество
п/ Наименование темы (раздела, части) Вид учебных занятий
часов
п
1. Шаблоны лекции 4
● решение в стиле C Практические занятия 4
● шаблонные классы 6
1 ● шаблонные функции
● специализация по методическим материалам
шаблонов

2 2. Исключения лекции 4
● обработка ошибок в практические занятия 4
стиле C по методическим материалам 6
● try/catch/throw
● исключения в
конструкторах и деструкторах
● идиома RAII
● гарантии исключений

3 3. Последовательные контейнеры лекции 4


● string, vector, list, deque Практические занятия 4
● array, forward_list по методическим материалам 6
● внутреннее устройство и
основные операции
● итераторы и их
инвалидация

4 4. Ассоциативные контейнеры лекции 2


● set, multiset, map, Практические занятия 2
multimap по методическим материалам 4
● unordered_set,
unordered_map
● внутреннее устройство и
основные операции
● итераторы и их
инвалидация

5 5. Алгоритмы лекции 2
● функторы Практические занятия 2
● обзор алгоритмов с по методическим материалам 4
примерами
● std::advance
● iterator_traits (value_type,
iterator_category)

6 6. Приведение типов лекции 2


● static_cast, const_cast, Практические занятия 2
reinterpret_cast по методическим материалам 4
● RTTI и dynamic_cast
● mutable

7 7. Move семантика лекции 2


● rvalue и lvalue Практические занятия 2
● rvalue references по методическим материалам 4
● move constructor, move
assignment
● std::move

8 8. Переменное число аргументов лекции 2


● переменное число Практические занятия 2
параметров в стиле C (va_arg, по методическим материалам 4
va_list, va_start)
● variadic templates

9 9. С++11. Разное. лекции 2


● lambda Практические занятия 2
● auto, decltype по методическим материалам 4
● default, delete, override,
final
● initializer_list

10 10. Метапрограммирование лекции 2


● решение в стиле C Практические занятия 2
● type_traits по методическим материалам 4
● enable_if

11 11. Потоки и мутексы лекции 2


● зачем нужны потоки? Практические занятия 2
● конкурентный доступ к по методическим материалам 4
переменным
● thread
● mutex, lock_guard

12 12. Сondition variable лекции 2


● задача "производитель- Практические занятия 2
потребитель" по методическим материалам 6
● thread и std::bind
● condition_variable
Раздел 3. Обеспечение учебных занятий
3.1. Методическое обеспечение
3.1.1 Методические указания по освоению дисциплины
В методическое обеспечение аудиторной работы включены материалы лекций, учебные
пособия, в том числе электронные, по дисциплине «С++».
Методические рекомендации преподавателю
Изложение материалов на занятиях следует выстраивать от простого к сложному. Новые
термины должны появляться по мере усвоения предыдущих. По возможности, следует
побуждать учащихся к активной деятельности на лекциях с помощью проверочных
вопросов во время лекций, заданий с последующим обсуждением ответов и т.п. Для
проведения лекционных занятий рекомендуется использовать презентации.
На практических занятиях активное взаимодействие со студентами должно быть основной
формой проведения занятий. На каждом занятии можно сначала обсудить правильные и
неправильные способы решения предыдущего домашнего задания, а затем рассматривать
новую тему и предложить студентам решить примеры заданий с помощью преподавателя.
Для проведения зачета и экзамена преподаватель должен знать критерии оценивания.
Методические указания студентам
Самостоятельная работа студентов включает в себя решение задач, изучение лекционного
материала, учебников, учебных пособий и иных материалов. Время и место
самостоятельной работы выбираются студентами по своему усмотрению с учетом
рекомендаций преподавателя.
После окончания лекции и до наступления следующей лекции по предмету студенту
следует уделить время тому, чтобы самостоятельно пройти по всему материалу лекции и
убедиться, что весь материал понятен. При необходимости, можно обратиться за
разъяснениями к другим обучающимся на курсе, или к преподавателю курса (например,
через средства информационной поддержки курса). После повторения материала лекции,
полезно также обратиться к источникам из списка дополнительной литературы по курсу,
чтобы получить более полное представление о пройденной теме.

3.1.2 Методическое обеспечение самостоятельной работы


В состав методического обеспечения самостоятельной работы входит основная и
дополнительная литература, контрольные вопросы и задания для организации текущей
самостоятельной работы обучающихся по всем учебным разделам.

3.1.3 Методика проведения текущего контроля успеваемости и промежуточной


аттестации и критерии оценивания
Показателями, характеризующими текущую учебную работу слушателей, являются:

● активность посещения занятий и работы на занятиях;


● оценка домашних заданий;
● оценка тестов.

Критерии оценивания формируются исходя из данных показателей работы слушателей, и


методов измерения знаний, которые используются при контроле освоения учебного
материала дисциплины слушателями.

В процессе обучения студент получает баллы за тесты, недельные и семестровые домашние


задания. Тесты проводятся 1 раз в месяц; недельное задание – раз в 1 или 2 недели;
семестровое задание – 1 или 2 раза в семестр.
Для получения допуска к экзамену необходимо в первом семестре набрать 30% от
максимума баллов, а во втором семестре - 50% от максимума баллов. Экзамен проводится
в форме устного ответа на вопрос и выполнения письменной задачи (написание
программы). На подготовку устного ответа отводится 30 минут. На решение задачи – 1 час.

При оценивании результатов контрольных заданий, письменных работ и промежуточной


(заключительной) аттестации по дисциплине преподавателю рекомендуется использовать
следующие условия выставления оценок:

Оценки «отлично» заслуживает студент, обнаруживший всестороннее, систематическое и


глубокое знание учебного материала, умение свободно выполнять задания,
предусмотренные программой, усвоивший основную литературу и знакомый с
дополнительной литературой, рекомендованной программой. Как правило, оценка
«отлично» выставляется усвоившим взаимосвязь основных понятий дисциплины и их
значение для приобретаемой профессии, проявившим творческие способности в
понимании, изложении и использовании учебно-программного материала.
Оценки «хорошо» заслуживает студент, обнаруживший полное знание учебного материала,
успешно выполняющий предусмотренные в программе задания, усвоивший основную
литературу, рекомендованную в программе. Как правило, оценка «хорошо» выставляется
учащимся, показавшим систематический характер знаний по дисциплине и способным к их
самостоятельному пополнению и обновлению в ходе дальнейшей учебной работы и
профессиональной деятельности.

Оценки «удовлетворительно» заслуживает студент, обнаруживший знание основного


учебного материала в объеме, необходимом для дальнейшей учебы и предстоящей работы
по профессии, справляющийся с выполнением заданий, предусмотренных программой,
знакомый с основной литературой, рекомендованной программой. Как правило, оценка
«удовлетворительно» выставляется, допустившим погрешности в ответе на экзамене и при
выполнении экзаменационных заданий, но обладающим необходимыми знаниями для их
устранения под руководством преподавателя.
Оценка «неудовлетворительно» выставляется студенту, обнаружившему пробелы в
знаниях основного учебного материала, допустившему принципиальные ошибки в
выполнении предусмотренных программой заданий. Как правило, оценка
«неудовлетворительно» ставится слушателям, которые не могут продолжить обучение или
приступить к профессиональной деятельности по окончании ОП без дополнительных
занятий по соответствующей дисциплине.

3.1.4 Методические материалы для проведения текущего контроля успеваемости и


промежуточной аттестации (контрольно-измерительные материалы, оценочные
средства)

Пример теста
1. Создать класс GaussNumber (h, cpp). Есть штраф за "избыточные" функции.

GaussNumber A(1, 1); // A = 1 + i


GaussNumber B = 5; // B = 5
GaussNumber C; // C = 0;
C = A; // C = 1 + i
C = 1; // C = 1;
C.add(A);// C += A
C.multiply(A); // C *= A
2. В языке C++ (в отличии от C) невозможно скомпилировать вызов функции, объявление
(или определение) которой недоступно в момент компиляции. Это связано с наличием в
C++ ссылок.
Объясните в чем тут дело.

Пример недельного задания


1. Реализовать следующие функции (str.c, str.h):
- char * strcpy(char * destination, const char * source);
- char * strcat(char * destination, const char * source);
- int strcmp(const char * str1, const char * str2);
- size_t strlen(const char * str).

NB:
* ключевое слово const пока можно игнорировать;
* описание функций можно найти здесь: http://www.open-
std.org/jtc1/sc22/wg14/www/docs/n1256.pdf;
* постарайтесь не использовать индексы для обращения к элементам массива;
* постарайтесь реализовать функции максимально лаконично.

2. К каждой функции должна быть реализована минимум одна тестовая функция (test_str.c,
test_str.h).

3. main и вызов тестов должны располагаться в файле test.c.

4. Требование к структуре кода:


* сборка командой make, удаление продуктов сборки с помощью цели clean;
* генерирование объектного файла str.o и папки bin в процессе сборки;
* структура "проекта" должна быть как в первом задании за исключением имени
исполняемого файла.

Примерный перечень теоретических вопросов для подготовки к экзамену:


1 семестр
1. Программа, состоящая из нескольких файлов.
2. Указатели, массивы, ссылки. Три вида памяти. Работа с кучей на C.
3. Стуктуры. Cвязный список на C.
4. Функции. Указатели на функции.
5. Обзор стандартной библиотеки C.
6. Классы и объекты.
7. Работа с кучей на C++.
8. Наследование и полиморфизм.
9. Умные указатели.
10. Перегрузка операторов.
11. Ввод-вывод на C++.
12. Ключевые слова extern, static, inline.
13. Декомпозиция программы (Model, View). Автотесты.

2 семестр
1. Шаблоны
2. Исключения
3. Последовательные контейнеры
4. Ассоциативные контейнеры
5. Алгоритмы
6. Приведение типов
7. Move семантика
8. Переменное число аргументов
9. С++11. Разное.
10. Метапрограммирование
11. Потоки и мутексы
12. Сondition variable
3.1.5 Методические материалы для оценки обучающимися содержания и качества
учебного процесса
Анкета для студентов для оценки качества преподавания курса.
Просим Вас заполнить анкету-отзыв по прочитанной дисциплине. Обобщенные данные
анкет будут использованы для ее совершенствования. По каждому вопросу проставьте
соответствующие оценки по шкале от 1 до 10 баллов (обведите выбранный Вами балл). В
случае необходимости впишите свои комментарии.
1. Насколько Вы удовлетворены содержанием дисциплины в
целом?
1 2 3 4 5 6 7 8 9 10
Комментарий_________________________________________________
2. Насколько Вы удовлетворены общим стилем преподавания?
1 2 3 4 5 6 7 8 9 10
Комментарий_________________________________________________
3. Как Вы оцениваете качество подготовки предложенных
методических материалов?
1 2 3 4 5 6 7 8 9 10
Комментарий_________________________________________________

4. Насколько Вы удовлетворены использованием


преподавателями активных методов обучения?
1 2 3 4 5 6 7 8 9 10
Комментарий_________________________________________________

5. Какой из модулей (разделов) дисциплины Вы считаете наиболее полезным,


ценным с точки зрения дальнейшего обучения и/или
применения в последующей практической деятельности?
Комментарий______________________________________________

6. Что бы Вы предложили изменить в методическом и


содержательном плане для совершенствования преподавания данной
дисциплины?
Комментарий___________________________________________________

СПАСИБО!

3.2. Кадровое обеспечение


3.2.1 Образование и (или) квалификация штатных преподавателей и иных лиц,
допущенных к проведению учебных занятий
К чтению лекций должны привлекаться преподаватели, имеющие ученую степень и/или
ученое звание, имеющие опыт планирования и организации учебного процесса, а также
главные и ведущие специалисты в этой области.

3.2.2 Обеспечение учебно-вспомогательным и (или) иным персоналом


Учебно-вспомогательный и инженерно-технический персонал должен иметь
соответствующее высшее образование, и обладать навыками организации работы с
пользовательскими программными продуктами в локальной сети компьютерного класса и
в Интернете.

3.3. Материально-техническое обеспечение


3.3.1 Характеристики аудиторий (помещений, мест) для проведения занятий
Учебные аудитории для проведения учебных занятий, оснащенные стандартным
оборудованием, используемым для обучения в СПбГУ в соответствии с требованиями
материально-технического обеспечения.
3.3.2 Характеристики аудиторного оборудования, в том числе
неспециализированного компьютерного оборудования и программного обеспечения
общего пользования
Стандартное оборудование, используемое для обучения в СПбГУ.
MS Windows, MS Office, Mozilla FireFox, Google Chrome, Acrobat Reader DC, WinZip,
Антивирус Касперского.
3.3.3 Характеристики специализированного оборудования
Не требуется.
3.3.4 Характеристики специализированного программного обеспечения
Ubuntu Linux, Git, C++Builder

3.3.5 Перечень и объёмы требуемых расходных материалов


мел, фломастеры цветные, губки, бумага формата А4, канцелярские товары, картриджи
принтеров, флеш-накопители и др. в объёме, необходимом для организации и проведения
занятий.

3.4. Информационное обеспечение


3.4.1 Список обязательной литературы:
1. Бьерн Страуструп, Дизайн и эволюция языка C++
2. Брайан Керниган, Деннис Ритчи, Язык программирования C
3. Конова, Е.А. Алгоритмы и программы. Язык С++ [Электронный ресурс] : учебное
пособие / Е.А. Конова, Г.А. Поллак. — Электрон. дан. — Санкт-Петербург: Лань, 2018.
— 384 с. – ЭБС «Лань» по подписке СПбГУ:
https://proxy.library.spbu.ru/login?url=https://e.lanbook.com/

3.4.2 Список дополнительной литературы

1. Брайан Керниган, Роб Пайк, Практика программирования.


2. Страуструп Б. Язык программирования С++ / Б. Страуструп. – СПб.: "Невский
диалект", М.: Бином, 2008. – 1104 с

3.4.3 Перечень иных информационных источников

 Сайт Научной библиотеки им. М. Горького СПбГУ:


 http://www.library.spbu.ru/

 Электронный каталог Научной библиотеки им. М. Горького СПбГУ:


 http://www.library.spbu.ru/cgi-
bin/irbis64r/cgiirbis_64.exe?C21COM=F&I21DBN=IBIS&P21DBN=IBIS

 Перечень электронных ресурсов, находящихся в доступе СПбГУ:


 http://cufts.library.spbu.ru/CRDB/SPBGU/
 Перечень ЭБС, на платформах которых представлены российские учебники,
находящиеся в доступе СПбГУ:
 http://cufts.library.spbu.ru/CRDB/SPBGU/browse?name=rures&resource_type=8

 ACM Digital Library: http://cufts.library.spbu.ru/CRDB/SPBGU/resource/12

 Institute of Electrical and Electronics Engineers (IEEE):

http://cufts.library.spbu.ru/CRDB/SPBGU/resource/375

 MathSciNet - электронная коллекция Американского математического сообщества

(AMS): http://cufts.library.spbu.ru/CRDB/SPBGU/resource/415

 O’Reilly: http://cufts.library.spbu.ru/CRDB/SPBGU/resource/483

 Zentralblatt MATH: http://cufts.library.spbu.ru/CRDB/SPBGU/resource/86

Раздел 4. Разработчики программы


Линский Евгений Михайлович, к.т.н., evgeny.linsky@gmail.com

Вам также может понравиться