Правительство Российской Федерации Государственное образовательное бюджетное учреждение высшего профессионального образования ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ВЫСШАЯ ШКОЛА ЭКОНОМИКИ ПЕРМСКИЙ ФИЛИАЛ Программа дисциплины Объектно-ориентированный анализ и программирование для направления 080700.62 «Бизнес-информатика» Утверждена Одобрена на заседании кафедры Учебно-методическим Советом ПФ ГУ-ВШЭ Информационные технологии в бизнесе Председатель ____________________Г.Е. Володина Зав.кафедрой «_______» ______________________20___ г. ______ Т.А. Казаченко «_______» ___________________20___ г. Пермь 2010 год Обязательный минимум содержания дисциплины по ГОС (для дисциплин Федерального компонента). Цикл разработки программного обеспечения (ПО), назначение и содержание этапов. Роль анализа в процессе разработки программного обеспечения. Основные понятия объектно-ориентированного анализа. Классы и объекты. Идентификация, описание объектов и их поведения. Отношения, основные типы отношений. Язык UML. Основные средства анализа и моделирования предметной области в языке UML. Объектно-ориентированная методология программирования. Абстракция данных, наследование и полиморфизм. Объектно-ориентированные языки. Шаблоны. Библиотека стандартных шаблонов. Инструментальные средства объектно-ориентированного программирования. Объектный подход к разработке ПО для распределенных систем. I. II. Пояснительная записка 1. Автор программы: к.т.н., О.Л. Викентьева 2. Требования к студентам: Для успешного изучения данного курса студенты должны владеть основными знаниями и навыками, полученными при изучении курса «Информатика и программирование»: знать базовые понятия программирования, его математические основы; получить представление об основах алгоритмизации; освоить операторы языка программирования высокого уровня; освоить способы работы с основными структурами данных; получить понятие о структурном и объектноориентированном подходах программирования. 3. Аннотация: Дисциплина предназначена для студентов второго курса направления 080500.62 Бизнес – информатики. Целью курса является сформировать у студентов объектно-ориентированное мышление, научить их объектно-ориентированному (OO) подходу к анализу предметной области и использованию объектно-ориентированной методологии программирования при разработке программных продуктов. Объектная методология предлагает рассматривать предметную область и проектировать программную систему как совокупность взаимодействующих друг с другом объектов. Программа курса предполагает проведение лекционных и практических занятий, а также самостоятельную работу студентов при выполнении практических занятий в компьютерном классе. Лекционный курс охватывает основные вопросы ОО методологии: основные принципы (инкапсуляция, наследование, полиморфизм), основные этапы ОО проектирования, понятие класса и экземпляра (объекта) класса, отношения между классами и объектами и способы записи этих отношений с помощью языка ОО моделирования UML, использование шаблонов классов, использование библиотеки STL, обработку исключительных ситуаций. Обязательное программное обеспечение, используемое при изучении данного курса: MS Visual Studio 2008/2010, MS Visio. 4. Учебная задача курса: В результате изучения курса студент должен: Знать методы обработки и способы реализации основных структур данных в объектно-ориентированных программных средах; Уметь разрабатывать объектно-ориентированные программы в современных инструментальных средах. Иметь представление о теоретических основах объектно-ориентированного анализа, проектирования и программирования, об абстракциях основных структур данных (списки, деревья, множества и так далее). Обладать навыками работы в средах объектно-ориентированного программирования (составление, отладка и тестирование программ). 2 5. Формы контроля: текущий контроль: - контроль качества подготовки к занятиям (контроль усвоения теоретического материала, контроль выполнения заданий на самостоятельную работу); - контроль выполнения заданий на практических занятиях (результаты работы студента на каждом занятии заносятся на внешний носитель и предъявляются преподавателю); - контрольная работа, домашнее задание. итоговый контроль: экзамен в форме контрольной работы. итоговая оценка складывается из результатов, полученных в ходе текущих контрольных мероприятий, оценки работы на практических занятиях и оценки, полученной при проведении зачета в соответствии с положением о рейтинге. III. Содержание программы. Раздел I. ОО анализ и проектирование.Язык UML. Тема 1. Введение. Программирование – как фундаментальный метод реализации моделей на компьютере. История возникновения и развития языков процедурного программирования. Понятие алгоритма и исполнителя. Язык процедурного программирования. Основные типы и структуры данных и операторы. Дисциплина программирования, структурный подход к программированию. Возникновение объектно–ориентированного программирования. Тема 2. Объектно-ориентированный анализ и проектирование. Понятие об объектном моделировании (ОМ). Абстрагирование объектов в ООА. Объектно-ориентированный анализ (ООА). Цели ООА. Цикл разработки программного обеспечения (ПО), назначение и содержание этапов. Роль анализа в процессе разработки программного обеспечения. Основные понятия объектно-ориентированного анализа. Атрибуты, их типы и представление при ОМ. Отношения, основные типы отношений. Язык UML. Основные средства анализа и моделирования предметной области в языке UML. Инструментальные средства объектно-ориентированного проектирования и программирования. Раздел II. Основные свойства ООП Тема 3. Объектно-ориентированное программирование и его реализация в языках программирования. Объект. Классы и методы. Инкапсуляция и полиморфизм. Процедуры и функции как способ реализация методов. Наследование и иерархия объектов. Формы наследования. Следствия наследования. Использование рабочих продуктов объектно-ориентированного анализа на этапе проектирования. Сообщения, экземпляры и инициализация. Механизмы передачи и обработки сообщений в объектно-ориентированных средах. Параметры и данные, переносимые сообщениями. Связывание методов и сообщения. Проблема обращения полиморфизма. Разновидности полиморфизма. Статическое и динамическое связывание. Видимость и зависимость на уровне классов и объектов. Конструирование программ на основе иерархии объектов. Раздел III. Обобщенное программирование. Применение библиотек. Тема 4. Реализация абстракций данных методами объектно–ориентированного программирования. Абстрактные типы и структуры данных. Объявление объекта. Реализация объекта. Конструктор и деструктор. Создание объекта. Объекты и динамическая память. Связные списки. Стеки. Очереди. Деревья. Графы. 3 Тема 5. Объектно-событийное и объектно-ориентированное программирование. Событие и сообщение. Кодирование сообщений и механизмы реализации обмена сообщениями в операционной среде. Программирование, управляемое событиями. Природа событий. Виды событий. События от мыши. События от клавиатуры. События и команды. Передача сообщений: позиционирование сообщений, активные сообщения, общие сообщения, сообщения, определенные пользователем, маскировка сообщений. Обработка исключительных ситуаций. Тема 6. Применение библиотек и иерархий объектов при программировании. Потоки. Установка потока. Чтение и запись потока. Вывод в поток. Ввод из потока. Удаление потока. Использование объектов с потоком. Механизм потоков. Процедуры обмена информации в потоках. Основные концепции STL. Последовательные и ассоциативные контейнеры. Итераторы STL. Общие свойства контейнеров. Использование последовательных контейнеров. Адаптеры контейнеров. Алгоритмы. . IV. Учебно-методическое обеспечение дисциплины: 1. Литература: Базовый учебник Павловская Т.А. С/С++ Программирование на языке высокого уровня. – СПБ.: Питер, 2009. – 461 с.: ил. Основная 1. Пышкин Е.В. Основные концепции и механизмы ООП. - СПб.; БХВ - Петербург, 2005 – 640 с.: ил. 2. Лаптев В.В., Морозов А.В., Бокова А.В. С++. Объектно-ориентированное программирование. Задачи и упражнения. – СПб.: Питер, 2007. – 288с.: ил. Дополнительная 1. Г. Буч Объектно-ориентированный анализ и проектирование с примерами приложений на С++. – М.: «Издательство Бином», СПб, 2001 г, 560с. 2. Павловская Т.А., Щупак Ю.А. С++. Объектно-ориентированное программирование: Практикум, - СПб.: Питер, 2008. – 265 с.: ил. 3. Хорев П.Б. Технологии ООП. – М.: Академия, 2008. – 448 с. 2. Тематика заданий по различным формам текущего контроля: Приложение 1. Вопросы для подготовки к контрольной работе. Приложение 2. Тематика домашнего задания. Приложение 3. Вопросы для самоконтроля. 3. Методические рекомендации (материалы) преподавателю: Изучение дисциплин направлено на получение студентами теоретических знаний и практических навыков в анализе предметной области и программировании на основе объектно-ориентированного подхода. Дисциплина изучается на лекциях и практических занятиях. На лекциях рассматриваются основополагающие теоретические вопросы ОО анализа и реализации ОО моделей с помощью языка С++. Практические занятия по дисциплине проводятся в компьютерном классе в следующих средах: Microsoft Visual Studio 2008 (2010) ; MS Visio . На практических занятиях необходимо кратко разъяснить студентам основные положения, раскрывающие тему; затем предложить студентам реализовать соответствующие 4 программные продукты и выполнить их анализ. Часть программ реализуются и анализируются во внеаудиторное время. В процессе самостоятельной работы студенты отрабатывают теоретические положения, изложенные на лекциях, и выполняют программную реализацию примеров, рассмотренных на практических занятиях. В ходе самостоятельной работы студенты выполняют контрольные домашние задания. Задания носят индивидуальный характер. На каждое контрольное домашнее задание выносится несколько задач в зависимости от сложности темы. 4. Методические указания студентам: содержатся в используемой при проведении курса литературе, изданной сотрудниками кафедры Информационных технологий в бизнесе Пермского филиала ГУ ВШЭ. Учебно-методические разработки ко всем видам практических занятий опубликованы с локальной сети университета и могут использоваться студентами как при подготовке к занятию, так и в ходе занятия Рекомендации по использованию информационных технологий. Все практические и лабораторные занятия проводятся в компьютерном классе. Программное обеспечение сети должно поддерживать новые информационные технологии и включать в себя следующие комплексы: Microsoft Visual Studio 2008 (2010) ; MS Visio . Автор программы __________________________ к.т.н. Викентьева О.Л. 5 V. Тематический расчет часов Аудиторные часы Семинарские № Наименование разделов и тем или п/п Лекции Всего практические занятия Раздел I. ОО анализ и проектирование.Язык UML. 1. Введение. 2 2 2. Объектно-ориентированный анализ и проектирование. 6 4 10 Раздел II. Основные свойства ООП 3. Объектно-ориентированное программирование и его 4 10 14 реализация в языках программирования. Раздел III. Обобщенное программирование. Применение библиотек. 4. Реализация абстракций данных методами объектноориентированного 4 6 10 программирования. 5. Объектно-событийное и объектно-ориентированное программирование 6. Применение библиотек и иерархий объектов при программировании Всего: Самостоят. работа Всего часов 1 3 7 17 10 24 12 22 4 6 10 10 20 4 6 10 12 22 24 32 56 52 108 Автор программы ___________________________________к.т.н. О.Л. Викентьева 6 Приложение 1 Вопросы для подготовки к контрольной работе 1. Чем определяется сложность программного обеспечения. 2. В чем заключается алгоритмическая декомпозиция системы? Привести примеры. 3. Каким образом можно организовать взаимодействие между компонентами при алгоритмической декомпозиции? 4. Перечислить недостатки алгоритмической декомпозиции. 5. В чем заключается объектно-ориентированная (ОО) декомпозиция системы? 6. Из каких основных элементов состоит объектная модель? 7. Что такое инкапсуляция? 8. Каким образом связаны инкапсуляция и абстракция? 9. Что такое иерархия? Какие виды иерархии существуют? 10. Что такое класс? 11. Что такое объект? 12. Что такое состояние объекта? 13. Что такое поведение объекта? 14. Что такое идентичность объекта? 15. Какие операции должны быть включены в состав класса? 16. Зачем нужны конструкторы и деструкторы классов? 17. Какие виды отношений существуют между классами? 18. Что представляет собой итерационный ЖЦ ПО? 19. На каких принципах основано использование UML? 20. Перечислить виды диаграмм UML. 21. Для чего используется каждый вид диаграмм? 22. Что представляют собой атрибуты и методы класса? 23. Каким образом можно управлять видимостью элементов класса? 24. Какие методы класса являются встроенными (inline)? 25. Какие спецификаторы доступа используются в С++? 26. Какие типы конструкторов существуют? 27. В каких случаях вызываются конструкторы копирования? 28. Какие конструкторы используются по умолчанию? 29. Для чего нужен деструктор? в каком случае вызывается деструктор? 30. На что указывает указатель this? 31. Какие операции нельзя перегружать? 32. Какой оператор используется при перегрузке операций? 33. Какие способы существуют для перегрузки операций? 34. Чем отличается перегрузка компонентной и глобальной унарной операции? 35. Что обозначает спецификатор friend? 36. Что представляет собой отношение наследования? 37. Что представляет собой открытое наследование? Привести пример. 38. Что такое принцип подстановки. Привести пример. 39. Что представляет собой закрытое наследование? Привести пример. 40. Что такое связывание? 41. Что такое полиморфные функции? 42. Чем полиморфизм отличается от принципа подстановки? 43. В каких случаях используется механизм позднего связывания? 44. Что такое чисто виртуальная функция? 45. Какие методы рекомендуется делать виртуальными? 46. Что такое таблица виртуальных методов? Для чего она используется? 47. Каким образом выполняется выбор виртуальной функции при позднем связывании? 48. Почему деструкторы рекомендуется делать виртуальными? 49. Какие методы нужно делать виртуальными? 7 Приложение 2 Тематика домашнего задания 1. Создание классов, методов классов, конструкторов и деструкторов, объектов класса. 2. Создание иерархии классов путем наследования. 3. Использование виртуальных функций, абстрактных классов, полиморфных объектов. 4. Использование классов контейнеров для хранения объектов. 5. Использование стандартной библиотеки С++. 6. Использование потоковых классов стандартной библиотеки С++ для сохранения объектов в файле и загрузки из файла. 7. Использование стандартной библиотеки шаблонов С++. 8. Использование исключительных ситуаций. 8 Приложение 3 Вопросы для самоконтроля 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. История развития языков процедурного программирования Основные типы, структуры данных и операторы языка С++. Сложность задачи. Примеры сложных систем. Алгоритмическая декомпозиция сложных систем. Объектно-ориентированная декомпозиция сложной системы Основные этапы создания программного продукта. Атрибуты, их типы и представление при ОМ. Связи, их виды и способы формализации. Использование языка UML для ОО анализа Рабочие продукты ОО анализа. Понятие класса. Атрибуты. Методы. Объекты. Инкапсуляция. Спецификаторы доступа. Конструкторы и деструкторы. Перегрузка операций. Простое наследование. Ключи доступа при наследовании. Виртуальные методы. Механизм позднего связывания. Абстрактные классы. Множественное наследование. Абстрактные типы данных. Контейнеры. Примеры реализации (вектор, матрица, стек, очередь) Создание шаблонов классов Использование шаблонов классов Специализация шаблонов. Событие. Методы обработки событий. Главный цикл обработки событий. Пример обработки событий. Общий механизм обработки исключительных ситуаций. Синтаксис исключений. Перехват исключений. Иерархии исключений. Классификация потоков. Подключение потоков Операции ввода-вывода Файловые потоки Контейнеры Итераторы Последовательные контейнеры Адаптеры контейнеров Ассоциативные контейнеры Обобщенные алгоритмы 9 Приложение 4 План практических занятий по дисциплине «Объектно-ориентированный анализ и программирование» Практическое занятие №1. Использование UML для ОО анализа Тема Вопросы 1. Создание диаграммы вариантов использования (прецедентов) 2. Создание диаграмм взаимодействия a. Диаграмма последовательности b. Диаграмма кооперации 3. Создание диаграммы классов Практическое занятие №2. Тема Вопросы Использование UML для ОО анализа 1. Диаграммы состояний 2. Диаграммы компонентов 3. Диаграммы размещения. Практическое занятие №3. Тема Вопросы Практическое занятие №4. Классы и объекты. Инкапсуляция. 1. Реализовать определение нового класса. Для демонстрации работы с объектами написать главную функцию. Продемонстрировать разные способы создания объектов и массивов объектов. 2. Структура-пара – структура с двумя полями, которые обычно имеют имена first и second. Требуется реализовать тип данных с помощью такой структуры. Во всех заданиях должны присутствовать: a. метод инициализации Init (метод должен контролировать значения аргументов на корректность); b. ввод с клавиатуры Read; c. вывод на экран Show. 3. Реализовать внешнюю функцию make_тип(), где тип – тип реализуемой структуры. Функция должна получать значения для полей структуры как параметры функции и возвращать структуру как результат. При передаче ошибочных параметров следует выводить сообщение и заканчивать работу. Классы и объекты. Использование конструкторов 10 Вопросы 1. Определить пользовательский класс. 2. Определить в классе следующие конструкторы: без параметров, с параметрами, копирования. 3. Определить в классе деструктор. 4. Определить в классе компоненты-функции для просмотра и установки полей данных (селекторы и модификаторы). 5. Написать демонстрационную программу, в которой продемонстрировать все три случая вызова конструктора-копирования, вызов конструктора с параметрами и конструктора без параметров. Практическое занятие №5. Тема Вопросы Перегрузка операций 1. Определить пользовательский класс. 2. Определить в классе следующие конструкторы: без параметров, с параметрами, копирования. 3. Определить в классе деструктор. 4. Определить в классе компоненты-функции для просмотра и установки полей данных (селекторы и модификаторы). 5. Перегрузить операцию присваивания. 6. Перегрузить операции ввода и вывода объектов с помощью потоков. 7. Перегрузить операции указанные в варианте. 8. Написать программу, в которой продемонстрировать создание объектов и работу всех перегруженных операций. Практическое занятие №6. Тема Простое наследование. Принцип подстановки. 11 Вопросы Практическое занятие №7. Тема Вопросы Практическое занятие №8. Тема Вопросы Практическое занятие №9. Тема 1. Определить пользовательский класс. 2. Определить в классе следующие конструкторы: без параметров, с параметрами, копирования. 3. Определить в классе деструктор. 4. Определить в классе компоненты-функции для просмотра и установки полей данных (селекторы и модификаторы). 5. Перегрузить операцию присваивания. 6. Перегрузить операции ввода и вывода объектов с помощью потоков. 7. Определить производный класс. 8. Написать программу, в которой продемонстрировать создание объектов и работу всех перегруженных операций. 9. Реализовать функции, получающие и возвращающие объект базового класса. Продемонстрировать принцип подстановки. Наследование. Виртуальные функции. Полиморфизм. 1. Определить абстрактный класс. 2. Определить иерархию классов, в основе которой будет находиться абстрактный класс. 3. Определить класс Вектор, элементами которого будут указатели на объекты иерархии классов. 4. Перегрузить для класса Вектор операцию вывода объектов с помощью потоков. 5. В основной функции продемонстрировать перегруженные операции и полиморфизм Вектора. Контрольная работа 1. Проектирование и реализация иерархий классов в заданной предметной области. АТД. Контейнеры 12 Вопросы Практическое занятие №10. Практическое занятие №11. Тема Практическое Тема Вопросы 1. Определить класс-контейнер. 2. Реализовать конструкторы, деструктор, операции ввода-вывода, операцию присваивания. 3. Перегрузить операции, указанные в варианте. 4. Реализовать класс-итератор. Реализовать с его помощью операции последовательного доступа. 5. Написать тестирующую программу, иллюстрирующую выполнение операций. Шаблоны классов 1. Определить шаблон класса-контейнера 2. Реализовать конструкторы, деструктор, операции ввода-вывода, операцию присваивания. 3. Перегрузить операции, указанные в варианте. 4. Инстанцировать шаблон для стандартных типов данных (int, float, double). 5. Написать тестирующую программу, иллюстрирующую выполнение операций для контейнера, содержащего элементы стандартных типов данных. 6. Реализовать пользовательский класс. 7. Перегрузить для пользовательского класса операции ввода-вывода. 8. Перегрузить операции необходимые для выполнения операций контейнерного класса. 9. Инстанцировать шаблон для пользовательского класса. 10. Написать тестирующую программу, иллюстрирующую выполнение операций для контейнера, содержащего элементы пользовательского класса. Программа, управляемая событиями 13 занятие №12. Вопросы Практическое занятие №13 Тема Вопросы Практическое занятие №14 Тема 1. Определить иерархию пользовательских классов. Во главе иерархии должен стоять абстрактный класс с чисто виртуальными методами для ввода и вывода информации об атрибутах объектов. 2. Реализовать конструкторы, деструктор, операцию присваивания, селекторы и модификаторы. 3. Определить класс-группу на основе структуры, указанной в варианте. 4. Для группы реализовать конструкторы, деструктор, методы для добавления и удаления элементов в группу, метод для просмотра группы, перегрузить операцию для получения информации о размере группы. 5. Определить класс Диалог – наследника группы, в котором реализовать методы для обработки событий. 6. Добавить методы для обработки событий группой и объектами пользовательских классов. 7. Написать тестирующую программу. 8. Нарисовать диаграмму классов и диаграмму объектов. Обработка исключительных ситуаций 1. Реализовать класс, перегрузить для него операции, указанные в варианте. 2. Определить исключительные ситуации. 3. Предусмотреть генерацию исключительных ситуаций. Сохранение данных в файле с использованием потоков 14 Вопросы Практическое занятие №15 Тема Вопросы Практическое занятие №16 Тема 1. Создать пользовательский класс с минимальной функциональностью. 2. Написать функцию для создания объектов пользовательского класса (ввод исходной информации с клавиатуры) и сохранения их в потоке (файле). 3. Написать функцию для чтения и просмотра объектов из потока. 4. Написать функцию для удаления объектов из потока в соответствии с заданием варианта. Для выполнения задания выполнить перегрузку необходимых операций. 5. Написать функцию для добавления объектов в поток в соответствии с заданием варианта. Для выполнения задания выполнить перегрузку необходимых операций. 6. Написать функцию для изменения объектов в потоке в соответствии с заданием варианта. Для выполнения задания выполнить перегрузку необходимых операций. 7. Для вызова функций в основной программе предусмотреть меню. Последовательные и ассоциативные контейнеры библиотеки STL. 1. Создать последовательный (ассоциативный) контейнер. 2. Заполнить его элементами стандартного (пользовательского) типа (тип указан в варианте). 3. Добавить элементы в соответствии с заданием 4. Удалить элементы в соответствии с заданием. 5. Выполнить задание варианта для полученного контейнера. 6. Выполнение всех заданий оформить в виде глобальных функций. Стандартные обобщенные алгоритмы библиотеки STL.. 15 Вопросы 1. Создать параметризированный класс, используя в качестве контейнера ассоциативный контейнер. 2. Заполнить его элементами. 3. Добавить элементы в соответствии с заданием 4. Удалить элементы в соответствии с заданием. 5. Выполнить задание варианта для полученного контейнера. 6. Выполнение всех заданий оформить в виде методов параметризированного класса. 7. Создать последовательный контейнер. 8. Заполнить его элементами пользовательского типа (тип указан в варианте). Для пользовательского типа перегрузить необходимые операции. 9. Заменить элементы в соответствии с заданием (использовать алгоритмы replace_if(), replace_copy(), replace_copy_if(), fill()). 10. Удалить элементы в соответствии с заданием (использовать алгоритмы remove(),remove_if(), remove_copy_if(),remove_copy()) 11. Отсортировать контейнер по убыванию и по возрастанию ключевого поля (использовать алгоритм sort()). 12. Найти в контейнере заданный элемент (использовать алгоритмы find(), find_if(), count(), count_if()). 13. Выполнить задание варианта для полученного контейнера (использовать алгоритм for_each()) . 14. Для выполнения всех заданий использовать стандартные алгоритмы библиотеки STL. 16