ПУД Языки программирования Лебедев П.А. 2013

advertisement
Правительство Российской Федерации
Федеральное государственное автономное образовательное учреждение
высшего профессионального образования
"Национальный исследовательский университет
"Высшая школа экономики"
Факультет прикладной математики и кибернетики
Программа дисциплины Языки программирования
для специальности 090301.65 «Компьютерная безопасность» подготовки специалиста
Автор программы:
Лебедев П.А. (plebedev@hse.ru)
Одобрена на заседании кафедры Компьютерной безопасности «___» августа 2013 г.
Зав. кафедрой А.Б. Лось
Рекомендована секцией УМС [Введите название секции УМС] «___»____________ 20 г.
Председатель [Введите И.О. Фамилия]
Утверждена УС факультета [Введите название факультета] «___»_____________20 г.
Ученый секретарь [Введите И.О. Фамилия] ________________________ [подпись]
Москва, 2013
Настоящая программа не может быть использована другими подразделениями
университета и другими вузами без разрешения кафедры-разработчика программы.
Национальный исследовательский университет «Высшая школа экономики»
Программа дисциплины Языки программирования
для специальности 090301.65 «Компьютерная безопасность» подготовки специалиста
1
Область применения и нормативные ссылки
Настоящая программа учебной дисциплины устанавливает минимальные требования к
знаниям и умениям студента и определяет содержание и виды учебных занятий и отчетности.
Программа предназначена для преподавателей, ведущих данную дисциплину, учебных
ассистентов и студентов специальности 090301.65 «Компьютерная безопасность»,
обучающихся по специализации «Математические методы защиты информации», изучающих
дисциплину Языки программирования.
Программа разработана в соответствии с:
 Федеральным
государственным
образовательным
стандартом
высшего
профессионального образования по направлению подготовки (специальности) 090301
«Компьютерная безопасность» (квалификация (степень) «специалист»);
 Рабочим учебным планом университета по специальности 090301 «Компьютерная
безопасность», специализации «Математические методы защиты информации»,
утверждённым в 2013 г.
2
Цели освоения дисциплины
Целью освоения дисциплины «Языки программирования» является формирование
базовых компетенций, связанных с разработкой программного обеспечения при решении
профессиональных задач. В рамках дисциплины вырабатываются навыки программирования и
алгоритмизации с применением современных процедурных и объектно-ориентированных
языков программирования. Параллельно с рассмотрением данных языков, демонстрируется их
связь с языком ассемблера. Завершает курс рассмотрение высокопроизводительного
динамического языка. За счёт рассмотрения основных представителей языков различного
уровня и их связей, закладывается понимание иерархии существующего ПО, происходит
освоение разнообразного инструментария и подготовка специалиста к проектированию и
анализу программных систем.
3
Компетенции обучающегося, формируемые в результате освоения
дисциплины
В результате освоения дисциплины студент должен:
 Знать:
o общие принципы построения и использования современных языков
программирования высокого уровня;
o язык программирования высокого уровня (объектно-ориентированное
программирование);
o особенности взаимодействия языков высокого и низкого уровня, организации
работы с памятью в скриптовых языках.
o базовые структуры данных;
o основные комбинаторные и теоретико-графовые алгоритмы, а также способы их
эффективной реализации и оценки сложности;
o современные технологии программирования
 Уметь:
o формализовать поставленную задачу;
o работать с интегрированными средами разработки программного обеспечения;
 Иметь навыки:
