Рассказываем про основы объектно-ориентированного анализа и проектирования (ООАП) и паттерны проектирования. Часть 1

Таким умным длинным заголовком, да ещё в воскресенье, мы не занудствуем, а экономим ваши денежки. В среднем курс по OOA\D в интернете стоит 40 тысяч, и перед этим вам ещё порекомендуют пройти курс по визуальному моделированию. Встречайте, у нас в блоге для аналитиков новый автор с суровой темой на несколько публикаций.

Дилара Валитова
ведущий аналитик, Акелон.

Тема непростая и спроектировать объектно-ориентированную систему – задача не из легких. Необходимо определить основные автоматизируемые объекты, сопоставить их с подходящими классами системы, выдержать оптимальную степень детализации, четко определить межклассовые отношения и учесть многое другое. С одной стороны, дизайн должен удовлетворять все текущие требования, с другой – быть гибким к последующим изменениям.

Те, для кого данный подход в новинку, и вовсе могут потеряться в количестве возможных вариантов, и нередко неосознанно возвращаются к привычным методикам, не имеющим объектно-ориентированного начала. Те же, кто уже поднаторел в ООАП, определенно знают какие-то «секреты» проектирования, но из нашего цикла статей по этой теме, наверняка, почерпнут новые. И надеемся, поделятся своими.

Пожалуй, самый главный такой «секрет» заключается в том, что каждую новую задачу не нужно решать с нуля. Гораздо удобнее воспользоваться существующими решениями, которые хорошо показали себя в прошлом, чем изобретать велосипед.

Самый главный секрет ООАП заключается в том, что каждую новую задачу не нужно решать с нуля.

Для повторного использования в объектно-ориентированных системах существуют паттерны, состоящие из описания классов и их взаимодействия. Человек, знакомый с ними, может адаптировать и применять подходящий паттерн к любой новой задаче, чем не только существенно сэкономит время, но и избежит ряда возможных ошибок.

Однако прежде чем переходить к рассмотрению конкретных паттернов, вспомним, в чем заключается объектно-ориентированный подход к проектированию и каких принципов он придерживается.

Три слона и черепаха ООАП

Существует четыре основных понятия. Они как три слона и черепаха, на которых держится весь объектно-ориентированный. Их необходимо понимать, уметь ими оперировать для грамотного ООАП:

Объект – некоторая сущность, обладающая определённым состоянием и поведением, которая имеет определенный набор свойств и операций над ними.

Рассмотрим для примера объект Исходящее письмо. Объектом является только то, что реально существует в нашей жизни – например, написанное на бумаге, отправленное в конверте по почте. Это тот объект, который мы можем изучать, определять его свойства и их допустимые значения, а также действия, которые с ним можно проводить.

Рассказываем про основы объектно-ориентированного анализа и проектирования (ООАП) и паттерны проектирования. Часть 1

Говоря про реализацию на проектах, объект – это то, что мы видим на этапе исследования. На исследовании могут быть как физические объекты, так и объекты сторонней системы. Например, Исходящие письма в электронной почте.

Класс – модель для создания объектов определенного типа, описывающая их структуру и определяющая алгоритмы для работы с этими объектами. Это шаблон, созданный на основе реального объекта, который мы изучаем.

Например, у нас есть объект Исходящее письмо, которое имеет определенное оформление, расположение реквизитной части, текст, подписи и прочее:

Рассказываем про основы объектно-ориентированного анализа и проектирования (ООАП) и паттерны проектирования. Часть 1

Для того, чтобы его оцифровать, мы используем класс Исходящий документ с набором свойств, необходимых нам в системе для описания объекта:

Рассказываем про основы объектно-ориентированного анализа и проектирования (ООАП) и паттерны проектирования. Часть 1

Экземпляр класса – конкретный объект в системе, созданный на основе класса. Сам класс в системе никак не визуализирован, к нему нет прямого доступа. Вся работа пользователей выполняется с его экземплярами. Экземпляр – это своего рода слепок класса, который содержит определенные значения свойств и с которым могут производиться действия. Экземпляр класса максимально приближен к реальному объекту, который мы автоматизируем.

В нашей системе в роли экземпляра класса выступает карточка документа. Все тот же пример, экземпляр класса Исходящего документа:

Рассказываем про основы объектно-ориентированного анализа и проектирования (ООАП) и паттерны проектирования. Часть 1

Интерфейс – структура программы, определяющая отношение с объектами, объединенные некоторым поведением.

Говорят об интерфейсе в общем смысле, к нему относят все то, что видят на экране пользователи. Но в ООАП интерфейс – это отдельный класс, который обладает набором методов для работы с элементами классов, его реализующих. Интерфейсы позволяют обращаться к элементам классов системы, не имея представления об их реальной структуре.

Базовые принципы

Объектно-ориентированный подход имеет четыре основных принципа: абстракция, инкапсуляция, наследование и полиморфизм. Несмотря на сложные и неочевидные названия, эти принципы достаточно просты и при ближайшем рассмотрении интуитивно понятны. Опишем каждый из них подробнее.

Абстракция – способность выделить значимую информацию из изучаемого объекта и исключить незначительную для определения набора характеристик объекта, доступных в программе.

На примере Исходящего письма, главной задачей на исследовании становится составление списка свойств (Имя, Номер, Дата документа и т.д.), и возможных действий над объектами класса, необходимых для автоматизации работы с ним в системе. От свойств, которые нам в системе не пригодятся, мы абстрагируемся, не переносим их из реального объекта в создаваемый класс.

