Визуальное моделирование при анализе и проектировании. Основы Unified Modeling Language (UML)
1. Вспоминая предыдущую лекцию
Наша предыдущая лекция целиком была посвящена введению в программную инженерию. При этом мы охватили следующие темы:
Программная инженерия, основные понятия
- Инженеры и программные инженеры
- Программная инженерия как инженерная дисциплина
- Область действия программной инженерии
- Цели программных инженеров
- Программные инженеры и научная среда
Процесс создания ПО
- Понятие процесса. Основные фазы.
- Модель процесса. Каскадная и эволюционная модель.
- Итерационный подход. Модель пошаговой разработки и спиральная модель.
2. Анализ и проектирование. Некоторые частные вопросы
В прослушанных ранее программистских дисциплинах неоднократно рассматривалась типовая схема решения задач с использованием вычислительной техники. При этом особое внимание уделялось тому, что непосредственное программирование или написание кода начинается далеко не сразу. Более того, этапы, предшествующие разработки не менее важны и сложны. Примерная схема, отражающая процесс от постановки задачи до выпуска готового продукта может выглядеть так:
Или в укрупненном виде:
3-я часть и элементы 2-ой части этой цепочки изучаются в курсе "Методы программирования".
1-я и 2-я части составляют объект изучения отдельного курса "Анализ и проектирование".
В настоящий момент в анализе и проектировании преобладает объектный подход (изучен в 1-2 семестрах).
Вспомним суть объектного подхода.
2.1. Обзор принципов объектного подхода
2.1.1. Алгоритмическая и объектная декомпозиции. Классы и объекты
Принципиально можно выделить 2 вида разбиения предметной области на составляющие элементы:
- Алгоритмическая декомпозиция (основные элементы программы - строительные блоки - алгоритмы).
- Объектная декомпозиция (основные элементы программы - виды абстракций (классы) и представители этих классов (объекты)).
В соответствии с алгоритмической декомпозицией предметной области мы при анализе задачи пытаемся понять, какие алгоритмы необходимо разработать для ее решения, каковы спецификации этих алгоритмов (вход, выход), и как эти алгоритмы связаны друг с другом. В языках программирования данный подход в полной мере поддерживается средствами модульного программирования (библиотеки, модули, подпрограммы).
В рамках объектной декомпозиции мы пытаемся выделить основные содержательные элементы задачи, разбить их на типы (классы). Далее для каждого класса абстракций мы определяем его свойства (данные) и поведение (операции), а также, как эти классы абстракций взаимодействуют друг с другом.
На сегодняшний день объектный подход и его основы - объектная модель и объектная декомпозиция - поддерживаются современными объектно-ориентированными языками программирования (Object Pascal, C++, Java, C#…).
2.1.2. Составные части объектного подхода
Как было сказано ранее, основами объектного подхода являются объектная модель и объектная декомпозиция. Рассмотрим кратко составные части объектного подхода, грамотное выполнение которых, как правило, приводит к созданию качественного программного продукта.
Объектный подход:
- OOA (object oriented analysis) - объектно-ориентированный анализ.
- OOD (object oriented design) - объектно-ориентированное проектирование.
- OOP (object oriented programming) - объектно-ориентированное программирование.
Рассмотрим кратко эти ключевые понятия (определения Г. Буча):
Объектно-ориентированный анализ - это методология, при которой требования к системе воспринимаются с точки зрения классов и объектов, выявленных в предметной области [3.2].
Объектно-ориентированное проектирование - это методология проектирования, соединяющая в себе процесс объектной декомпозиции и приемы представления логической и физической, а также статической и динамической моделей проектируемой системы [3.2].
Объектно-ориентированное программирование - это методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определенного класса, а классы образуют иерархию наследования [3.2].
В русскоязычной литературе, как правило, под аббревиатурой ООП рассматривают все 3 составляющих объектного подхода. Далее и мы будем следовать этому принципу.
Курсы из цикла "Методы программирования" и, конкретнее, "Объектно-ориентированное программирование" преимущественно концентрируются на OOP. Данный курс, по крайней мере, его теоретическая часть основное внимание уделяет OOA и OOD.