УДК 004.415.2
ПРИМЕНЕНИЕ ПРОЕКТНЫХ ПАТТЕРНОВ ДЛЯ РАЗРАБОТКИ КОМПЬЮТЕРНЫХ ОБУЧАЮЩИХ СИСТЕМ* Е.А. Черткова
Кафедра «Техническая кибернетика и автоматика»,
Московский государственный университет инженерной экологии
Представлена профессором А.Э. Софиевым и членом редколлегии профессором Н.Ц. Гатаповой
Ключевые слова и фразы: артефакт; архитектура; объектно-ориентированное проектирование; паттерн; повторное использование.
Аннотация: Рассматривается стратегия повторного использования шаблонов при объектно-ориентированном проектировании программных систем. Описывается применение одной из категорий шаблонов, а именно проектных паттернов (Decorator и Strategy) в моделях компьютерных обучающих систем.
Введение
Индустрия разработки компьютерных обучающих систем, которые относятся к классу программных систем, находится в стадии становления, и одно из направлений дальнейшего ее развития связано с совершенствованием методологии проектирования программного обеспечения для образовательной отрасли. Это направление обусловлено современной тенденцией мировой программной индустрии - переносом основного акцента в разработке систем с программирования на проектирование.
Реализация этого принципа для совершенствования разработки компьютерных обучающих систем должна осуществляться с использованием современных систем автоматизированного проектирования на основе объектно-ориентированных технологий. Подход, принятый в объектно-ориентированном анализе и проектировании, ведет к объединению системного анализа с процессом логического проектирования и, благодаря их применению в течение всего жизненного цикла разработки компьютерных обучающих систем, позволяет преодолеть проблемы трассировки между моделями системы.
Целью анализа и проектирования компьютерных обучающих систем является создание устойчивой архитектуры приложений, разработка подробного проекта на основе требований и адаптация проекта к среде реализации. С целью развития разработанной методологии создания компьютерных обучающих систем реализована концепция современной программной инженерии по применению проектных паттернов - образцов проектирования [5]. Повторное использование паттернов в последующих проектах компьютерных обучающих систем способствует более быстрому конструированию моделей и уменьшению зависимости от
* Принято к печати 16.11.2006 г.
изменяющихся требований. Применение проектных образцов особенно актуально при разработке широко востребованных в настоящее время компьютерных обучающих систем со сложным графическим интерфейсом, ориентированных на Интернет и подлежащих адаптации к частым изменениям требований.
В статье рассматриваются некоторые вопросы стратегии повторного использования элементов программных систем - шаблонов и приводятся результаты применения одной из категорий шаблонов, а именно проектных паттернов, в моделях компьютерных обучающих систем.
Стратегия повторного использования
Объектно-ориентированный подход к разработке компьютерных обучающих систем с использованием универсального языка моделирования (Unified Modeling Language - UML) и CASE-средства IBM Rational Rose позволяет создавать визуальные модели, обобщенные архитектурными и процедурными представлениями [4]. Системное проектирование программных систем заключает в себе два основных вопроса: архитектурное проектирование и детализированное проектирование. Архитектурное проектирование охватывает многоуровневую организацию классов и пакетов, распределение процессов по вычислительным средствам, повторное использование и управление компонентами. Детализированное проектирование обращено к моделям кооперации, необходимым для реализации функциональных возможностей системы, зафиксированных в прецедентах.
Разработку архитектуры следует рассматривать как предварительное условие конструирования, поскольку качество архитектуры определяет концептуальную целостность системы, которая в свою очередь определяет итоговое качество системы. Хорошая программная система, наряду с выполнением возложенных на нее функций, демонстрирует гармоничный и сбалансированный проект, благодаря которому она легко поддается модификации.
Поскольку архитектура создается на ранних стадиях жизненного цикла продукта, от ее качества зависит и результат всех последующих этапов: разработки системы, интеграции, тестирования и модификации. Непродуманная архитектура дискредитирует сам остов системы, поскольку мелких исправлений недостаточно и требуется кардинальная переделка проекта. Эффективность вложений в разработку архитектуры обуславливается существенными нисходящими последствиями принятия архитектурных решений, а также относительной экономичностью проверки и наладки архитектуры.
Одним из важнейших проектных факторов, который влияет как на архитектурные решения, так и на вопросы детализированного проектирования, является повторное использование элементов программы [1]. Стратегия проектирования с повторным использованием предполагает максимальное применение уже имеющихся удачных программных или инструментальных решений, полученных в серии успешных разработок программных систем.
Реализация повторного использования зависит не только от применения объектно-ориентированной технологии и корректного описания классов, но и от многих технических, организационных и социальных аспектов разработки программных систем. Предпосылкой ускорения процесса перехода на компоненты многократного использования является применение стандартного языка моделирования Unified Modeling Language (UML), обладающего свойствами расширяемости и хорошо определенной семантикой. В UML повторное использование (reuse) определяется как «использование уже существующего артефакта (artefact)» [2].
Очевидным преимуществом повторного использования компонентов в программных системах является снижение общей стоимости проекта и сокращение времени на его разработку и тестирование. Однако значительного роста производительности и качества программного обеспечения можно достигнуть только за счет повышения уровня абстракции компонентов. Абстрактные артефакты менее детализированы и в меньшей степени зависят от аппаратных средств и других ограничений реализации. Но менее детализированный объект в меньшей степени поддается интерпретации. В случаях, когда важны расширяемость или семантическое богатство языка, может потребоваться большая детализация, что до некоторой степени может усложнить повторное использование.
Среди образцов для повторного использования наиболее распространенными являются следующие категории шаблонов: анализа, архитектуры, проектирования, кодирования. Основное различие между категориями образцов состоит в уровне абстракции. Например, архитектурные шаблоны предназначены для работы со структурой программных систем, подсистем или компонентов и их взаимоотношениями. Шаблоны проектирования, напротив, работают на уровне классов и объектов и базируются на проверенных решениях проблем, которые возникают при проектировании программного обеспечения в определенном контексте [3]. Для шаблонов проектирования в дальнейшем будем использовать термины «паттерны» (pattern) или «проектные паттерны», поскольку термин «шаблоны» употребляется в отечественной литературе для данной предметной области чаще всего как синоним шаблонов кодирования.
Решение проблемы повторного использования сводится к выбору между повторным использованием вышеназванных образцов. Эти варианты выбора не являются взаимно исключающими - напротив, рекомендуется применять комплексную стратегию.
Применение проектных паттернов
Проектные паттерны появились из идей, выдвинутых Кристофером Александером (Christopher Alexander), который предложил эффективные обобщенные паттерны разработки конкретных проектов в строительстве и архитектуре, а впоследствии обосновал применение паттернов для всех этапов разработки абстрактных систем: анализа, проектирования и реализации. Он ввел следующее определение паттерна: «Каждый шаблон представляет собой правило, состоящее из трех составляющих, которые выражают отношения контекста, проблемы и решения».
Более общее определение принадлежит Мартину Фаулеру (Martin Fowler): «Паттерн есть идея, которая была однажды реализована и, вероятно, может быть использована в будущем». Эти определения довольно точно характеризуют смысл понятия паттерна проектирования, рассматривая его в контексте использования объектно-ориентированных принципов, таких как инкапсуляция, наследование и полиморфизм.
В реальном виде паттерны представляются набором объектов и классов, которые определенным образом взаимосвязаны между собой. Конкретная реализация паттерна направлена на непосредственное решение поставленной задачи по упрощению дизайна и проектированию эффективной и доступной системы.
В стратегии повторного применения паттернов придается особое значение многократному использованию, при котором в распоряжение разработчиков предоставляются идеи и примеры кооперативного взаимодействия объектов, разработки, хорошо зарекомендовавшие себя в практике и ведущие к понятным и масштабируемым решениям. Проектный паттерн именует, абстрагирует и идентифицирует ключевые аспекты структуры общего решения, которые и позволяют применить его для создания повторно используемого дизайна. При описании каждого
паттерна внимание концентрируется на конкретной задаче объектно-ориентированного проектирования.
Следует подчеркнуть возрастающую роль паттернов как архитектурных сущностей в связи с новыми тенденциями в разработке программного обеспечения, в частности переноса акцента с написания кода на моделирование. С этой инициативой в 2001 г. выступил международный консорциум OMG, предложив идею модульно-управляемой архитектуры - Model Driven Architecture (MDA) [2]. MDA является частью более крупной тенденции в индустрии программного обеспечения к наслаиванию дополнительных уровней абстракции над используемыми аппаратными средствами, а именно:
- языки высокого уровня заменяют языки ассемблера;
- библиотеки и каркасы заменяют изолированные сегменты кода, облегчая повторное использование;
- паттерны проектирования заменяют код, специфичный для отдельного проекта.
Эта тенденция отражает возрастающую роль моделей для достижения конечной цели процесса разработки программного обеспечения - работающего кода программы.
Проиллюстрируем вышеописанные концепции применения образцов проектирования примерами использования структурного паттерна Decorator и паттерна поведения Strategy в объектно-ориентированных моделях компьютерных обучающих систем.
Системный анализ наиболее продуктивных проектов компьютерных обучающих систем, которые были созданы с участием автора и реализованы в образовательной сфере, позволил идентифицировать проектные паттерны, повторное применение которых в последующих проектах способствовало более быстрому конструированию моделей и уменьшению зависимости от изменяющихся требований. В результате анализа проектная модель была представлена в виде пакетов, объединяющих их элементы по классам, которые являются абстрактными представлениями конкретных составляющих модулей интегрированной обучающей системы: компьютерных учебников, тестов и тренажеров. Эта процедура упростила идентификацию проектных паттернов для каждого отдельного модуля системы и придала ей свойства расширяемости, так как пакетная архитектура позволяет добавлять новые модули в модель компьютерной обучающей системы.
На рис. 1 представлен фрагмент диаграммы предметной области, отражающий наполнение объекта Lection (Лекция) со стандартным механизмом наследования. Данное решение было удовлетворительным при небольшом числе параметров и неизменном наполнении объектов. Для обеспечения независимости абстрактного представления материалов компьютерного учебника от их физического наполнения и обеспечения формирования представления учебных материалов в проектной модели идентифицирован и применен паттерн Decorator (рис. 2).
Данный паттерн является структурным, компонующим объекты для получения новой функциональности. Дополнительная гибкость в этом случае связана с возможностью изменить композицию объектов во время выполнения, что недопустимо для статической композиции классов. Применение паттерна Decorator ведет к отделению процедуры создания цепочки объектов от процедуры ее непосредственного использования и, тем самым, ограждает объект-клиент от каких-либо изменений в связи с появлением новых дополнительных требований по расширению функциональности (в данном примере - типов мультимедийности фрагментов лекции). Таким образом, паттерн Decorator позволяет описать динамическое добавление объектам новых обязанностей и рекурсивно компоновать объекты с целью реализации заранее неизвестного числа дополнительных функций.
Reference
Lection
Header
Text
Picture
. 1
Video Sound
Рис. 1. Фрагмент диаграммы предметной области со стандартным механизмом наследования
Client
Lection
♦Gen()
LecComponent
♦Gen()
~к
LectDecorator
^>Lect : LecComponent
♦Gen()
0.. 1
HeaderDecorator PictureDecorator TextDecorator
♦Gen() *GenHeader() *Gen() *GenPicture() ♦Gen() *GenText()
RefDecorator VideoDecorator SoundDecora tor
*Gen() ♦GenRef() ♦Gen() *GenVideo() ♦Gen() *GenSound()
Рис. 2. Применение проектного паттерна Decorator в модуле «Компьютерный учебник»
Выбор стратегии (алгоритма)
Контекст О > Стратегия генерации
^Интерфейс Генерации() ^Интерфейс Алгоритма()
1
Начальный уровень Сложный уровень
^Интерфейс АлгоритмаО ^Интерфейс АлгоритмаО
______Средний уровень
^Интерфейс Алгоритма()
Рис. 3. Применение паттерна Strategy для обеспечения поддержки различных алгоритмов выбора заданий для модуля «Тренажер»
Анализ общности и изменчивости, как первичный инструмент выделения объектов, позволил найти концептуальное решение (общность) и подготовить решение на уровне реализации (каждая конкретная вариация) для идентификации проектного паттерна Strategy в модулях компьютерной обучающей системы «Тест» и «Тренажер» (рис. 3). Применение паттерна Strategy в вышеназванных модулях обусловлено необходимостью идентификации алгоритмов генерации наборов учебно-тренировочных заданий, а также обработки изменений в алгоритмах независимо от модулей. Паттерн Strategy - это способ определить семейство алгоритмов, решающих концептуально одну и ту же задачу, но различающихся между собой способом ее решения.
Включение данного паттерна в модель позволило упростить добавление новых алгоритмов генерации набора заданий (вопросов) для теста и тренажера и отделить процедуру выбора алгоритма от его реализации. При этом класс «Стратегия генерации» определяет, как будут использоваться алгоритмы генерации комплекта заданий, класс «Контекст» использует конкретные алгоритмы посредством ссылки на тип абстрактного класса «Стратегия генерации», классы «Стратегия генерации» и «Контекст» взаимодействуют с целью реализации выбранного алгоритма генерации набора заданий тренажера.
Применение паттерна Strategy в модулях компьютерных обучающих систем позволяет отказаться от использования переключателей и/или условных выражений, которые заметно усложняют стойкость систем к изменению требований за счет инкапсуляции каждого поведения в отдельный класс Strategy.
Следует отметить, что решение проблемы в контексте выявленных паттернов проектирования при разработке компьютерных обучающих систем не только упрощает дизайн будущей системы, но и оптимизирует программный код.
Заключение
Стратегия повторного использования проектных паттернов, применяемая при объектно-ориентированной разработке компьютерных обучающих систем, дает возможность ускорить процесс разработки за счет применения стандартных решений, снизить зависимость разрабатываемой системы от изменяющихся требований и обеспечить гибкость системы для внесения изменений.
Выявленные проектные паттерны могут прилагаться к существующим элементам проекта, чтобы улучшить прежнее решение архитектуры или служить основой для создания нового набора элементов на стадии анализа компьютерной обучающей системы.
Список литературы
1. Буч, Г. Объектно-ориентированный анализ и проектирование с примерами приложений на C++ / Г. Буч. - М. : Бином; СПб. : Невский диалект, 1999. - 560 с.
2. Буч, Г. UML. Классика CS. / Г. Буч, А. Якобсон, Дж. Рамбо. - СПб. : Питер, 2006. - 736 с.
3. Приемы объектно-ориентированного проектирования. Паттерны проектирования / Э. Гамма, Р. Хелм Р., Д. Джонсон, Дж. Влиссидес. - СПб. : Питер, 2006. - 366 с.
4. Черткова, Е.А. Концепция спецификации требований для проектирования компьютерных обучающих систем / Е.А. Черткова // Вестн. СГТУ. - 2005. -№ 4 (9). - С. 90-97.
5. Софиев, А.Э. Компьютерные обучающие системы / А.Э. Софиев, Е.А. Черткова. - М. : Изд-во ДеЛи, 2006. - 296 с.
Application of Project Patterns for Designing of Computer-Aided Systems
E.A. Chertkova
Department “Тechnical Cybernetics and Automatics ”,
Moscow State University of Engineering Ecology
Key words and phrases: architecture; artefact; object-oriented designing; pattern; repetitive application.
Abstract: The strategy of repetitive application of patterns in the course of object-oriented designing of programming systems is studied. Application of one of the patterns categories, i.e. project patterns (Decorator and Strategy) in the models of computer-aided systems is described.
Anwendung der Projektmuster ffir die Erarbeitung der computerausbildenden Systeme
Zusammenfassung: Es wird die Strategie der nochmaligen Nutzung der Schab-lonen bei der objektausgerichteten Projektierung der Programmsysteme betrachtet. Es wird die Anwendung einen der Kategorien der Schablonen, und zwar Projektmuster (Dесогаtог und Stгаtеgу) in den Modellen der computerausbildenden Systeme be-schrieben.
Application des modeles des projets pour l’elaboration des systemes informatiques enseignants
Resume: Est examinee la strategie de l’utilisation reiteree des modeles lors de la conception d’objet et d’orientations des systemes informatiques. Est decrite l’application d’une des categories des modeles, notamment ceux de conception (Decorator et Strategy) dans les modeles des systemes informatiques enseignants.