ПРОГРАММА
учебного курса ММФ НГУ
«Программирование II»
лектор Павел Геннадьевич Емельянов
к.ф.-м.н., доцент кафедры программирования НГУ
Аннотация курса
Курс «Программирование II» ставит своей целью знакомство студентов с
концептуальными понятиями, связанными с разработкой ПО, такими как разработка
больших программных проектов, информационные хранилища и человеко-машинные интерфейсы, а также овладение базовыми практическими навыками объектноориентированного программирования на примере языка С++.
В первой части, данный курс знакомит студентов, обладающих представлением о процедурной парадигме и языке С, с понятиями объектно-ориентированного программирования и проектирования. Значительное внимание уделяется эффективной практике разработки программного обеспечения с акцентом на такие аспекты, как проектирование, декомпозиция, инкапсуляция, наследование, обобщенное программирование и повторное использование программного обеспечения. Важным шагом в обучении хорошего разработчика программного обеспечения является переход от «программирования-в-малом» к «программированию-в-большом» (больших программных проектах). В практической части курса даются навыки использования при создании больших систем ряда возможностей, предоставляемых типичным объектноориентированным языком.
С переходом к большим системам качество пользовательского интерфейса становится критическим, так как интерфейс сильно влияет на удобство использования ПО. Излагая принципы проектирования объектов, курс также знакомит слушателей с вопросами программной инженерии, с основами человеко-машинного интерфейса.
Практические занятия проводятся с использованием соответствующих программных средств.
Современные программные комплексы содержат в качестве обязательной компоненты систему хранения и обработки информации. Задача структуризации больших объемов информации потенциально различных видов представляется очень сложной. В курсе обсуждает проблемы, возникающие при управлении сложной информацией, а также методы хранения информации для упрощения поиска, сохраняющие естественную концептуальную структуру.
Темы лекций 1. Введение в объектно-ориентированное программирование 1.1. Недостатки С. Задачи, которые хотелось бы решить при создании нового языка;
технологические предпосылки. Краткая история С++. Что является С и не является С++. Логический тип bool. Константы. Указатели и константы. Ссылки.
1.2. Инкапсуляция данных. Концепция класса. Объекты (экземпляры) класса. Доступ к частям класса. Статические части класса.
1.3. Конструкторы в С++. Конструирование объектов класса. Конструктор по умолчанию. Копирующий конструктор.
1.4. Перегрузка имен функций. Разрешение конфликтов. Переопределение операторов.
Оператор присваивания по умолчанию. Переопределение оператора присваивания.
«Плохой» оператор присваивания.
1.5. Области видимости в С++. Друзья класса. Пространства имен. Стандартное пространство имен. Применение при проектировании и перепроектировании программных систем.
1.6. Исключения в С++. Предпосылки появления. Порядок обработки исключений.
Исключения в конструкторах и деструкторах. Спецификация исключений.
Стандартные исключения. Исключения как стиль программирования.
Использования исключения для «техники обратных вызовов».
1.7. Обобщенное программирование. Шаблоны-функции. Шаблоны классов.
Библиотека STL. Основные принципы построения. Вопросы эффективности.
Примеры.
1.8. Наследование в С++. Базовые и производные классы. Виртуальные методы.
Абстрактные методы и классы. Реализация.
1.9. Множественное наследование. Конструирование объектов при множественном наследовании. Применение наследования при проектировании программных систем.
1.10. ООП вне С++. Виртуальная машина и управляемая куча на примере MS CLR.
Алгоритмы размещения и компактификации объектов в куче. Языковые средства в С++/CLI для работы с управляемой кучей: ref-описатели, gcnew, внутренние и пришпиленные указатели.
1.11. Другие новые средства С++/CLI. Анализ причин появления.
2. Интерфесы программ 2.1. Аспекты взаимодействия человека и машины. Классификация управляющих средств пользовательских интерфейсов. Стандарты на пользовательские интерфейсы. Интерфейсный стиль. Методика оценки пользовательских интерфейсов.
2.2. Основные элементы управления в графических интерфейсах. Практические аспекты реализации пользовательских интерфейсов.
2.3. Системные сообщения. Цикл обработки сообщений. Событийное программирование. Основные типы событий для элементов управления.
Обработчики событий.
3. Модели данных на примере XML 3.1. Требования к хранилищам данных. Файловая система: достоинства и недостатки.
Стандарт XML. Иерархическая организация данных.
3.2. Схема данных XML на примере DTD. Основные типы ограничений для элементов и атрибутов. Определение сущностей. Контроль ограничений схемы данных XMLпроцессором.
3.3. Язык запросов Xpath. Пути, оси, тесты для узлов, функции-манипуляторы.
Эффективность запросов.
3.4. XML DOM. Основные интерфейсы. MSXML API. Примеры.
Учебно-методическое и информационное обеспечение дисциплины а) Основная литература:
1. Буч Г. Объектно-ориентированный анализ и проектирование с примерами приложений на C++. Второе издание. – М.: Бином, 1999.
2. Гарсиа-Молина Г., Ульман Дж.Д., Уидом Д. Системы баз данных. Полный курс. – М.: Издательский дом «Вильямс», 2003.
3. Джосьютис Н. C++ Стандартная библиотека. Для профессионалов. – СПб.:
4. Мандел Т. Разработка пользовательского интерфейса. – М.: ДМК Пресс, 5. Себеста Р.В. Основные концепции языков программирования. 5-е издание. – М.:
Издательский дом «Вильямс», 2001.
6. Скопин И.Н. Понятия и модели жизненного цикла программного обеспечения.
Учебное пособие. – Новосибирск: Изд-во НГУ, 2003.
7. Страуструп Б. Дизайн и эволюция С++. – СПб.: Питер, 2006.
8. Страуструп Б. Язык программирования С++. Третье издание. – М.: ДМК 9. Торрес Р.Дж. Практическое руководство по проектированию и разработке пользовательского интерфейса. – М.: Издательский дом «Вильямс», 2002.
б) Дополнительная литература:
1. Калинин А.Г., Мацкевич И.В. Универсальные языки программирования.
Семантический подход. – М.: Радио и связь, 1991.
2. Проектирование пользовательского интерфейса на персональных компьютерах. Стандарт фирмы IBM. – Вильнюс: DBS Ltd, 1992.
3. Фатрелл Р.Т., Шафер Д.Ф., Шафер Л.И. Управление программными проектами: достижение оптимального качества при минимуме затрат. – М.: Издательский дом «Вильямс», 2003.
в) Программное обеспечение и Интернет-ресурсы:
http://www.iis.nsk.su/edu/progr_2.shtml.
http://www.intuit.ru.
http://developer.apple.com/techpubs/mac/HIGuidelines.
4. Microsoft Official Guidelines for User Interface Developers and Designers.
Microsoft. – url: http://msdn.microsoft.com/library/default.asp.
5. Технологии XML. World Wide Web Consortium. – url: http://www.w3.org.