o разработки, документирования, тестирования и отладки программ;
o навыками использования инструментальных средств отладки и
дизассемблирования программного кода;
2
Национальный исследовательский университет «Высшая школа экономики»
Программа дисциплины Языки программирования
для специальности 090301.65 «Компьютерная безопасность» подготовки специалиста
o навыками разработки алгоритмов решения типовых профессиональных задач.
3
Национальный исследовательский университет «Высшая школа экономики»
Программа дисциплины Языки программирования
для специальности 090301.65 «Компьютерная безопасность» подготовки специалиста
В результате освоения дисциплины студент осваивает следующие компетенции:
Компетенция
Код по
ФГОС
Дескрипторы – основные признаки
освоения (показатели достижения
результата)
Способность к логически
правильному мышлению,
обобщению, анализу,
критическому осмыслению
информации,
систематизации,
прогнозированию,
постановке
исследовательских задач и
выбору путей их решения
на основании принципов
научного познания
ОК-9
Знает основные алгоритмические
конструкции, описывает
реализацию примитивных
структур данных и управляющих
конструкций в различных языках
программирования, распознаёт
данные конструкции с
существующем ПО, составляет
алгоритм решения задачи,
реализует алгоритм на выбранном
ЯП, анализирует характеристики
полученного продукта.
Способность применять
математический аппарат, в
том числе с
использованием
вычислительной техники,
для решения
профессиональных задач
ПК-2
Способность работать с
программными средствами
прикладного, системного и
специального назначения
ПК-8
Определяет возможность
использования вычислительной
техники для решения задачи,
разрабатывает алгоритм решения
задачи, реализует разработанный
алгоритм, оценивает
эффективность полученного
решения.
Знает функции элементов ПО сред
разработки и выполнения,
применяет данные средства в
цикле разработки.
Способность использовать
языки и системы
программирования,
инструментальные
средства для решения
различных
профессиональных,
исследовательских и
прикладных задач
Способность обосновывать
правильность выбранной
модели решения
профессиональной задачи,
сопоставлять
экспериментальные
данные и теоретические
решения
ПК-9
Знает области применения
различных языков
программирования и средств
разработки, объясняет выбор
инструментария для решения
конкретной задачи, применяет
выбранные средства, оценивает
пригодность выбранного решения.
ПК-28
Знает оценки алгоритмической
сложности, связанные с
конкретными алгоритмами
структурами данных, определяет
сложность существующих
алгоритмов, выбирает
оптимальные с точки зрения
алгоритмической сложности
структуры данных и алгоритмы,
обосновывает выбор в конкретных
условиях.
4
Формы и методы обучения,
способствующие
формированию и развитию
компетенции
Все используемые формы и
методы обучения.
Использование в примерах и
задачах ПО по тематике
профессиональных
дисциплин.
Практические занятия по
работе с указанными
средствами, использование
их в самостоятельной
работе.
Все используемые формы и
методы обучения.
Теоретические вопросы по
построению новых и
нахождению ошибок в
имеющихся программных
системах при защите
самостоятельных работ на
практических занятиях и в
рамках контрольных работ.
Место дисциплины в структуре образовательной программы
Настоящая дисциплина относится к профессиональному циклу дисциплин и блоку
дисциплин, обеспечивающих базовую подготовку для всех специализаций.
4
Национальный исследовательский университет «Высшая школа экономики»
Программа дисциплины Языки программирования
для специальности 090301.65 «Компьютерная безопасность» подготовки специалиста
Изучение данной дисциплины базируется на общешкольных знаниях.
Для освоения учебной дисциплины, студенты должны владеть следующими знаниями и
компетенциями:
 Владение математическим аппаратом в рамках программы средней школы;
 Умение использования персонального компьютера для ввода и поиска информации,
знание основных возможностей ОС по работе с файлами, умение устанавливать и
изучать дополнительное ПО;
 Основы английского языка.
Основные положения дисциплины должны быть использованы в дальнейшем при
изучении следующих дисциплин:
 Математическое программное обеспечение;
 Методы программирования;
 Операционные системы;
 Языки ассемблера
 Системно-ориентированное программирование;
 Системы управления базами данных;
 Программирование алгоритмов защиты информации;
 Параллельные вычисления;
 Анализ программных реализаций алгоритмов защиты.
