СИСТЕМНОЕ И ПРИКЛАДНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ Лекция 12. Подходы и методы проектирования программной архитектуры. Средства описания структуры. Нотация UML. Подходы и методы проектирования программной архитектуры Проектирование ПО SWEBOK: • Основы проектирования • Ключевые вопросы • Структура и архитектура ПО • Анализ качества и оценка программного дизайна • Нотации проектирования • Стратегии и методы проектирования 3 1. Основы проектирования • Общие концепции • • • • [бизнес-]цель архитектуры ограничения архитектуры возможные альтернативы используемые представления и решения • Контекст проектирования • процесс разработки (жизненный цикл) • Процесс проектирования • Архитектурное проектирование - статическая и динамическая иерархия • Детализация архитектуры - нюансы структуры и поведения компонент • Принципы проектирования 4 Принципы проектирования 1. Абстракция • • параметризация (передача параметров) специфицирование: поведения, данных и управления Декомпозиция и разбиение на модули Связность и связанность модулей Инкапсуляция Разделение интерфейса и реализации Достаточность, полнота и простота 2. 3. 4. 5. 6. • • YAGNI – “You Ain’t Gonna Need It” KISS – “Keep It Simple, Stupid” 5 2. Ключевые вопросы проектирования • Параллелизм • • • • • • вопросы организации параллельной обработки Контроль и обработка событий Распределение (размещение) компонентов Обработка ошибок и исключительных ситуаций, обеспечение отказоустойчивости Взаимодействие с пользователем и представление Сохраняемость данных (жизненный цикл) 6 3. Структура и архитектура ПО • Архитектура – описание подсистем и компонент, а также связей между ними 1. Архитектурные структуры и ракурсы • взгляд на систему с разных точек зрения: - поведение, структура, логика, физическое размещение, реализация в коде 2. Архитектурные стили • «крупноблочные» шаблоны: - напр., клиент-сервер vs. распределённая система 3. Шаблоны проектирования 4. Семейства программ и фреймворков • повторное использование архитектурных решений и компонент 7 4. Анализ качества и оценка программного дизайна 1. Атрибуты качества 2. Анализ качества и техники оценки • практики обеспечения качества дизайна: - ревью статический анализ симуляция и прототипирование 3. Метрики • Количественные оценки дизайна: - трудоёмкость, сложность структуры, показатели качества 8 5. Нотации проектирования • Нотации – соглашения о способах представления дизайна • Определяются: • стандартами (напр., UML) • практиками - напр., в XP – карточки функциональной ответственности и связей класса • внутренними соглашениями • Описывают • Структура (статика) • Поведение (динамика) 9 6. Стратегии и методы проектирования ПО Общие стратегии 1. • • • • Функционально-ориентированное проектирование 2. • 3. 4. 5. «Разделяй и властвуй» и пошаговое уточнение Проектирование «сверху-вниз» и «снизу-вверх» Абстракция данных и инкапсуляция Итеративный и инкрементальный подход структурный анализ: потоки данных, описание процессов Объектно-ориентированное проектирование Компонентное проектирование Другие подходы 10 Парадигмы программирования • Парадигма – совокупность идей и понятий, определяющих стиль написания программ • Основные парадигмы: • Императивное программирование • Функциональное программирование • Ортогонально им – структурные парадигмы: • Блочное/процедурное программирование • Модульное программирование • Объектно-ориентированное программирование 11 Императивное программирование • Поток выполнения с управляющими структурами (циклы, if-then-else, возврат значений, переходы break/goto/continue) • Модификация изменяемых переменных • именованные «ячейки памяти» • Присваивание значений переменным «Чистая» императивная парадигма не имеет средств для высокоуровневых абстракций • для этого применяют структурные парадигмы 12 Функциональное программирование Опирается на математическую теорию • описание структур данных и действий над ними • Операторы над структурами описываются как функции • Избегают изменяемых переменных • в чистом виде – не используют вообще • Упор на средства абстрагирования и комбинирования функций • функции являются «объектами первого класса» - можно определять значение в любом месте, - передавать как параметры и возвращать как результат - набор операторов для композиции функций 13 Средства описания структуры. Нотация UML и другие. Варианты использования • Цель – описать основные сценарии работы пользователя • выделить и перечислить ключевые взаимодействия с системой, дающие значимый результат • для описания подойдут - чтобы проникнуться: пользовательские истории, диаграммы связей (mind maps) - чтобы быстро понять круг задач: диаграммы прецедентов (вариантов использования) UML 15 Пользовательские истории • User stories – рассказы о том, как пользователи работают с программой • Лучше писать живо и с юмором, чем сухо 16 Mind maps 17 Mind maps 18 Диаграммы прецедентов 19 Описание процессов и процедур • Детализация сценариев: • какие элементы взаимодействуют • что друг у друга запрашивают • Инструменты: • псевдокод • диаграммы UML: робастности, сотрудничества, последовательности действий, деятельности • диаграммы Data Flow 20 Диаграмма робастности 21 Диаграмма сотрудничества 22 Диаграмма последовательности действий 23 Диаграмма деятельности 24 Диаграмма потоков данных (Data Flow) 25 Сложное поведение компонент • Сложные алгоритмы и процедуры • диаграммы деятельности, блок-схемы и псевдокод • Автоматы: смена состояний • диаграммы состояний (UML) 26 Диаграмма состояний 27 Внутренняя структура • Детальное описание элементов системы: • • • • классы (ООП) – диаграмма классов диаграммы отношений таблицы баз данных схемы размещения компонент: диаграмма развертывания (UML) 28 Диаграмма классов 29 Отношения на диаграмме классов 30 Таблицы баз данных 31 Диаграмма развёртывания 32 Нотации: итоги • Инструментов для создания спецификаций много • лекция покрыла только несколько • Критерии выбора инструментов: • стандартные (предписаны процессом) • удобные (хорошо описывают) • «компактные» (небольшое подмножество) 33 Литература и ссылки • Х. Абельсон, Дж. Сассман. Структура и интерпретация компьютерных программ. • Г. Буч. Объектно-ориентированный анализ и проектирование. • Язык UML • Курс по основам UML на Intuit: - http://www.intuit.ru/studies/courses/32/32/info • Дополнение по Robustness Diagram (англ.): - http://www.agilemodeling.com/artifacts/robustnessDiagram.htm • Инструменты для UML - Visual Paradigm (community edition – некоммерческая) http://www.visual-paradigm.com/download/vpuml.jsp?edition=ce - StarUML http://staruml.sourceforge.net/en/ - ArgoUML http://argouml.tigris.org/ 34