ПРОГРАММА
курса «Информационные технологии и языки программирования» Цели и задачи курса.
Дисциплина «Основы программирования на языке C++» предназначена для студентов-биологов 4-го курса, специализирующихся по биоинформатике.
Основной целью освоения дисциплины является ознакомление студентов с современными методами программирования, приобретение студентами базовых навыков программирования, а также ознакомление студентов с объектно-ориентированным подходом в программировании и других областях.
Для достижения поставленной цели выделяются задачи курса:
дать обзор истории развития программирования
ознакомить с основными концепциями современного программирования
ознакомить с синтаксисом и семантикой языка C++
ознакомить с базовыми концепциями объектно-ориентированной методологии
По окончании изучения указанной дисциплины студент должен
иметь представление о современных методах программирования и некоторых методах проектирования программных продуктов
знать синтаксис и семантику языка C++
уметь проектировать и реализовывать несложные программы на языке C++
^ Итоговый контроль. Зачет
Текущий контроль. Сдача промежуточных заданий (программ). Содержание дисциплины.
Аналогичные курсы проводятся во многих вузах, однако, они обычно ориентированы на студентов, у которых основной специальностью является информатика. Этот курс адаптирован для студентов-биологов, но не в ущерб его содержательности. При подготовке курса использовался опыт проведения аналогичных курсов на отделении информатики физического факультета НГУ и факультета информационных технологий НГУ. Тематический план курса ( распределение часов).
Наименование разделов и тем
| К о л и ч е с т в о ч а с о в
| Лекции
| Семинары
| Лабораторные работы
| Самостоятельная работа
| Всего часов
| ^
| 3
| 2
|
|
| 5
| ^
| 1
| 2
|
|
| 3
| Структурное программирование
| 2
| 4
|
|
| 6
| ^
| 1
|
|
|
| 1
| ^
| 1
|
|
|
| 1
| ^
| 2
| 4
|
|
| 6
| ^
| 2
| 4
|
|
| 6
| ^
| 1
|
|
|
| 1
| Стандартная библиотека ввода-вывода в стиле C++. Стандартная библиотека шаблонов. Обзор других средств языка C++
| 3
|
|
|
| 3
| Итого по курсу:
| 16
| 16
|
|
| 32
|
^ .
Введение. История создания и развития языков C/C++. Пример простейшей программы на языке C++.
Базовый синтаксис языка С++. Запись констант и имен. Комментарии. Стандартные типы данных. Основные операторы. Циклы, ветвления и другие управляющие структуры.
^ Одномерные массивы. Указатели. Операции с указателями. Связь массивов и указателей. Динамическое управление памятью (операторы new, delete). Строки в стиле языка C. Способы представления многомерных массивов в языке C++.
Ссылки.
Константные переменные.
Процедурное программирование. Основные концепции процедурного программирования. Понятие функции. Формальные и фактические параметры. Способы передачи параметров функции. Константные параметры. Прототипы функции. Заголовочные файлы. Понятие раздельной компиляции. Указатели на функции.
^ Основные концепции структурного программирования. Понятие производных типов данных. Структуры. Обращение к полям структур. Передача структур в качестве параметров функций.
^ Основные области памяти (стэк, куча, область статических данных), их структура и назначение.
Области видимости и существования. Локальные и глобальные имена. Динамические и статические переменные.
Препроцессор языка C++. Основные директивы препроцессора. Подключение и оформление заголовочных файлов.
Трансляции программ на С++. Основные стадии трансляции программ (обработка препроцессором, компиляция компоновка). Библиотеки. Реализация собственных библиотек. Понятие динамической библиотеки.
^ Библиотека ввода-вывода. Понятие потока. Библиотека работы со строками.
Основные концепции объектно-ориентированного программирования. Понятие объекта и класса. Понятие абстракции. Отношения между классами и объектами.
^ Методы и атрибуты классов. Инкапсуляция, модификаторы доступа. Конструкторы и деструкторы. Перегрузка основных операторов. Конструкторы копии, операторы присваивания. Статические атрибуты и методы классов.
Наследование. Иерархии классов, отношение генерализации. Наследование, как метод реализации иерархий классов. Особенности инстанциирования иерархий классов.
^ Понятие полиморфизма. Принцип подстановки Лисковой. Виртуальные методы классов. Таблицы виртуальных функций. Виртуальные деструкторы. Абстрактные классы и методы. Понятие интерфейса и его реализация в C++. Принцип разделения интерфейов.
^ Параметризация классов и функций типами. Шаблоны функций. Понятие метакласса. Шаблоны классов. Специализация шаблонов. Особенности Компиляции шаблонов.
Стандартная библиотека ввода-вывода в стиле C++. Иерархия стандартных классов потоков. Перегрузка операторов вывода в поток. Манипуляторы потоков.
Стандартная библиотека шаблонов. Списки и массивы. Понятие итератора. Операции со списками и массивами. Строки, операции со строками. Строковые потоки. Ассоциативные массивы и множества.
Обзор других средств языка C++. Механизм RTTI, приведение типов. Пространства имен. Исключения.
Перечень примерных заданий.
Реализовать классы векторов и матриц. Для простоты можно ограничиться трехмерными векторами и матрицами 3x3. Должны быть реализованы конструкторы, конструкторы копии, деструкторы, cравнения, присваивания (+, +=, -=, *= для матриц), основные арифметические операции в виде операторов (сложение, вычитание, произведение). Также для обоих классов необходимо перегрузить operator []. Для каждого класса должен быть свой заголовочный файл и объектный модуль.
Реализовать иерархию классов, представленную на диаграмме. Класс Base2 является абстрактным, остальные - нет. (необходимые поля и методы добавить самомтоятельно) Продемонстрировать порядок вызова конструкторов и деструкторов. Конструкторы виртуальных или невиртуальных базовых классов вызываются в первую очередь? Продемонстрировать различие между невиртуальными и виртуальными методами. Продемонстрировать различие между невиртуальными и виртуальными базовыми классами. Добиться вызова абстрактного метода.
Образцы вопросов для подготовки к зачету.
Условные переходы: конструкции if и switch.
Циклы for, while, do-while. Управление циклами.
Строки. Работа со строками.
Массивы и указатели. Операции с указателями.
Управление памятью. Динамические массивы.
Многомерные массивы. Способы представления многомерных массивов.
Функция main: точка входа в программу. Аргументы командной строки.
Операции ввода-вывода.
Работа с файлами.
Процедурное программирование. Функции. Прототипы.
Способы передачи параметров в функции.
Области видимости и существования имен.
Модель памяти.
Структурное программирование. Структуры. Операции над структурами.
Контейнеры данных. Способы реализации.
Ссылки. Применение.
Модификатор const. const в параметрах функции.
Использование модификатора const со ссылками и указателями.
Деревья. Способы реализации.
Рекурсия. Примеры рекурсивных алгоритмов.
Указатели на функции. Примеры использования.
Трансляция программ. Заголовочные файлы.
Понятие объекта и класса. Реализация в C++.
Конструкторы и деструкторы. Перегрузка операторов.
Наследование. Принцип подстановки Лисковой.
Динамический полиморфизм. Виртуальные методы.
Абстрактные классы. Интерфейсы. Принцип разделения интерфейсов.
Множественное наследование. Ромбовидные иерархии классов.
Шаблонный полиморфизм. Параметризованные функции и классы.
Список основной и дополнительной литературы.
Б. Страуструп. «Язык программирования C++». 3-е издание.
Г. Буч. «Объектно-ориентированный анализ и проектирование». 2-е издание.
Программу составил сотрудник лаборатории теоретической генетики Института цитологии и генетики СО РАН Подколодный Николай Леонтьевич |