Знания и практические навыки, полученные в результате освоения дисциплины «Языки
программирования», используются студентами при разработке курсовых и дипломных работ, в
научно-исследовательской работе.
5
Тематический план учебной дисциплины
Всего
часов
№
Название раздела
1
2
Введение в языки программирования. Язык C.
Объектно-ориентированное
программирование. Язык С++.
Разработка больших приложений
Динамические и скриптовые языки. Язык
Python.
Итого:
3
4
118
162
Аудиторные
Самостоятельная
часы
работа
Лекц Практически
ии
е занятия
30
30
58
42
42
80
56
62
14
16
14
16
28
30
400
102
102
196
Формы контроля знаний студентов
Тип
Форма
1 год
2 год Параметры **
контроля контроля
1 2 3 4 1 2
Текущий Контрольн 6 7
9
Письменная работа на 2 академических часа.
(неделя)
ая работа
Домашнее
8
10
8 Программный проект
задание
Промежу- Зачет
*
Устный зачёт, подготовка до 60 минут.
точный
Итоговый Экзамен
* Устный экзамен, подготовка до 60 минут.
Для форм текущего контроля указана неделя проведения.
5.1
Критерии оценки знаний, навыков
Оценки по всем формам текущего контроля выставляются по 10-ти балльной шкале.
5
Национальный исследовательский университет «Высшая школа экономики»
Программа дисциплины Языки программирования
для специальности 090301.65 «Компьютерная безопасность» подготовки специалиста
Основной формой текущего контроля является домашнее задание, являющееся крупным
программным проектом по теме, согласованной с преподавателем. Задание должно
формулироваться таким образом, чтобы при его реализации потребовалось применение
значительной части изученного на текущем этапе материала. Основным критерием
выставления оценки является успешное применение оптимальных методов решения задачи
учащимся, исходя из текущего уровня его знаний, полученных на лекционных занятиях.
Решения, использующие оригинальные или ещё не изученные методы могут оцениваться более
высоко. Помимо предоставления самого решения, учащийся также должен продемонстрировать
понимание собственной работы и способность вносить в неё изменения.
Контрольная работа используется для оценки способности учащегося работать с
программным кодом, автором которого он не является. Выдаваемый учащемуся текст
программы заведомо содержит различные ошибки и недочёты. Условием выставления
отличной оценки является нахождение всех синтаксических и семантических ошибок и наличие
минимум одной корректной и значительной рекомендации по улучшению предъявленной
реализации.
Зачёт и экзамен могут включают в себя элементы, аналогичные контрольной работе,
общетеоретические вопросы и практические вопросы по последнему домашнему заданию или
другой самостоятельной работе.
5.2
Порядок формирования оценок по дисциплине
Поскольку практические занятия по дисциплине состоят в основном из отчётности
учащихся по самостоятельной работе, отдельная аудиторная оценка не используется.
Преподаватель оценивает самостоятельную работу студентов аналогично домашнему
заданию (текущей форме контроля). Оценки за самостоятельную работу студента
преподаватель выставляет в рабочую ведомость. Накопленная оценка по 10-ти балльной шкале
за самостоятельную работу определяется перед промежуточным или итоговым контролем –
Осам. работа.
Накопленная оценка за текущий контроль учитывает результаты студента по текущему
контролю следующим образом:
Онакопленная= 0,3 * Отекущий + 0,7 * Осам.работа
где Отекущий
рассчитывается как взвешенная сумма всех форм
текущего контроля, предусмотренных в РУП:
Отекущий = 0,3·Ок/р + 0,7·Одз ;
Результирующая оценка за дисциплину рассчитывается следующим образом:
Опромежуточная 1 = 0,8·Онакопленная этапа 1 + 0,2·Опромежуточный зачёт
Где Онакопленная этапа 1 рассчитывается по приведённой выше формуле.
Онакопленная Итоговая= (Опромежуточная 1+Онакопленная 2):2
Где Опромежуточная 1 – промежуточная оценка этапа 1, а Онакопленная 2 – накопленная
оценка последнего этапа перед итоговым зачетом/экзаменом.
На пересдаче студенту предоставляется возможность получить дополнительный балл
для компенсации оценки за текущий контроль.
На зачете или экзамене студент может получить дополнительный вопрос
(дополнительную практическую задачу, решить к пересдаче домашнее задание), ответ на
который оценивается в 1 балл.
6
Национальный исследовательский университет «Высшая школа экономики»
Программа дисциплины Языки программирования
для специальности 090301.65 «Компьютерная безопасность» подготовки специалиста
В диплом выставляет результирующая оценка по учебной дисциплине, которая
формируется по следующей формуле:
Орезульт = 0,8·Онакопл + 0,2·Оитоговый
Во всех формулах вычисления оценок округление осуществляется вверх.
6
Содержание дисциплины
Введение.
Общие
сведения
о
языках
программирования.
Классификации
языков
программирования. Трансляторы и другие инструментальные средства. Байт-код и JITкомпиляция. Архитектура фон Неймана. Представление примитивных типов данных и
машинного кода. Структурное и модульное программирование. Формальные описания языков
программирования.
Раздел 1. Язык программирования С.
История создания и развития языка C. Классификация и основные характеристики языка
C. Роль и место языка C в современной экосистеме языков программирования.
Основные элементы синтаксиса языка. Наборы символов: базовый, исходный, времени
выполнения, расширенный.
Препроцессор. Включения и макроподстановки. Условная компиляция. Комментарии.
Дополнительные возможности препроцессора.
Описания и определения. Типы и объекты. Классы памяти. Стандартные типы.
Перечисления. Производные типы: указатели, массивы, структуры, объединения, функции.
CVR-квалификаторы. Совместимые и композитные типы. Выравнивание типов.
Выражения. Побочные эффекты. Лево- и праводопустимые выражения. Константы.
Составные литералы. Операции и их применимость к различным типам. Явные и неявные
приведения типов. Ранги целочисленных типов. Стандартное расширение типов. Константные
выражения. Инициализаторы. Выделенные инциализаторы.
Операторы. Блоки. Выражение-оператор. Управляющие конструкции: ветвления, циклы.
Метки и операторы перехода. Оператор возврата. Пустой оператор.
Функции. Механизм вызова функций, передачи и возврата аргументов. Рекурсия.
Встраиваемые функции.
Дополнительные возможности языка C. Проверки времени выполнения. Массивы
переменной длины. Типы переменной длины.
Стандартная библиотека языка C. Обзор возможностей стандартной библиотеки.
Строковые функции. Динамическая память. Потоки ввода-вывода. Форматированный,
текстовый и двоичный ввод/вывод. Операции с файлами. Математические функции.
Стандартные функции. Проверки времени выполнения. Целочисленные типы фиксированной
длины. Вариадические функции. Комплексные числа. Функции обработки многобайтных и
широких символов, локализация, работа с Unicode. Дальние переходы.
Раздел 2. Язык программирования С++
История создания и развития языка C++. Классификация и основные характеристики
языка C++. Роль и место языка C++ в современной экосистеме языков программирования.
Конструкции языка C, несовместимые с языком C++. Разработка программ с
использованием нескольких языков.
Ссылки. Автоматический вывод типов, ключевые слово auto и decltype.
Перегрузка функций. Декорированные имена. Аргументы по умолчанию. Хвостовой
возвращаемый тип. Автоматическое определение возвращаемого типа.
Пространства имён. Объявление и директива using. Аргументо-зависимый поиск.
7
Национальный исследовательский университет «Высшая школа экономики»
Программа дисциплины Языки программирования
для специальности 090301.65 «Компьютерная безопасность» подготовки специалиста
Объектно-ориентированное программирование. Классы. Инкапсуляция. Уровни доступа.
Члены класса: поля и методы. Инициализация членов внутри класса. Конструкторы класса.
Делегирование конструкторов. Деструкторы. Перегрузка операций. Специальные члены классы
и их реализации по умолчанию, спецификаторы default и delete. explicit члены класса.
Дружественные функции и классы. Статические компоненты класса.
Праводопустимые ссылки. Семантика переноса.
Наследование и полиморфизм. Наследование конструкторов. Механизм виртуальных
функций, спецификаторы override и final. Интерфейсы и абстрактные базовые классы.
Управление доступом. Множественное наследование.
Динамическая информация о типах, операции приведения типов.
Операторы new и delete. Операция new с размещением. Константа нулевого указателя.
Перечисления с областью видимости.
Исключения. Механизм обработки исключений. Спецификации исключений.
Шаблоны. Шаблоны функций. Шаблоны классов. Типы параметров шаблонов. Значения
параметров шаблонов по умолчанию. Частичная специализация. Псевдонимы шаблонов.
Шаблоны с переменным числом аргументов. Шаблоны переменных.
Унифицированная инициализация. Шаблон initializer_list.
Стандартная библиотека шаблонов. Интеллектуальные указатели. Обобщённое
программирование. Концепции, уточнения и модели. Функторы. Лямбда-выражения.
Обобщённые лямбда-выражения и выражения захвата. Контейнеры, итераторы и алгоритмы.
Алгоритмическая сложность. Основные структуры данных. Цикл for, основанный на диапазоне.
Строки. Потоки ввода-вывода. Регулярные выражения.
Средства метапрограммирования. Кортежи. Обобщённые константные выражения.
Пользовательские литералы. Обобщённые атрибуты.
Раздел 3. Разработка больших приложений
Среды интегрированной разработки.
Паттерны проектирования. Языковые, парадигмо-специфические и архитектурные
паттерны. Делегирование и композиция. Паттерны создания. Структурные паттерны.
Поведенческие паттерны.
Системы сборки. Динамические библиотеки. Сборка и использование внешних
библиотек. Системы подключаемых модулей.
Разработка приложений с графическим интерфейсом пользователя. Интерфейсы,
основанные на событиях. Библиотека Qt. Слоты, сигналы и свойства. Метаобъекты и их
компилятор. Иерархия объектов и управление временем их жизни. Контейнеры и
вспомогательные классы библиотеки Qt.
Цикл обработки сообщений. События.
Виджеты. Окна. Элементы управления и их иерархия. Динамическое изменение
размеров элементов интерфейса. Паттерн модель-вид-контроллер. Разработка новых элементов
управления. Обработка событий ввода. Средства графического вывода. Альтернативные
подходы к описанию графического интерфейса пользователя.
Параллельное программирование. Потоки. Модель памяти. Атомарные типы в
стандартах C11 и С++11. Примитивы синхронизации. Потоковый класс памяти. Обмен
сообщениями. Использование потоков в приложениях с графическим интерфейсом.
Сетевое программирование. Сокеты. Протоколы с установкой соединения и датаграммы.
Прикладные протоколы.
Раздел 4. Язык Python.
Динамические языки. Динамическая типизация. Классификация языка Python и его
области применения. Реализации Python.
Модули и пакеты. Импорт. Путь поиска. Пакеты пространств имён. Скрытие данных в
модулях.
8
Национальный исследовательский университет «Высшая школа экономики»
Программа дисциплины Языки программирования
для специальности 090301.65 «Компьютерная безопасность» подготовки специалиста
Основные типы данных. Списки, кортежи, словари, множества и способы их создания.
Строки.
Формы операции присваивания. Ссылочная модель присваивания.
Блоки. Основные управляющие конструкции языка. Функция range. Другие функции для
обработки последовательностей.
Функции. Способы передачи аргументов. Аннотации аргументов. Области видимости.
Генераторы. Анонимные функции. Элементы функционального программирования.
Объекты. Автоматическое управление памятью. Иерархия стандартных типов. Типы как
объекты. Объекты классов и экземпляры. Атрибуты. Специальные атрибуты. Перегрузка
операций. Частные атрибуты. Слоты. Свойства. Средства документирования кода.
Наследование. Порядок поиска методов. Статические и классовые методы.
Декораторы и метаклассы.
Обработка исключений. Менеджеры контекстов. Иерархия стандартных типов
исключений.
Обзор стандартной библиотеки.
Использование языка Python вместе с другими языками.
Содержание дисциплины изложено в тематическом порядке, однако изложение
материала рекомендуется проводить в форме «срезов». В частности, в начале курса
предлагается изложить минимальный объём языковых средств, необходимых для начала
выполнения самостоятельной работы. Дополнительные средства могут быть введены далее при
рассмотрении примеров, при этом они будут сгруппированы не в порядке справочника или
стандарта, а в соответствии с их использованием в реальных задачах.
В рамках данного гибкого подхода распределение часов по темам давать
нецелесообразно. Кроме того, преподавателю следует перераспределить время между темами и
рассмотреть дополнительные примеры, если та или иная конструкция вызывает затруднения у
учащихся. Часы самостоятельной работы учащиеся распределяют между получаемыми
заданиями самостоятельно. Общий объём выполняемой ими работы согласуется с
преподавателем, основываясь на их способностях.
7
Образовательные технологии
Использование проектора на лекционных занятиях позволяет не только демонстрировать
презентации, но также проводить живые сессии по работе с программными инструментами
дисциплины, при этом учащиеся могут задавать вопросы и получать немедленный ответ.
Лекции рекомендуется строить с учётом того, что значительную их часть будут составлять
ответы на вопросы учащихся.
Поскольку практические занятия используются для интерактивной проверки
самостоятельной работы учащихся, рекомендуется ограничить размер группы 15 учащимися.
Методические рекомендации преподавателю
Одной из основных проблем в освоении данной дисциплины является отсутствие
понимания учащимися семантического значения элементов программного кода и стоящих за
ними элементов более низких уровней. Это приводит к невозможности осуществления синтеза
новых решений и прямому копированию материалов примеров без понимания их сущности.
Чтобы избежать этой типичной проблемы, рекомендуется чётко определить все уровни
существования программы, начиная от абстрактной машины стандарта языка
программирования и заканчивая машинным кодом и сырым содержанием памяти ЭВМ.
Следует придерживаться это стиля рассмотрения «в глубину» при расширении знаний
учащихся введением новых языковых конструкций («в ширину»).
Очень важным является мотивация учащихся совершенствовать свои навыки помимо
минимума учебной программы. Для этого следует в первую очередь указывать на связь
7.1
9
Национальный исследовательский университет «Высшая школа экономики»
Программа дисциплины Языки программирования
для специальности 090301.65 «Компьютерная безопасность» подготовки специалиста
дисциплины с другими, входящими в учебный план, указывая возможные области применения.
При выборе заданий для домашней работы следует руководствоваться интересами учащихся.
Методические указания студентам
Основой получения успешных результатов по дисциплине является приобретение
значительного практического опыта в разработке программного обеспечения. Учащимся
предлагается самим находить применение своих навыков в решении задач по другим
дисциплинам учебной программы и в любой другой деятельности.
7.2
8
8.1
Оценочные средства для текущего контроля и аттестации студента
Тематика заданий текущего контроля
Пример задания на поиск ошибок для контрольной работы:
// A program to find the minimum and maximum
// in a list of integers in different ways.
#include "stdio.h"
#include <algorithm>
#include <list>
template<typename Container>
void process1(Container c)
{
using Item = Container::value_type;
Item lowest = std::numeric_limits<Item>::min();
Item highest = std::numeric_limits<Item>::max();
for(auto item:c) if(item<lowest) lowest = item;
else if(item>highest) highest = item;
printf("Lowest: %d, highest: %d\n",lowest,highest)
}
void process2(int* ptr,int count);
int main(void)
{
std::list<int> NUMBERS;
printf("Input integers: ");
int x;
while(scanf("%d",x));
NUMBERS.push_back(x);
process1(NUMBERS);
process2(&NUMBERS.front(),NUMBERS.size());
process3(NUMBERS);
return 1;
}
void process2(int* ptr,int count)
{
using namespace STD;
sort(ptr,ptr+count);
printf("Lowest: %d, highest: %d",ptr[0],ptr[count]);
}
void process3(const std::list<int>& NUMBERS)
{
auto res = std::minmax_element(NUMBERS.begin(),NUMBERS.end());
printf("Median: %d, mean: %d\n",res);
}
10
Национальный исследовательский университет «Высшая школа экономики»
Программа дисциплины Языки программирования
для специальности 090301.65 «Компьютерная безопасность» подготовки специалиста
Проект домашнего задания для каждого студента утверждается преподавателем в
индивидуальном порядке. Примерные задания:
 В текстовом файле содержится матрица целых чисел. Вывести в аналогичном виде
