УДК 001.98
ИСПОЛЬЗОВАНИЕ ПАТТЕРНОВ ДЛЯ ПРОЕКТИРОВАНИЯ ИНФОРМАЦИОННЫХ СИСТЕМ
Владимир Александрович Мордвинов, профессор, канд. техн. наук, Лауреат государственной премии в области образования. Зав. кафедры инструментального и прикладного программного обеспечения Института
информационных технологий, E-mail: mordvin-vlad@list.ru Московский технологический университет (МИРЭА) https://www.mirea.ru/
Цель работы - исследование паттернов как инструмента проектирования информационных систем. Дается анализ методов проектирования информационных систем. Показаны проблемы проектирования и эксплуатации информационных систем. Статья исследует паттерны как объективный феномен. Показана связь паттернов с качеством информационных систем. Статья раскрывает содержание паттернов, важных для обеспечения качества информационной системы. Описаны преимущества применения паттернов. Статья показывает, что применению паттернов должно предшествовать изучение информационной ситуации, в которой находится проектируемая информационная система.
Ключевые слова: информационные системы, программное обеспечение, проектирование, паттерны проектирования, информационная ситуация, качество.
1. Введение
Концепция разработки программной архитектуры для применения в информационных системах как отдельной научной дисциплины сформировалась в начале 90-х годов прошлого века и к настоящему моменту в этой области исследования существует, как обширный теоретический аппарат, так и большое количество прикладных исследований. Это направление тесно связано с методами проектирования информационных систем [1-3]. Современный этап развития информационных систем (ИС) и их программного обеспечения характеризуется повышением сложности информационных си-
программного обеспечения. Высокие темпы развития программного обеспечения, опережающего развитие ИС [5], приводят к быстрому моральному старению создаваемых и эксплуатируемых систем. Это приводит к уменьшению эффективности ИС, создаваемых на основе жестких схем проектирования и схем проектирования «с нуля». Выделяют три подхода к решению данной проблемы: повторное использование кода, внедрение гибких (agile) методологий проектирования ИС и программных систем и универсализация создаваемых ИС [6]. Существует еще одно направление, называемое системной инженерией [7] и направление онтологической инженерии [8, 9].
Повторное использование кода является известным подходом к уменьшению стоимости разработки [6]. Оно включает ряд типовых приемов: копирование кода, структурное программирование, стандартные библиотеки, объектно-ориентированный подход (ООП), компонентное программирование, сервисно-ориентированные архитектуры (СОА), использование типовых шаблонов (паттернов) проектирования, использование типовых решений (frameworks), аспектно-ориентированное программирование.
Другой подход [10] предполагает использовании гибких методов проектирования, типа: экстремальное программирование, Scrum, Lean Development, Crystal Methods, Extreme Programming, которые позволяют отслеживать изменения требований заказчиков.
Третий подход предполагает переход от специализированных ИС к проблемно-ориентированным системам [11], предназначенным для решения некоторого класса за-
стем [4] и сложности
Мордвинов В.А.
дач. В качестве реализации данного подхода можно рассматривать доменные архитектуры (Domain Architectures) и создание линеек продуктов (Software Product Line Engineering) [12].
Исследование паттернов. Одно из направлений исследований в области создания информационных систем - это изучение и применение паттернов проектирования [13-16]. Идея применения паттернов проектирования - это применение идей повторного использования (reusability - в англоязычных работах) в области проектирования систем. Методологически паттерн представляет собой информационную конструкцию [17, 18]. При создании различного рода систем часто эффективнее использовать существующие проектные решения подобных задач, чем разрабатывать новые. Возможность такого использования определяется онтологиями [19] существующих решений.
Описанные и систематизированные решения проектных задач и называются паттернами проектирования. В работе [20] сказано следующее: «Паттерны проектирования не появились сразу в готовом виде; многие разработчики, искавшие возможности повысить гибкость и степень пригодности к повторному использованию своих программ, приложили много усилий, чтобы поставленная цель была достигнута. В паттернах проектирования найденные решения отлиты в краткую и легко применимую на практике форму».
Польза каждого отдельного паттерна состоит в том, что он описывает решение целого класса абстрактных проблем, а тот факт, что каждый описанный паттерн имеет свое имя, облегчает обсуждение различных вариантов проекта между разработчиками системы, так как они могут ссылаться на названия известных паттернов. За счёт применения паттернов производится унификация терминологии, названий различных модулей и элементов проекта и сокращаются сроки анализа и проектирования. Паттерны трансформирую разработку с нуля в адаптацию известного и проверенного. Существует связь между паттернами проектирования систем и атрибутами качества этих систем.
Работы исследователей из Института программной инженерии университета Кар-неги-Меллон (SEI) [21] утверждают, что для заданного класса программных систем и соответствующего им множества атрибутов качества существует информационный морфизм, ставящий в соответствие каждому атрибуту качества, входящему в заданное множество, некоторое множество паттернов проектирования, улучшающих эти атрибуты качества. Таким образом, для класса программных систем - специализированных ИС, и заданного множества атрибутов качества
Q = {qi | I sIq},
где Iq - индексное множество множества Q,
3M: Q -P, где P = {pi | I sIp}
I - некоторое множество подмножеств множества всех описанных паттернов проектирования, а Ip - индексное множество множества P. Причем это отображение характеризуется следующим свойством: если pi= M(qi), то применение паттернов проектирования, входящих в множество pi , при разработке систем этого класса приводит к улучшению атрибута качества qt.
Однако, пересечение множеств pi не является пустым множеством - некоторые паттерны оказывают влияние более чем на один атрибут качества, то есть
В qt ,q s Q | M(qt)rM(q) ф 0.
Это следует учитывать при проектировании, поскольку может привести к различным побочным эффектам применения паттернов. Для каждого выделенного атрибута качества определено его отображение на множество описанных паттернов проектирования, улучшающих этот атрибут качества. Описание соответствующих отображений имеет вид.
Q1 — Р1={тактика согласованности [22] (concurrency tactic); тактика кэширования [23] (caching tactic); операция разделения целого [24] (separation unit operation) }
Q2 — Р2={тактика согласованности [22] (concurrency tactic); тактика кэширования [23] (caching tactic); операция разделения целого [24] (separation unit operation) }
Q3 — Р3={тактика опубликованных интерфейсов [25] (published interfaces tactic); паттерн дизайна доступа к данным [26] (data accessor design pattern) }
Q4 —Р4={тактика повышения семантической связности (maintain semantic coherence tactic); стиль обобщения[67] (generalization style) }
Q5 — Р5={паттерн проектирования посредника [20] (mediator design pattern); стиль обобщения [27] (generalization style); паттерн проектирования обертки [20] (wrapper design pattern) }
Ниже приведено описание паттернов проектирования, которые входят во множества pt.
Паттерн тактика повышения семантической связности (maintain semantic coherence tactic). Паттерн описан в работе [22]. Цель применяемой тактики заключается в том, чтобы, проектируя архитектуру системы и тем самым разбивая множество контрактов A (как это было описано в разделе 3.1 настоящей работы) на подмножества, обеспечить исполнение компонентом всех контрактных обязанностей и одновременно свести зависимость от других компонентов к минимуму. Для достижения этой цели, проектируя ответственность компонента, следует выбрать такой набор контрактных обязанностей, который характеризуются большей семантической связностью.
Под семантической связностью компонента имеются в виду мера внутренних связей между обязанностями компонента. Семантическую связность следует оценивать исходя из набора ожидаемых изменений. В этой связи следует упомянуть такой подвид рассматриваемой тактики, как общие абстрактные службы (abstract common services). Предоставление общих служб посредством специализированных модулей, как правило, рассматривается только как обеспечение возможности многократного применения разработанного кода. Общие службы действительно обеспечивают возможность многократного применения разработанного кода, однако абстрагирование общих служб также обеспечивает модифицируемость. В случае, если общие службы абстрагированы, то внесение в них изменений производится единовременно и не затрагивает те модули, которые к этим службам обращаются. Более того, модификация компонентов посредством модификации такого рода служб не оказывает никакого влияния на пользовательский интерфейс. Таким образом, рассматриваемая тактика не только предусматривает локализацию изменений, но и предотвращает волновой эффект.
Паттерн тактика опубликованных интерфейсов (published interfaces tactic). Паттерн описан в работе [25]. Идея его состоит в том, что если компонент В зависит от имени или сигнатуры интерфейса компонента А, то за счет стабилизации этого интерфейса и его синтаксиса, изменяя компонент А, вполне возможно компонент В оставить без изменений. Для стабилизации интерфейса следует отделить его от реализации, поскольку в результате появляется возможность создания абстрактных интерфейсов, маскирующих вариации. Вариации можно ограничить существующей ответственностью компонента или легко заменить одну реализацию компонента другой.
Среди образцов, реализующих эту тактику, необходимо упомянуть следующие: -Введение новых интерфейсов: новые службы и данные можно открывать через новые интерфейсы — в таком случае существующие интерфейсы обходятся без изменений и сохраняют за собой старые сигнатуры. Введение «заглушки»: если для выполнения модификации разрабатываемой системы компонент А требуется удалить, и при этом компонент В зависит исключительно от сигнатуры компонента А, то тогда путем создания объекта-«заглушки», имитирующего наличие А, можно предотвратить внесение изменений в компонент В.
Этот паттерн имеет следующее ограничение по применению - нельзя гарантировать результативность применения этой тактики при наличии семантической зависимости компонента В от компонента А.
Паттерн дизайна доступа к данным (data accessor design pattern). Паттерн описан в работе [26]. Идея паттерна состоит в том, что доступ к каждой категории данных (геоданные, атрибутивные данные, данные в бинарном виде) инкапсулируется в отдельную подсистему, предоставляя доступ к данным только через логические операции. Такая инкапсуляция позволяет изменить источник данных и формат без побочных эффектов, отражающихся на подсистеме, которая обращается к данным.
Паттерн тактика согласованности (concurrency tactic). Паттерн описан в работе [22]. Этот паттерн требует использования многопоточности везде, где это возможно. Многопоточность позволяет обрабатывать различные запросы в разных потоках тем самым добиваясь более эффективного использования имеющихся ресурсов. Архитектура системы должна планироваться так, чтобы это использование многопоточности стало возможным.
Паттерн тактика кэширования (caching tactic). Паттерн описан в работе [23]. Этот паттерн требует повторного использования данных и вычислений за счет увеличения за счет сохранения их в памяти. Кэширование приводит к значительному улучшению производительности и облегчению восстановления данных. Использование этого паттерна при разработке архитектуры требует учета возможности повторного использования данных и вычислений за счет увеличения за счет сохранения их в памяти при проектировании интерфейсов компонент.
Паттерн стиль обобщения (generalization style). Паттерн описан в работе [28]. Это паттерн следует применять в случаях, когда предполагается, что существует базовая функциональность подсистемы, которая должна сохраняться во всех последующих версиях этой подсистемы. Идея этого паттерна - подсистему следует проектировать так, чтобы повышение функциональности системы не меняло ее базовую функциональность, то есть, чтобы базовую и расширенную версию системы связывало отношение обобщения. Этот паттерн является обобщением на область проектирования систем известного в объектно-ориентированном программировании принципа подстановки Барбары Лисков.
Паттерн операция разделения целого (separation unit operation). Паттерн описан в работе [24]. Идея этого паттерна - при проектировании архитектуры следует локализовать в разных компонентах службы, которые должны обрабатывать запросы в режиме реального времени, и службы, которые могут обрабатывать запросы не в режиме реального времени. Это уменьшает задержку обработки тех запросов, которые должны обрабатываться в режиме реального времени, за счет отсутствия взаимодействия с посредником. К тому же такое разделение позволяет использовать различные технологии обработки запросов, поскольку, как правило, технология, используемая для обработки в режиме реального времени, отличается от технологии, используемой для обработки в не режиме реального времени.
Паттерн проектирования посредника (mediator design pattern). Паттерн описан в работе [20]. При декомпозиции системы на отдельные компоненты (то есть при проектировании архитектуры системы) в получившейся структуре объектов может возникнуть много связей. Это разбиение системы на множество объектов должно привести к уменьшению сложности, однако слишком большое количество взаимосвязей может привести к обратному эффекту. Если взаимосвязей слишком много, то существенно изменить поведение системы без ее глубокой переработки практически невозможно, поскольку поведение распределено между многими объектами.
Этот паттерн обеспечивает взаимодействие множества компонентов путем создания объекта, инкапсулирующего способы взаимодействия этого множества компонентов между собой. Выгодами применения этого паттерна является слабая связанность компонентов и избавление от необходимости независимым компонентам явно ссылать-
ся друг на друга.
Паттерн проектирования «обертки» (wrapper design pattern). Паттерн описан в работе [20]. Этот паттерн предназначен для случая, когда в системе нужно использовать компонент, недоступный по какой-либо причине для модификации. Этот компонент поддерживает требуемые данные и поведение, но имеет неподходящий интерфейс. В таком случае создается объект - «обертка». Интерфейс этого объекта соответствует требованиям системы, а вызовы его методов преобразуются в вызовы методов используемого компонента.
Этот паттерн можно использовать, например, для соединения специализированной ГИС с подсистемой, осуществляющей интеллектуальный анализ данных.
Заключение. Следует отметить, что, несмотря на определенные успехи, проблема создания высокоэффективных методологий проектирования ИС очень далека от своего разрешения. Можно констатировать, что паттерны проектирования, используемые при проектировании информационных систем, представляет собой формализованное описание уже решенной задачи проектирования. Они обладают оценкой надежности и опытом эксплуатации. Они имеют рекомендации по применению проектного решения в различных информационных ситуациях. Поэтому использованию паттернов должно предшествовать построение модели информационной ситуации [29] и ее анализ. Паттерн проектирования обязательно имеет устойчивую дефиницию. Паттерн проектирования позволяет применять удачное решение, для схожей информационной ситуации. Следует подчеркнуть, что важным начальным этапом при работе с паттернами является адекватное моделирование рассматриваемой информационной ситуации и информационной позиции [30] объекта проектирования в этой ситуации. Это является обязательным условием для постановки задачи и для выбора подходящих паттернов проектирования в этой ситуации.
Адекватное использование паттернов проектирования дает ряд преимуществ. Отметим некоторые. Модель информационной системы, построенная в терминах паттернов, является структурированным описанием элементов и связей, которые значимы при решении поставленной задачи [31]. Модель информационной системы, построенная с использованием паттернов проектирования, более наглядна в изучении, чем новая неизученная модель. Модель информационной системы, построенная с использованием паттернов проектирования, позволяет глубоко и всесторонне проработать архитектуру разрабатываемой системы с использованием специального языка [32]. Применение паттернов проектирования повышает надежность ИС. Применение паттернов проектирования упрощает расчет устойчивости системы к вариации требований. Большое значение имеют паттерны при агрегации системы и интеграции систем. Также следует отметить, что совокупность паттернов проектирования представляет собой дескриптор, который, фактически классифицирует создаваемые системы с помощью дескрипторной классификации [33].
Литература
1. Мордвинов В.А. Авторизированные лекции по общей теории сложных динамических информационных систем. - М.: МИРЭА, Информика, НИИ «Восход», 2004. 47 с.
2. Мордвинов В.А. Онтология моделирования и проектирования семантических информационных систем и порталов: справочное пособие. - М.: МГДДЮН, 2005. 240 с.
3. Ильин И.В., Мордвинов В.А., Петров К.А., Трифонов Н.И., Финагин Л.А. Онтология моделирования и проектирования семантических информационных систем и порталов. - М.: МГТУ МИРЭА, 2008. 283 с.
4. Монахов С.В., Савиных В.П., Цветков В.Я. Методология анализа и проектирования сложных информационных систем. - М.: Просвещение, 2005. 264 с.
5. Кудж С.А., Цветков В.Я. Закономерности информационного поля: Монография. - М.: МАКС Пресс, 2017. 80 с.
6. Шамгунов Н.Н., Корнеев Г.А., Шалыто А.А. State Machine новый паттерн объектно-ориентированного проектирования //Информационно-управляющие системы. 2004. № 5. С. 13-25.
7. Дешко И.П., Кряженков К.Г., Цветков В.Я. Системная и программная инженерия: Учебное пособие. - М.: МАКС Пресс, 2018. 80 с.
8. Водяхо А.И. и др. Онтологический подход к проектированию проблемно-ориентированных информационных систем // Изв. СПбГЭТУ «ЛЭТИ». 2010. № 5. С. 42.
9. Иванников А.Д., Кулагин В.П., Миронов А.А., Мордвинов В.А., Сигов А.С., Тихонов А.Н., Цветков В.Я. Синергетическая теория информационных процессов и систем: Раздел V. Онтология информационных процессов и систем: Учебное пособие / под ред. А.Б.Фоминой. - М.: МГДД(Ю)Т, МИРЭА, Информика, 2009. 62 с.
10. Левыкин В.М. Паттерны проектирования требований к информационным системам: моделирование и применение: монография [Текст] / В.М. Левыкин, М.В. Евланов, М.А. Керно-сов. - Харьков: ООО «Компашя «Смгг», 2014. 320 с.
11. Цветков В.Я. Разработка проблемно ориентированных систем управления - М.: ГКНТ, ВНТИЦентр, 1991. 131 с.
12. Duffy D. Domain Architectures: Models and Architectures for UML Applications. John Wiley & Sons, 2004.
13. Noh S. et al. Pilot beam pattern design for channel estimation in massive MIMO systems // IEEE Journal of Selected Topics in Signal Processing. 2014. Т. 8. № 5. С. 787-801.
14. Jiang B., Chen C., Bu J. CoDesign-A collaborative pattern design system based on agent //Computer Supported Cooperative Work in Design, The Sixth International Conference on, 2001. -IEEE, 2001. С. 319-323.
15. Hu Z.H. et al. An interactive co-evolutionary CAD system for garment pattern design //Computer-Aided Design. 2008. Т. 40. № 12. С. 1094-1104.
16. Михеева Т. И., Головнин О. К., Федосеев А. А. Паттерновое проектирование интеллектуальных транспортных систем // Современные проблемы науки и образования. 2012. № 6. С. 27-32.
17. Tsvetkov V.Ya. Information Constructions // European Journal of Technology and Design. 2014. Vol (5). N 3. P. 147-152.
18. Дешко И.П. Информационное конструирование: Монография. - М.: МАКС Пресс, 2016. 64 с. ISBN 978 -5-317-05244-7.
19. Палагин А.В., Крывый С.Л., Петренко Н.Г. Онтологические методы и средства обработки предметных знаний: монография - Луганск: изд-во ВНУ им. В. Даля, 2012. 324 с.
20. Гамма Э., Хелм Р., Джонсон Р., Влиссидес Дж. Приемы объектно-ориентированного проектирования. Паттерны проектирования. - СПб.: Питер, 2007. 366 c.
21. Bass L., Clements P., Kazman R. Software Architecture in Practice. - Addison Wesley, 2003. 560 p.
22. Bachmann F., Bass L., Klein M. Deriving Architectural Tactics: A Step Toward Methodical Architectural Design. Technical Report (CMU/SEI-2002- TR-025). - Pittsburgh, PA: Software Engineering Institute, Carnegie Mellon University, 2003. -
URL:http://www.sei.cmu.edu/reports/03tr004.pdf (дата обращения: 22.12.2017).
23. Metadata and GIS, White Paper. - CA, USA: ESRI, 2002. - URL: http://www.esri.com/library/whitepapers/pdfs/metadata-and-gis.pdf(дата обращения: 22.12.2011).
24. Kazman R., Bass L. Toward Deriving Software Architectures From Quality Attributes. (CMU/SEI-94-TR-10). Pittsburgh, PA: Software Engineering Institute, Carnegie Mellon University, 1994. - URL:http://www.sei.cmu.edu/reports/94tr010.pdf (дата обращения: 22.12.2011г.).
25. Sondheim M., Garde Is K., Buehler K. GIS Interoperability // Geographical Information Systems: Principles and Technical Issues. Vol. 1. - N.Y., USA: Wiley, 1999. Р. 347-358.
26. Nock C. Data Access Patterns Database Interactions in Object-Oriented Applications. -Addison-Wesley, 2004. 469 p.
27. Dromey R.G. Cornering the Chimera // IEEE Software. 1996. Vol. 13. N 1. P. 33-43.
28. Clements P., Kazman R., Klein M. Evaluating SoftwareArchitectures: Methods and Case Studies. - Addison Wesley, 2002. 304 p.
29. Tsvetkov V.Ya. Information Situation and Information Position as a Management Tool // European researcher. Series A. 2012. Vol. (36). N. 12-1. p. 2166-2170.
30. Tsvetkov У^а. Dichotomic Assessment of Information Situations and Information Superiority // European researcher. Series A. 2014. Vol. (86). N. 11-1. P. 1901-1909.
31. Dunn C.L., Hollander A.S., Cherrington J.O. Enterprise information systems: A pattern-based approach. - McGraw-Hill/Irwin, 2005.
32. Цветков В.Я. Язык информатики // Успехи современного естествознания. - 2014. № 7. C.129-133.
33. Тоноян Л.Г. Основы теории классификации в трактатах Аристотеля // Логико-философские штудии. 2012. № 6. С. 28-36.
The use of patterns for the design of information systems Mordvinov V.A., Professor, Ph.D.
He graduated^ from the Moscow State Technical University (MIREA) in 1969, the winner of the Government of the Russian Federation in the field of education. Head of the Department of Instrumental and Applied Software of the Institute of Information Technologies of Moscow Technological University (MIREA)
The aim of the work is the study ofpatterns as a tool for designing information systems. The article analyzes the methods of designing information systems. problems of designing and operating information systems are described in the article. The article explores patterns as an objective phenomenon. The article shows the relationship ofpatterns to the quality of information systems. The article reveals the content of the patterns that are important for ensuring the quality of the information system. The article describes the advantages of applying patterns. The article shows that the use of patterns should be preceded by the study of the information situation in which the projected information system is located.
Keywords: information systems, software, design, design patterns, information situation, quality.
УДК 004.02; 004.03; 004.8; 52-38; 528
КОНСТРУКТИВНАЯ АЛГОРИТМИЗАЦИЯ
Алексей Владимирович Буравцев, зам. директора Института информационный технологий и автоматизированного проектирования
E-mail: misterj@mail.ru Московский технологический университет (МИРЭА) https://www.mirea.ru/
В статье предложен подход к построению алгоритмов на основе применения модели информационная конструкция. Этот подход назван конструктивная алгоритмизация. Конструктивная алгоритмизация использует принципы концептуального проектирования и концептуального программирования. Конструктивная алгоритмизация использует свойства концептуальных алгоритмов. Конструктивная алгоритмизация использует требования стандарта качества программного обеспечения. Совокупность этих научных направлений привела к созданию нового подхода.
Ключевые слова: алгоритм, качество, информационная конструкция, концептуальное программирование, информационное моделирование, конструктивная алгоритмизация.
Введение. Алгоритмы, которые применяют для обработки информации в сложных системах, принято делить на иерархические и не иерархические. Это разделение происходит по качественным характеристикам данных, полученных в результате обработки. Как правило, данные группируют и формируют некие кластеры данных по качественным признакам. Иерархические алгоритмы на выходе задают некую иерархию данных или кластеров данных. Неиерархические алгоритмы это такие, которые не создают иерархию в процессе обработки и дальнейший анализ может ее создать. Иерархические алгоритмы [1] включают две группы: агломеративные алгоритмы и дивизим-