Санкт-Петербургский государственный
политехнический университет
Факультет технической кибернетики
Кафедра компьютерных систем и программных технологий
Объектноориентированный анализ и
проектирование
[Software Engineering I. Объектно-ориентированные
методы в инженерии программного обеспечения]
Программа курса
Составил: Пышкин Е.В.
09.09.2011
Объектно-ориентированные методы в инженерии ПО |2 Оглавление Объектно-ориентированный анализ и проектирование
Академические рамки курса
Предварительные требования к слушателям
Цели курса
Краткая программа
Ресурсы и документы
Подведение итогов
Список рекомендуемых источников
Введение
Сложность, присущая программному обеспечению
Что такое «объектно-ориентированный анализ и проектирование»?
Объектно-ориентированный анализ и проектирование: простой пример
Объектная модель и основополагающие концепции
Язык UML. Основы
Введение
Описание прецедентов
Моделирование предметной области
Моделирование статической структуры. Диаграммы классов UML. Классы и отношения.......... Моделирование статической структуры. Другие важные диаграммы
Моделирование взаимодействия
Моделирование поведения
ООАиП и шаблоны проектирования (паттерны)
Понятие объектной структуры
Что такое «шаблон проектирования» (паттерн)
Механизмы повторного использования
Описание паттернов
Библиография
Объектно-ориентированные методы в инженерии ПО | Объектно-ориентированный анализ и проектирование Развернутый план Данный документ содержит описание и развернутый план курса “Объектно-ориентированный анализ и проектирование в рамках серии дисциплин по технологии программирования и программной инженерии разработки, преподаваемых на кафедре компьютерных систем и программных технологий факультета технической кибернетики Санкт-Петербургского государственного политехнического университета.
Академические рамки курса Полное наименование: Объектно-ориентированные методы в инженерии программного обеспечения Академический статус: курс по выбору Академическая программа: подготовка бакалавров по направлению «Информатика и вычислительная техника», профили: «Вычислительные машины, комплексы, системы и сети», «Технологии разработки программного обеспечения»
Лекционная часть: 36 ак. часов Практическая часть: 18 ак. часов В учебном плане: с 2011/2012 уч. года Академический период: 5-й семестр (осенний семестр третьего года обучения) Кредитный эквивалент: Руководитель: ПЫШКИН Евгений Валерьевич, доцент, к.т.н.
Преподаватели: ПЫШКИН Евгений Валерьевич, доцент, к.т.н.; ГЛУХИХ Михаил Игоревич, доцент, к.т.н.
Предварительные требования к слушателям Понимание основ программирования на Java и C++. Основы структур данных и алгоритмов.
Способность разрабатывать и понимать программный код на C++ и Java. Опыт разработки программных проектов средней сложности.
Цели курса Курс ориентирован на студентов, изучающих программную инженерию и технологии программного обеспечения. Курс позволяет лучше разобраться в применении методов объектноориентированного проектирования в практике разработки программных систем. Курс позволяет слушателям познакомиться с задачами программной инженерии, основными моделями разработки ПО, моделированием на основе UML, методам организации программного кода, основанными на паттернах проектирования.
Краткая программа 1. Сложность программного обеспечения (ПО). Основы программной инженерии. Введение в объектно-ориентированный анализ и проектирование 2. Процесс разработки ПО, основанный на объектно-ориентированном подходе. Объектная модель. Взаимодействие объектов. Объектно-ориентированный анализ и проектирование:
простой пример.
Объектно-ориентированные методы в инженерии ПО | 3. Введение в UML: аспекты использования, историческая справка, структуры. Спецификация метамодели UML.
4. Инженерия предметной области. Диаграммы прецедентов и управление проектом.
Предусмотрение изменения требований при разработке ПО.
5. Классы, отношения классов. Моделирование статической структуры (UML).
6. XML-трансформация объектной структуры. Введение в XML.
7. Моделирование взаимодействия и поведения(UML).
8. Повторное использование компонентов при разработка ПО. Объектные структуры. Введение в паттерны проектирования. Паттерны (шаблоны проектирования) GoF.
9. Паттерны проектирования. Определение и описание. Структурные, разделяющие, поведенческие паттерны. Паттерны для параллельных операций. Обсуждение и примеры.
10. Заключительная дискуссия.
Ресурсы и документы PDF лекций, примеры, рассмотренные на лекции, задания индивидуальных тестов.
Подведение итогов Оценка (зачет) по курсу выставляется на основе сбалансированных оценок по следующим категориям:
Самостоятельная работа и упражнения - 25% Лекционные тесты - 50% Итоговый экзамен (зачет, собеседование) - 25% Список рекомендуемых источников Обратите внимание, что для отдельных источников могут существовать позднейшие переиздания.
Книги, статьи 1. Брукс Ф.П. Мифический человеко-месяц, или как создаются программные системы / Пер. с англ. – СПб.: Символ, 2000. – 304 с.: ил.
2. Соммервилл И. Инженерия программного обеспечения. 6-е издание / Пер. с англ. – М.:
Издательский дом «Вильямс», 2002. – 624 с.: ил.
3. Гецци К., Джазайери М., Мандриоли Д. Основы инженерии программного обеспечения. 2-е изд. / Пер. с англ.- СПб.: БХВ-Петербург, 2005.- 832 с.: ил.
4. Вигерс К.И. Разработка требований к программному обеспечению / Пер. с англ. – М.:
Издательско-торговый дом «Русская редакция», 2004. – 576 с.: ил.
5. Орлов С.А. Технологии разработки программного обеспечения: Учебник. – СПб.: Питер, 2002. – 464 с.: ил.
6. Фаулер М. Рефакторинг: улучшение существующего кода / Пер. с англ. – СПб.: Символ-Плюс, 2003. – 432 с.: ил.
7. Буч Г. Объектно-ориентированный анализ и проектирование с примерами приложений на C++.
2-е изд. / Пер. с англ. – М.: «Издательство Бином», СПб.: «Невский диалект», 2000. – 560 с.: ил.
8. Бадд Т. Объектно-ориентированное программирование в действии / Пер. с англ. – СПб.:
Питер, 1997. – 464 с.: ил. (Серия «В действии») 9. Буч Г., Рамбо Дж., Якобсон А. Язык UML. Руководство пользователя / Пер. с англ. – М.: ДМК Пресс, 2000. – 432 с.: ил. (Серия «Для программистов») 10. Леоненков А.В. Самоучитель UML 2. – СПб.: БХВ-Петербург, 2007. –576 с.: ил.
11. Ларман К. Применение UML 2.0 и шаблонов проектирования, 3-е издание / Пер. с англ. – М.:
«И.Д. Вильямс», 2007. – 736с.: ил.
12. Новиков Ф.А., Иванов Д.Ю. Моделирование на UML. Теория, практика, видеокурс. – СПб.:
Профессиональная литература, Наука и Техника, 2010. –640 с.: ил.
13. Гамма Э., Хелм Р., Джонсон Р., Влиссидес Дж. Приемы объектно-ориентрованного программирования. Паттерны проектирования / Пер. с англ. – СПб.: Питер, 2001. – 368 с.: ил.
(Серия «Библиотека программиста») 14. Гранд М. Шаблоны проектирования в Java / Пер. с англ. – М.: Новое знание, 2004. – 559 с.: ил.
15. Пышкин Е.В. Основные концепции и механизмы объектно-ориентированного программирования. – СПб.: БХВ-Петербург, 2005. –640 с.: ил.
16. Влиссидес Дж Применение шаблонов проектирования. Дополнительные штрихи / Пер. с англ.
– М.: Вильямс, 2003.- 144 с.: ил. - (Ориг. Название: Pattern Hatching).
17. Кериевски Дж. Рефакторинг с использованием шаблонов / Пер. с англ. – М.: Вильямс, 2006.с.: ил. - (Ориг. Название: Refactoring to Patterns).
18. Макконнелл С. Совершенный код. Практическое руководство по разработке программного обеспечения. 2-е изд. / Пер. с англ.- М.: Русская редакция, СПб.: Питер, 2005.- 896 с.: ил.
Web-ресурсы 1. Computer Science at the University of St-Andrew: Ian Sommerville’s Page // http://www.cs.standrews.ac.uk/~ifs/ 2. UML Resource Page // http://www.uml.org 3. UML basics: An introduction to the Unified Modeling Language // http://www.ibm.com/developerworks/rational/library/769.html 4. Unified Modeling Language, from Wikipedia // http://en.wikipedia.org/wiki/Unified_Modeling_Language 5. Allen Holub’s UML Quick Reference // http://www.holub.com/goodies/uml/index.html 6. Introduction to the Diagrams of UML2 // http://www.agilemodeling.com/essays/umlDiagrams.htm 7. Introduction to Object Orientation and UML // http://www.agiledata.org/essays/objectOrientation101.html 8. Patterns and Best Practices for Enterprise Integration // http://www.eaipatterns.com/ Введение Практика приходит первой и развивается вначале очень быстро; теория появляется после того как уже накоплен определенный практический опыт, требующий формализации, и также развивается очень быстро, даже быстрее практики, затем линии развития пересекаются и далее теория начинает предшествовать практике (Роберт Гласс) Сложность, присущая программному обеспечению Сложность реального мира. Многообразие предметных областей. Сложность моделирования.
Масштаб разработки. Изменение требований. Сложность управления процессом разработки.
Детализация = сложность.
Признаки сложной системы. Подходы к структуризации.
Что такое «объектно-ориентированный анализ и проектирование»?
Почему активно развивается?.
ООАиП и UML.
ООАиП и шаблоны проектирования.
ООАиП и модели разработки программного обеспечения: каскадная модель жизненного цикла, спиральная модель, итеративная разработка, унифицированный процесс и др.
Объектно-ориентированный анализ и проектирование: простой пример Существует совсем немного вещей, которые придумать труднее, чем хороший пример (Марк Твен) Определение прецедентов. Определение модели предметной области. Распределение обязанностей между объектами. Диаграммы взаимодействия. Разработка диаграмм классов проектирования.
Объектная модель и основополагающие концепции Напоминание из курса программирования. Основные элементы объектной модели.
Абстрагирование. Инкапсуляция. Модульность. Иерархия. Типизация. Параллелизм.
Сохраняемость.
Классы и объекты. Атрибуты объекта: состояние, поведение, идентичность.
Язык UML. Основы Введение Способы использования UML. Аспекты использования UML. Рассмотрение системы с разных точек зрения («виды» UML). Статические, динамические, поведенческие модели. Способы использования UML (черновики, средство проектирования и конструирования, документация).
Этапы развития: имена и даты. Источники: Booch’91, Booch’91, OMT, OOSE. Примеры.
Современный стандарт.
Общая структура языка: мета-метамодель, метамодель, модель, объекты или экземпляры. UML Infrastructure и UML Superstructure.
Мета-метамодель как исходная формально-логическая основа для всех возможных метамодельных представлений. Примеры таких представлений: UML, CWM (Common Warehouse Metamodel, Общая метамодель хранилища данных).
Особенности спецификации метамодели языка UML 2.0. Примеры сущностей в метамодели и в пользовательской модели. Уровень объектов или экземпляров.
Классификация канонических диаграмм UML 2.0. Примеры. Механизмы расширения UML.
Описание прецедентов Нет смысла вдаваться в детали, если неизвестно, о чем идет речь (Джон Формулирование прецедентов (вариантов использования) как этап проектирования системы.
Диаграммы прецедентов (use case). Элементы на диаграмме прецедентов (актеры, варианты использования, ассоциации). «Актеры и роли». Отношения обобщения, включения и расширения.
Назначение диаграммы прецедентов.
Процесс формулирования прецедентов. Роль диаграмм прецедентов в управлении проектом.
Моделирование предметной области Понятие. Связь с диаграммами прецедентов.
Классы в модели предметной области и программные классы. Ошибки в выделении концептуальных классов.
Моделирование статической структуры. Диаграммы классов UML. Классы и отношения Диаграмма классов как основная логическая модель проектируемой системы. Пример. Основные отношения (ассоциация, обобщение, агрегирование) и их атрибуты. Свойства отношений:
именование, направленность, кратность. Классы на диаграммах классов: атрибуты, операции, экземплярные и статические элементы, права доступа.
Интерфейсы, реализация интерфейсов. Стереотипы как средство расширения нотации UML.
Отношения на диаграммах классов: подробности. Агрегирование и композиция. Реализация интерфейсов. Виртуальные методы классов. Зависимости. N-арная ассоциация. Ассоциация-класс.
Диаграммы классов: цели разработки в ходе проектирования.
Моделирование статической структуры. Другие важные диаграммы Диаграммы пакетов. Совмещение диаграмм пакетов и диаграмм классов. Иерархии пакетов.
Альтернативные способы изображения.
Диаграммы объектов. XML-трансформация. Введение в XML. Причины популярности XML.
Моделирование взаимодействия Диаграммы последовательности. Комбинированные фрагменты на диаграммах последовательности.
Диаграммы коммуникации.
Моделирование поведения Диаграммы деятельности. Сообщения.
Диаграммы конечного автомата. События и сигналы.
ООАиП и шаблоны проектирования (паттерны) Мы учимся, создавая образцы и распознавая их позднее (Дэвид Стрэйкер) Понятие объектной структуры Объектные структуры как способ организации объектно-ориентированного кода.
Шаблон Model-View-Controller (контекст и пример использования в небольшом проекте) Разработка инфраструктуры модульного тестирования. Архитектура xUnit и ее реализации.
Основы JUnit.
Что такое «шаблон проектирования» (паттерн) Паттерн как решение проблемы в некотором контексте. Окружающие идеи: обобщение частных решений на распространенные случаи, уровни абстрагирования, отделение изменяющегося кода от относительно стабильного.
Применение шаблонов: новая разработка, рефакторинг, отказ от применения.
Неформальное определение. Подход к описанию паттерна: проектная проблема (синопсис), пример контекста, мотивы, описание решения, элементы реализации, преимущества и ограничения применения, примеры из API языков программирования, связь и взаимодействие с другими паттернами.
Примеры. Шаблон Singleton (причины применения, примеры реализации генератора уникальных ключей на C++ и Java, пример использования такого генератора при построении системы unitтестов). Шаблон Immutable (неизменяемый объект).
Механизмы повторного использования Наследование и композиция. Почему наследование не всегда работает?
Делегирование. Моделирование отношения «исполнять роль объекта»
Параметризованные типы.
Проектирование с учетом будущих изменений.
Описание паттернов Шаблоны проектирования помогают нам учиться на успешных примерах других, а не на собственных неудачах (Марк Джонсон) Классификация шаблонов проектирования: порождающие паттерны, структурные паттерны, разделяющие паттерны, паттерны поведения, паттерны для конкурирующих операций. Паттерны уровня классов и объектов.
Обсуждение источников.
Основные паттерны Условность выделения группы структурных паттернов как основных. Использование в качестве элементов во многих более сложных паттернах.
Delegation.
Interface.
Abstract
Superclass.
Immutable.
Proxy.
Порождающие паттерны Singleton.
Factory Method.
Abstract Factory.
Prototype.
Builder.
Object Pool.
Разделяющие (структурные) шаблоны Filter.
Recursive Composition (Composite).
Read-Only Interface.
Другие структурные паттерны Adaptor. Отличия от паттернов Faade и Proxy.
Bridge. Связь с шаблоном Layered Architecture. Взаимодействие с Abstract Factory.
Decorator (Wrapper).
Faade.
Virtual Proxy.
Flyweight. Связь с паттернами Composite и Immutable.
Паттерны поведения Chain of Responsibility.
Command.
Observer.
State.
Null Object.
Strategy.
Iterator.
Visitor.
Паттерны для конкурирующих операций Single Threaded Execution.
Lock Object.
Read/Write Lock.
Future. Взаимодействие с шаблонами Observer и Proxy (Virtual Proxy).
Библиография 1. Шнейдерман Б. Психология программирования: человеческие факторы в вычислительных и информационных системах / Пер. с англ. – М.: Радио и связь, 1984. – 304с.
2. Брукс Ф.П. Мифический человеко-месяц, или как создаются программные системы / Пер. с англ. – СПб.: Символ, 2000. – 304 с.: ил.
3. Соммервилл И. Инженерия программного обеспечения. 6-е издание / Пер. с англ. – М.:
Издательский дом «Вильямс», 2002. – 624 с.: ил.
4. Гецци К., Джазайери М., Мандриоли Д. Основы инженерии программного обеспечения. 2-е изд. / Пер. с англ.- СПб.: БХВ-Петербург, 2005.- 832 с.: ил.
5. Вигерс К.И. Разработка требований к программному обеспечению / Пер. с англ. – М.:
Издательско-торговый дом «Русская редакция», 2004. – 576 с.: ил.
6. Орлов С.А. Технологии разработки программного обеспечения: Учебник. – СПб.: Питер, 2002. – 7. Фаулер М. Рефакторинг: улучшение существующего кода / Пер. с англ. – СПб.: Символ-Плюс, 2003. – 432 с.: ил.
8. Буч Г. Объектно-ориентированный анализ и проектирование с примерами приложений на C++.
2-е изд. / Пер. с англ. – М.: «Издательство Бином», СПб.: «Невский диалект», 2000. – 560 с.: ил.
9. Бадд Т. Объектно-ориентированное программирование в действии / Пер. с англ. – СПб.:
Питер, 1997. – 464 с.: ил. (Серия «В действии») 10. Буч Г., Рамбо Дж., Якобсон А. Язык UML. Руководство пользователя / Пер. с англ. – М.: ДМК Пресс, 2000. – 432 с.: ил. (Серия «Для программистов») 11. Леоненков А.В. Самоучитель UML 2. – СПб.: БХВ-Петербург, 2007. –576 с.: ил.
12. Мацяшек Л.А. Анализ требований и проектирование систем. Разработка информационных систем с использованием UML / Пер. с англ. – М.: Издательский дом «Вильямс», 2002. – 432 с.:
13. Ларман К. Применение UML 2.0 и шаблонов проектирования, 3-е издание / Пер. с англ. – М.:
«И.Д. Вильямс», 2007. – 736с.: ил.
14. Pender T.A. UML Weekend Crash Course. Wiley Publishing Inc., 2002. 358 p.
15. Гамма Э., Хелм Р., Джонсон Р., Влиссидес Дж. Приемы объектно-ориентрованного программирования. Паттерны проектирования / Пер. с англ. – СПб.: Питер, 2001. – 368 с.: ил.
(Серия «Библиотека программиста») 16. Гранд М. Шаблоны проектирования в Java / Пер. с англ. – М.: Новое знание, 2004. – 559 с.: ил.
17. Александреску А. Современное проектирование на C++. Серия C++ in Depth, т.3 / Пер. с англ. – М.: Издательский дом «Вильямс», 2002. – 336с.: ил.
18. Новиков Ф.А., Иванов Д.Ю. Моделирование на UML. Теория, практика, видеокурс. – СПб.:
Профессиональная литература, Наука и Техника, 2010. –640 с.: ил.
19. Страуструп Б. Дизайн и эволюция языка C++ / Пер. с англ. – М.: ДМК Пресс, 2000. –448 с.: ил.
(Серия «Для программистов») 20. Пышкин Е.В. Основные концепции и механизмы объектно-ориентированного программирования. – СПб.: БХВ-Петербург, 2005. –640 с.: ил.
21. Глухих М.И., Ицыксон В.М. Программная инженерия. Обеспечение качества программных средств методами статического анализа. – СПб.: Изд-во Политехн. ун-та, 2011. – 150 с.
22. Miller R. Practical UML: A Hands-On Introduction for Developers // EDN Together Community Page // http://edn.embarcadero.com/article/ 23. Bell D. UML Basics: The class diagram. An introduction to structure diagrams in UML 2 // IBM Developer Works // http://www.ibm.com/developerworks/rational/library/content/RationalEdge/sep04/bell/ 24. Stelting S., Maassen O. Applied Java Patterns. Addison Wesley Inc., 2001.
25. Cooper J. Java Design Patterns: A Tutorial. Addison Wesley Inc., 2000.
26. Grand M. Patterns in Java. Vol. 1. Wiley Computer Publishing, 1999.
27. Ambler S.W. The Object Primer. 3rd edition. Agile Model Driven Development with UML 2.
Cambridge University Press, 2004.
28. Влиссидес Дж Применение шаблонов проектирования. Дополнительные штрихи / Пер. с англ.
– М.: Вильямс, 2003.- 144 с.: ил. - (Ориг. Название: Pattern Hatching).
29. Кериевски Дж. Рефакторинг с использованием шаблонов / Пер. с англ. – М.: Вильямс, 2006.с.: ил. - (Ориг. Название: Refactoring to Patterns).
30. Холзнер С. XML: Энциклопедия, 2-е изд. / Пер. с англ.- СПб.: БХВ-Петербург, 2004.- 1101 с.: ил.
31. Макконнелл С. Совершенный код. Практическое руководство по разработке программного обеспечения. 2-е изд. / Пер. с англ.- М.: Русская редакция, СПб.: Питер, 2005.- 896 с.: ил.
32. Glass L. R. The Relationship Between Theory and Practice in Software Engineering // Communications of the ACM, November 1996/Vol. 39, No. 11.
33. Meyer B. On to Components // IEEE Computer.- 1999.- 32(1).- P.139-179.
34. Пышкин Е.В. Уровни абстрагирования при управлении сложными типами в структурном программировании // Вычислительные, измерительные и управляющие системы:
Сборник научных трудов / Под. ред. Ю.Б. Сениченкова.- СПб.: Изд-во Политехн. ун-та, 2005.- с.169-174.
35. Рытенков А.С., Пышкин Е.В. Шаблон проектирования 2D-контейнеров с альтернативными вариантами размещения элементов в памяти // XXXIV Неделя науки СПбГПУ. Ч.VII: Материалы межвузовской научной конференции. СПб.: Изд-во СПбГПУ, 2006.- с.