матрицу того же размера, с теми же элементами, расположенными по порядку от
одного из углов матрицы по спирали к центру. Имя файла, угол, направление спирали
(по/против часовой стрелки) и порядок (по возрастанию/убыванию) задаются
параметрами командной строки.
 Разработайте программу, практически оценивающую, являются ли те или иные форматы
файлов сжатыми. Типы файлов определяются расширением. Критерием того, что файл
является сжатым, является малое изменение его размера при повторном сжатии. Для
тестового сжатия файла используйте одну из сторонних библиотек. Программа
сканирует все файлы в заданном каталоге и собирает статистику по сжимаемости всех
встреченных типов файлов. Результаты представьте в виде текстового отчёта с
предположениями о характеристиках типов файлов.
 Реализуйте визуализатор сетевого траффика. Задача программы – в реальном времени
отображать графическое представление количества информации, передаваемое и
принимаемое данным компьютером по сети с разбиением по протоколам. Например,
две обновляемые в реальном времени круговые диаграммы (на приём и передачу),
каждый сектор которой – удельный объём относительно всего сетевого траффика,
используемый протоколом или группой протоколов (WWW/Почта/пиринговые
сети/служебный траффик/другое…) за последние 3 секунды. Возможно использование
любых визуальных представлений, использующих графику, при сохранении
наглядности. Для захвата сетевого траффика использовать библиотеку libpcap.
8.2




















