Факультативный спецкурс «Программирование на С++»
Дедов Антон adedov@swsoft.com
Дмитрий Иртегов fat@nsu.ru
-
-
Ознакомление с культурой и принятыми практиками программирования в сообществе C++, знакомство с современным состоянием языка.
-
Мотивация слушателя к самостоятельному изучению предмета, овладению новыми техниками и углубление понимания с целью получения опыта создания более качественного и безопасного кода.
-
Формирование сознательного отношения к использованию тех или иных средств языка, а не изучение «крутых» трюков.
Основные темы:
-
проектирование классов;
-
использование стандартной библиотеки и ее признанных расширений;
-
использование дизайна, который учитывает безопасность исключений.
Содержание курса
Курс условно разбит на несколько модулей. Каждый модуль логически объединяет смежные темы.
Список модулей:
-
Введение в язык
-
Объектно-ориентированное программирование на C++
-
Исключения
-
Шаблоны
-
Введение в стандартную библиотеку C++
Модули естественным образом разбиваются на части, минимальная единица – лекция. Лекции разных модулей могут перемежаться с целью установления последовательности изложения материала в виде доступном для понимания. Т.е. начитанного материала должно хватать для «усвоения» каждой последующей лекции.
Введение в язык Лекция 1
Длительность: 2часа
-
Назначение языка и краткая история, основные возможности.
-
Объявления и определения.
-
Встроенные типы данных. Переменные; квалификаторы const.
-
Выражения, операторы и управляющие структуры.
-
Указатели. Массивы. Строковые литералы. Ссылки.
-
Области видимости переменных.
-
Структуры как средство группирования данных.
-
Функции. Объявление и определение. Аргументы и возвращаемые значения. Аргументы по умолчанию. Указатели на функцию.
-
Перегрузка функций и операторов. Разрешение имен функций при перегрузке.
-
Структура программы. Понятие единицы трансляции. Понятие о правиле одного определения.
Лекция 2
Длительность: 2часа
-
Классы как абстрактные типы данных.
-
Члены класса.
Ограничения доступа как средство для поддержки инкапсуляции. Дружба.
-
Объекты. Определение переменных-объектов.
-
Конструкторы и деструкторы классов. Порядок инициализации и уничтожения членов.
-
Способы размещения объектов в памяти: автоматический, динамический, статический.
-
Динамическая память. Операторы new, delete, delete[].
-
Генерируемые компилятором определения членов классов.
-
Использование объектов: вызов методов, передача объекта в качестве параметра функции. Понятие временного объекта.
-
Передача объектов по значению и по ссылке.
Лекция 3
Длительность: 1час, как и все последующие лекции.
-
Пространства имен.
Пространства имен как область видимости. Открытость пространств имен. Безымянные пространства имен. Квалификаторы using. Fully specified name.
-
Поиск и разрешение имен. Поиск Кёнинга.
-
Иерархии классов.
Уровни доступа наследования. Иерархии is-a, и реализован посредством. Агрегирование как альтернатива наследованию.
-
Конструкторы и деструкторы.
Порядок инициализации классов предков. Порядок вызовов деструкторов. Виртуальные деструкторы.
-
Виртуальные функции. Абстрактные классы.
-
Различие между перегрузкой, замещением и сокрытием функций.
-
Введение в множественное наследование.
Исключения (часть I) Лекция 1 -
Назначение механизма исключений.
-
Группировка исключений.
-
Поимка исключений, порядок. Поимка по константной ссылке. Re-throw.
-
Ресурсы и исключения.
Исключения в конструкторах. Использование std::auto_ptr и boost::shared_ptr. Идиома RAII.
-
Исключения и деструкторы.
-
Лекция 1 -
Основные принципы ООП. (?)
-
Проектирование классов для разного назначения: объекты-значения, базовые классы, классы исключений, шаблоны классов и т.п.
-
Open-Close Principle как одна из целей объектно-ориентированной архитектуры.
-
Принцип подстановки Лисковой.
Лекция 2 -
Принцип интерфейса.
Какие функции составляют интерфейс класса. Какие функции должны быть членами класса, какие нет.
-
Использование абстрактных классов.
Делайте нетерминальные классы абстрактными. Dependency Inversion Principle. Interface Segregation Principle.
-
Инкапсуляция и проектирование интерфейса.
Классы обладающие поведением должны скрывать данные. Смешивание открытых и закрытых членов вредно.
-
Паттерн невиртуального интерфейса (NVI pattern).
Лекция 3 -
Вопросы перегрузки операторов:
-
Перегрузка new, delete.
-
Перегрузка операторов ++, ->, [] и т.п.
-
Перегрузка операторов +, >>, <<.
-
Какие операторы не рекомендуется перегружать.
-
Вложенные классы.
-
Идиома Pimpl.
-
Паттерн Proxy.
Шаблоны (часть I) Лекция 1 -
Понятие шаблона. Инстанцирование.
-
Шаблонные функции. Перегрузка.
-
Шаблоны классов.
-
Шаблоны членов классов.
Стандартная библиотека (часть I) Лекция 1 -
Обзор и организация стандартной библиотеки.
-
Использование строк.
-
Контейнеры. Типы контейнеров.
Последовательности, ассоциативные контейнеры, адаптеры контейнеров. Требования к стандартным контейнерам.
-
Потоки (введение).
Шаблоны (часть II) Лекция 2 -
Специализация шаблонов классов.
-
Частичная специализация шаблонов классов и шаблонов функций.
-
Использование шаблонов. Классы свойств. Паттерн стратегия.
Исключения (часть II) Лекция 1 -
Гарантии безопасности исключений (гарантии Абрамса).
-
Разработка кода безопасного с точки зрения исключений.
-
Стратегии обработки ошибок и исключительных ситуаций.
-
Список литературы составлен в алфавитном порядке.
-
Андрей Александреску. Современное проектирование на С++. Обобщенное программирование и прикладные шаблоны проектирования. // 2002
-
Гради Буч. Объектно-ориентированный анализ и проектирование. С примерами приложений на C++. // 2000
-
Дэвид Вандевурд, Николаи М. Джосаттис. Шаблоны C++. Справочник разработчика. // 2003
-
Эрих Гамма, Ричард Хелм, Ральф Джонсон, Джон Влиссидес. Приемы объектно-ориентированного проектирования. Паттерны проектирования. // 2001
-
Скотт Майерс. Эффективное использование C++. 50 рекомендаций по улучшению ваших программ и проектов. // 2000
-
Скотт Майерс. Наиболее эффективное использование C++. 35 новых рекомендаций по улучшению ваших программ и проектов. // 2000
-
Скотт Майерс. Эффективное использование STL. // 2002
-
Герб Саттер. Решение сложных задач на C++. // 2002
-
Герб Саттер. Новые сложные задачи на C++: 40 новых головоломных примеров с решениями. // 2005
-
Герб Саттер и Андрей Александреску. Стандарты программирования на C++: 101 правило и рекомендация. // 2005
-
Бьерн Страуструп. Язык программирования C++. // 2001
-
Бьерн Страуструп. Дизайн и эволюция языка C++. // 2000
-
ISO/IEC 14882:1998(E), Programming Languages – C++ (ISO and ANSI C++ standard).
-
Robert C. Martin. Design Principles and Design Patterns. // objectmentor.com 2000
Полезные ссылки -
http://public.research.att.com/~bs/ Bjarne Stroustrup's homepage.
-
http://www.boost.org Boost libraries.
-
http://www.gotw.ca/gotw Herb Sutter. Guru of the Week.
-
http://objectmentor.com Object Mentor, Inc.
-
http://rsdn.ru Russian Software Development Network.
-
http://ooad.asf.ru Объектно-ориентированный анализ и проектирование.
Достарыңызбен бөлісу: |