Объектно-ориентированный дизайн  -  опыт многократного использования

 

В моей предыдущей статье на эту тему (см. PC Week/RE, № 38/96, с. 48) было отмечено, что важнейшим свойством объектно-ориентированного подхода к разработке программ является поддержка многократного использования имеющихся решений. Благодаря этой поддержке, во-первых, экономится время на разработку за счет использования готового куска программы, а во-вторых, делается меньше ошибок, поскольку этот кусок уже отлажен и работает.

 

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

 

Современная практика многократного применения проектных решений при объектной модели заключается в использовании так называемых "образцов проектных решений" (design patterns). Термин был введен в обиход группой авторов книги "Образцы проектных решений" (Erich Gamma, Richard Helm, Ralph Jonhson, Jonh Vlissides. Design Patterns. Addison-Wesley, 1995). Ее выходу в свет предшествовали довольно обширные дискуссии в Интернете, но собственно выпуск книги придал законченную форму использованию образцов проектных решений.

 

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

 

До эпохи объектной ориентации подобные решения носили название алгоритмов. Алгоритмы варьировались от совершенно конкретных (например, вычисление какой-либо математической функции) до более-менее общих  -  алгоритмы сортировки или поиска. Всем известны такие замечательные сборники алгоритмов, как трехтомник Д. Кнута "Искусство программирования для ЭВМ" (М: "Мир", 1976) или серия алгоритмов, печатавшаяся в журнале Communication of ACM.

 

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

 

Разберем один из образцов проектных решений. Достаточно часто при разработке программной системы необходимо наличие не более одного объекта определенного класса. Примером является процесс, который не может устанавливать более одного соединения с базой данных, и все запросы к СУБД должны использовать только это соединение. Другим примером является редактор, в котором нельзя открывать более одного окна подсказки, а в случае попытки вывести еще одну подсказку система должна воспользоваться имеющимся окном. Как мы видим, приложения по сути своей абсолютно разные, однако они применяют одну и ту же структуру. Можно считать, что приложения используют один и тот же фрагмент объектной модели. Этот фрагмент описан в библиотеке проектных решений (в данном случае  -  в книге " Образцы проектных решений") в виде образца "Singlton".

 

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

 

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

 

Легко увидеть, что архитектор системы, зная этот образец (а еще лучше  -  набор различных образцов), во-первых, действует более осознанно, во-вторых, принимает решение, проверенное на практике, и, в-третьих, тратит минимум времени на его реализацию.

 

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

 

Значение образцов не исчерпывается экономией времени и усилий при проектировании системы, оно предоставляет удобный способ описания и обсуждения архитектуры системы. Естественно, это предполагает, что все участники дискуссии знают образцы и употребляют одни и те же названия для них. Представьте, насколько короче становится обсуждение, если вместо фразы "класс, который допускает создание не более одного объекта" можно сказать "Singlton"! Главное, конечно, не в лаконизме (хотя и он помогает), а в том, что все участники беседы точно понимают, о чем идет речь, не существует опасности быть неправильно понятым, и, следовательно, программная система будет реализована так, как она была задумана.

 

Усилия по систематизации, описанию и созданию новых образцов проектирования сейчас приняли форму ежегодных конференций по языку образцов программ (Pattern Languages of Program, PLoP). Цель этих конференций с очень небольшим количеством участников  -  ввести в обиход новые образцы. По материалам первой конференции в Монтичелло (шт. Иллинойс) была выпущена книга "Языки образцов проектирования программ" под редакцией Джеймса Коплиена и Дугласа Шмита (Pattern Languages of Program Design/Edited by J. Coplien, D. Schmidt. Addison-Wesley, 1995). Текущее состояние дел обсуждается в Интернете (конференция comp.objects, персональная страница Ральфа Джонсона http://st-www.cs.uiuc.edu/users/patterns.html).

 

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

 

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

 

Вполне возможно, эти образцы имеют ценность только для данной организации или для весьма специфичной предметной области. Быть может, описания некоторых из них в конце концов попадут в книги и статьи. Главное не в этом, а в том, что, используя отработанную форму описания, эти образцы можно довести до всей организации.

 

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

 

Александр Фридман

 

С автором можно связаться по адресу: afridman@glas.apc.org.

Версия для печати