Вопросы для оценки качества освоения дисциплины
Какова роль различных этапов обработки исходного текста программы транслятором
языка C?
Объясните принцип одного определения.
Приведите примеры синтаксически корректных выражений, дающих неопределённый
результат.
Какова связь операторов перехода и понятий структурного программирования?
Опишите основные элементы различия разных соглашений о вызовах.
В чём отличие реализации на уровне машинного кода массивов переменной длины и
обычных?
Опишите семантическую разницу владеющих и невладеющих указателей и их применение
с различными классами памяти.
Перечислите преимущества и недостатки текстовой и двоичной сериализации данных.
Объясните разницу между обычными и широкими символами.
Опишите механизм использования материалов на языке C в программах на C++.
Как ссылки влияют на время жизни объектов?
Дайте определение и мотивацию применения декорированных имён.
Приведите пример необходимости использования хвостового возвращаемого типа.
Для чего используются анонимные пространства имён?
Как связаны уровни доступа при объявлении членов класса и наследовании?
С какого момента объект считается сконструированным и в чём роль данного
определения?
Какие элементы входят в понятие интерфейса класса?
Каковы механизм и роль семантики переноса?
Что такое абстрактный базовый класс и в чём его отличие от интерфейса?
Каковы ограничения приведения типов при использовании множественного
наследования?
11
Национальный исследовательский университет «Высшая школа экономики»
Программа дисциплины Языки программирования
для специальности 090301.65 «Компьютерная безопасность» подготовки специалиста