Инкапсуляция – объединение данных и методов для работы с ними в едином классе и сокрытие части информации о внутренней структуре системы. При проектировании мы учитываем все свойства, методы и логику работы системы. Но для внешнего использования остается доступна только та часть, которая необходима пользователям. Инкапсуляция связана с понятием интерфейса. Все, что не входит в интерфейс, доступный пользователю, помещается в «капсулу» и прячется от глаз.

Наследование – отношение между классами, в котором один класс повторяет структуру и поведение другого класса. Класс-наследник содержит все свойства и методы класса-родителя, но может содержать свои собственные свойства и методы, которых у родителя нет.

Например, в системе есть родительский класс всех электронных документов, ElectronicDocument, который содержит определенный набор свойств и методов. Одним из его прямых наследников является класс официальных документов, OfficialDocument:

Рассказываем про основы объектно-ориентированного анализа и проектирования (ООАП) и паттерны проектирования. Часть 1

Так, согласно принципу наследования, класс OfficialDocument, содержит все те же свойства и методы, что и класс ElectronicDocuments, но дополняется собственными свойствами – DocumentKind, Subject, RegistrationNumber и так далее.

Полиморфизм – возможность использовать объекты с одинаковым интерфейсом, но с множеством реализаций. Чаще всего полиморфизм распространяется на методы. Так, примером полиморфизма может выступать регистрация документов. Данный метод одинаково выполняется для любого вида документов в системе, однако вариант его работы определяется настройками – документы могут иметь различный формат номера и быть помещены в разные журналы регистрации в зависимости от их видов и других параметров. В такой универсальности метода и заключается полиморфизм.

Паттерны

Паттерн – это допускающие многократное использование оптимизированные решения проблем проектирования, с которыми мы сталкиваемся каждый день. Вопреки расхожему мнению, паттерны не являются готовыми алгоритмами, помогающими справиться с проблемой, а лишь описывают подход на верхнем уровне. Реализация идеи паттерна в каждом конкретном случае может сильно отличаться, даже если условия его применения были одинаковые.

Чем нам могут помочь паттерны ООАП:

• Лучше понимать существующее решение, спроектированное с использованием объектно-ориентированного подхода.

• Составлять проектные решения с оптимальной трудоемкостью, как для аналитика, так и для разработчика.

• Учесть возможность масштабирования системы при проектировании за счет использования подходящих для этого паттернов.

• Улучшить понимание решения на этапе передачи проекта команде технической поддержки.

Один из вариантов классификации паттернов – классификация по их сложности:

Элементарные – базовые паттерны проектирования, которые являются основой для более сложных составных паттернов.

Промежуточные – паттерны, состоящие из двух-трёх элементарных паттернов.

Паттерны «Банды четырех» - паттерны, описанные в книге Э. Гаммы, Р. Хелма, Р. Джонсона и Д. Влиссидеса. «Паттерны объектно-ориентированного проектирования». В ней представлены уже достаточно сложные по структуре паттерны, перед рассмотрением которых лучше ознакомиться со всеми элементарными паттернами и вариациями промежуточных.

В следующих статьях мы уйдем глубже и расскажем про элементарные и промежуточные паттерны: Создание объекта (Create Object), Извлечение (Retrieve), Извлечение нового (Retrieve New), Получить доступ (Retrieve Shared), Наследование (Inheritance Relation), Абстрактный интерфейс (Abstract Interface), Паттерн наследования и абстрактного интерфейса (Fulfill Method). Эти знания откроют путь в глубоководный мир ООАП, где водятся и интересные рыбы-паттерны из «Банды четырех».

1717
23 комментария

Отличная статья для тех, кто только начинает знакомиться с объектно-ориентированным анализом и проектированием. Ключевые понятия и принципы даны в доступной и понятной форме, а рассмотрение паттернов проектирования позволяет глубже понять, как можно применять эти знания на практике. Рекомендую всем, кто хочет освоить эту тему!

4
Ответить

Комментарий недоступен

1
Ответить

Аналитики и разрабы должны, обязаны быть внутри одной терминологии

2
Ответить

Первая статья из цикла статей о паттернах дана для погружения в объектно-ориентированную парадигму, чтобы далее были понятны употребляемые термины.
Аналитики при проектировании продукта или модификаций используют язык понятный тем, для кого они описывают эти изменения. Аналитик и с заказчиком общается на одном языке, например, используя специфичную отраслевую терминологию, и с разработчиком.

Ответить

Как и ООП, так и паттерны банды четырёх не нужны в нормальном языке программирования, где есть поддержка функций как объектов первого класса и нормальная система типов как минимум с алгебраическими, а лучше — зависимыми типами.

Наследование классов (а не интерфейсов) тем более рак, от которого даже в современных ООП-подобных языках (типа Rust) уже начали уходить.

1
Ответить

ООП как и любой инструмент имеет свои достоинства и недостатки, а также область применения. Если используется язык ООП или у вас уже есть продукт написанный на языке ООП, то вы или адаптируетесь под его использование или полностью переписываете весь продукт на другом языке. Из двух зол обычно выбирают меньшее.

1
Ответить

Как говорил философ Сковорода: "Все сложное - ошибка"

1
Ответить