Чем операции new/delete отличаются от функций malloc/free?
Каковы основные механизмы реализации обработки исключений?
Что такое частичная специализация и к каким типам шаблонов она применима?
Какие преимущества имеет унифицированная инициализация?
Сравните концепции, уточнения и модели с понятиями ООП.
Перечислите основные структуры данных, реализуемые стандартной библиотекой
шаблонов, и наиболее эффективно реализуемые ими операции.
Как выражаются отношения владения ресурсами с применением интеллектуальных
указателей?
Для чего применяют средства метапрограммирования?
Определите роли и функции основных классов паттернов проектирования.
Что такое двоичная совместимость и совместимость по исходному тексту?
Какие паттерны проектирования используются в основных конструкциях интерфейсов,
управляемых событиями?
В чём состоит преимущество механизма сигналов/слотов по сравнению с обычными
функторами?
Как соотносится наблюдаемое время жизни виджетов с временем жизни соответствующих
им объектов?
Для чего необходимо применение потоков в приложения с графическим интерфейсом?
Чем сетевой ввод/вывод отличается от файлового?
Чем отличается понятие переменной в языках со статической и динамической
типизацией?
В чём состоит ленивая модель исполнения?
Каковы альтернативы отсутствующей в языке Python перегрузке функций?
Каков порядок поиска методов при множественном наследовании?
Каковы основные способы использования языка Python вместе с другими?














Примеры заданий промежуточного /итогового контроля
На промежуточном и итоговом контроле могут использоваться любые вопросы для
оценки качества освоения дисциплины, задания, аналогичные контрольным работам и вопросы
по проектам домашнего задания.
8.3
9
Учебно-методическое и информационное обеспечение дисциплины
Базовый учебник
Прата. С. Язык программирования C++. Лекции и упражнения. М. Вильямс, 2013, 6-е
издание.
9.1
Основная литература
Прата. С. Язык программирования C. Лекции и упражнения. М. Вильямс, 2013, 5-е
издание.
Шлее М. Qt 4.8. Профессиональное программирование на C++. СПб. БХВ-Петербург,
2012.
Лутц М. Программирование на Python. Символ-плюс, 2013, 4-е издание, в 2 томах.
9.2
9.3
Дополнительная литература
Подбельский В.В., Фомин С.С. Курс программирования на языке Си. М. ДМК Пресс,
2013.
Подбельский В.В. Стандартный C++. М. Финансы и статистика, 2008.
Страуструп Б. Язык программирования C++: специальное издание. М. Бином, 2012.
12
Национальный исследовательский университет «Высшая школа экономики»
Программа дисциплины Языки программирования
для специальности 090301.65 «Компьютерная безопасность» подготовки специалиста
K. N. King (2008). C programming. A modern approach. W. W. Norton & Company, Second
Edition.
Столяров А. В. Программирование на языке ассемблера NASM для ОС UNIX. Учебное
пособие. М. МАКС Пресс, 2011. http://www.stolyarov.info/books/asm_unix
Кнут Д.Э. Искусство программирования. Том 1. Основные алгоритмы. М. Вильямс, 2012,
третье издание.
Александреску А. Современное проектирование на C++. М. Вильямс, 2002.
9.4
Справочники, словари, энциклопедии
http://cppreference.com – С & C++ reference
http://qt-project.org/doc/ – Qt project documentation
http://docs.python.org/3 – Python 3 documentation
Программные средства
Для успешного освоения дисциплины, студент использует следующие программные
средства:
 Компиляторы языков C стандарта не ниже C99 и C++ стандарта не ниже С++11
(рекомендуется GNU compiler collection), интерпретатор (или другое средство
выполнения) языка Python версии 3 (рекомендуется CPython);
 Интегрированная среда разработки (рекомендуется Qt Creator);
 Дополнительные инструменты разработки (отладчики, системы сборки,…) в
зависимости от используемых инструментов;
 Различные сторонние библиотеки, зависящие от заданий, выполняемых студентом
(Qt SDK,…).
Для всех средств рекомендуется использование самых новых версий.
9.5
9.6
Дистанционная поддержка дисциплины
Дистанционная поддержка дисциплины не предусмотрена.
10 Материально-техническое обеспечение дисциплины
Для проведения занятий по дисциплине необходимо презентационное оборудование
(ПК, проектор, экран).
Для проведения практических занятий необходимо наличие компьютерного класса,
оборудованного ПК из расчёта одно рабочее место на обучаемого. На данных ПК требуется
наличие соответствующих прав доступа для установки ПО, перечисленного в п. 9.5. Для
упрощения работы с материалами желательно наличие доступа к внешним носителям. Для
упрощения доступа к справочным материалам желательно наличия доступа к сети Интернет
13
Related documents
Download