Role, основанная на идиомах преобразования типов данных

advertisement
Вестник БГУ. Сер. 1. 2013. № 1
На рис. 3 представлен фрагмент модели базы данных, предназначенный для создания и хранения
ряда основных сущностей, среди которых 3D-объекты, Тип объекта, Методы, Создание объектов,
Пользователи, Тип пользователя, Комментарии. Каждый объект, который помещается в базу, характеризуется типом и методом его реализации. У пользователя есть возможность добавлять комментарии по поводу методов реализации, характеристик объекта в процессе использования. В зависимости
от типа пользователя назначаются соответствующие привилегии по работе с 3D-объектами. Отметим
также, что в модели данных поддерживается декларативная ссылочная целостность.
Таким образом, приложение, построенное на базе графического ядра, представляет собой универсальную утилиту для создания сцены, придания различным объектам требуемых физических свойств,
а также задания необходимых взаимодействий объектов. Все это осуществляется благодаря работе
с графическими объектами и контентом посредством графического интерфейса и изменения свойств
объектов. После построения сцены осуществляется переход в режим наблюдения, в котором можно
видеть все заданные эффекты, движения, столкновения, освещения и т. д., а также самому взаимодействовать с созданной средой.
Пространство имен разработанного CoreX можно применять для реализации собственных приложений как графической компоненты, например, при создании компьютерных игр. В данном случае
пользователю требуется лишь определиться с контентом и задать игровую логику.
Отметим, что приложения, созданные с использованием этого ядра, являются кроссплатформенными. В данный момент поддерживается Windows 7 и Android. В дальнейшем появится поддержка
Windows Phone 7. Более того, так как CoreX является пространством имен в .Net, то можно использовать его классы также и в любом .Net-приложении.
1. М э р д о к К е л л и Л . Autodesk 3ds Max 2009. Библия пользователя. 3D Studio max. М., 2008. С. 656.
2. Л о м а к и н Г . А . // Материалы Международного конгресса по информатике: информационные системы и технологии (CSIST’2011), Минск, 1 окт. – 3 нояб. 2011 г.: в 2 ч. Минск, 2011. Ч. 2. С. 367.
3. Л о м а к и н Г . А . // Веб-программирование и интернет-технологии WebConf2012: материалы 2-й Междунар. науч.практ. конф., Минск, 5–7 июня 2012 г. Минск, 2012. С. 164.
4. Л о м а к и н Г . А . // Сборник работ 68-й Научной конференции студентов и аспирантов Белорусского государственного университета, Минск, 1–20 мая 2011 г.: в 3 ч. Минск, 2011. Ч. 1. C. 124.
Поступила в редакцию 30.06.12.
Герман Александрович Ломакин – студент 4-го курса факультета прикладной математики и информатики.
Анастасия Сергеевна Гусейнова − ассистент кафедры многопроцессорных систем и сетей.
УДК 004.045
А. П. ПОБЕГАЙЛО
РЕАЛИЗАЦИЯ ШАБЛОНА ПРОЕКТИРОВАНИЯ ACTOR – ROLE,
ОСНОВАННАЯ НА ИДИОМАХ ПРЕОБРАЗОВАНИЯ ТИПОВ ДАННЫХ
An implementation of Actor – Role design pattern by means of languages with static types is considered. The proposed approach
is based on a realization of the association between roles and actors by means of the association class. The implementation of the association class is based on idioms of type promotion. The programming language C++ is used as a model language for the proposed
implementation of Actor – Role design pattern. The source code of two frameworks for realization of role assignment and role choosing is presented. Dynamic type identification mechanism of the programming language C++ is used to determine which role is chosen for the actor.
Ключевые слова: шаблоны проектирования, шаблон Актер – Роль, назначение ролей, выбор роли, преобразование типов
данных, язык программирования С++.
Key words: design patterns, Actor – Role design pattern, role assignment, choosing roles, type promotion, C++ programming
language.
В настоящее время этап проектирования программных систем включает разработку концептуальной модели прикладной области. Каждая концепция рассматривается как некоторая сущность, обладающая определенными свойствами и связями с другими концепциями. Поэтому естественно, что
в концептуальной модели прикладной системы встречаются такие сущности, как роли. Например,
человек может играть роль врача, учителя и так далее в зависимости от ситуации. Так как концептуальная модель прикладной области естественным образом является основой концептуальной модели
программной системы, то при разработке таких систем требуется решить вопрос о реализации ролей
или их назначении объектам классов. Более подробно вопросы концептуального моделирования
прикладной области системы с использованием ролей рассмотрены в работах [1–5].
60
Математика и информатика
В современных языках программирования со статической типизацией, используемых в промышленном программировании, как правило, отсутствуют встроенные средства программирования ролей.
В этом случае для реализации ролей берется концептуальный шаблон Actor – Role с различными
вариантами реализации. В данной статье рассмотрен вопрос реализации этого шаблона с использованием идиомы преобразования типов данных, предложенный в [6], но с более строгим подходом
к реализации ролей, обеспечивающим существование объекта-актера в контексте клиента, который
назначает этого актера на роль, а также предложено использование динамической идентификации
типов данных для определения типа роли, на которую назначен актер. В качестве модельного языка
программирования со статической типизацией выбран широко применяемый при разработке программных систем язык программирования С++.
Концептуальное моделирование ролей
Вопросы концептуального моделирования ролей подробно рассмотрены в [7–13]. Приведем решение
проблемы программирования ролей, основанное на концептуальном шаблоне, предложенном в [7],
который показан на рис. 1.
Рис. 1. Концептуальный шаблон Actor – Role
Здесь Actor и Role обозначают концептуальные классы, а RoleA и RoleB – конкретные классыроли, которые может играть актер. Возможность актеров исполнять некоторые роли отмечается на
шаблоне отношением ассоциации Play, которое указывает на то, что актер может играть несколько
ролей (см. рис. 1). Одна из возможных реализаций этого шаблона с агрегацией ролей в классе Actor
приведена в [7, 8]. Другой подход, наиболее часто применяемый для решения проблемы назначения
актерам ролей, заключается в использовании отношения обобщения. В этом случае классы ролей являются специализациями класса актера, исполняющего эти роли. Подробно концептуальные подходы
к реализации ролей рассмотрены в работах [14–16]. Однако следует отметить, что в них не затрагиваются вопросы реализации этого шаблона.
В данной статье рассмотрен подход к реализации шаблона проектирования Actor – Role, основанный на использовании класса для ассоциации Play. В языке моделирования систем UML такие классы
называются классами-ассоциациями (association class). Концептуально этот подход был предложен в [10].
Структура шаблона проектирования для реализации ролей с использованием класса-ассоциации
представлена на рис. 2. В этом шаблоне концептуальный класс Converter реализует ассоциацию Play.
Приведем описание рассматриваемого шаблона Actor – Role, следуя классической схеме [17].
Назначение шаблона Actor – Role: выполнение преобразования типов данных в зависимости
от контекста окружения.
Мотивация: необходимость в динамическом преобразовании типов данных в зависимости от контекста окружения.
Применимость шаблона: класс не знает имена классов, в которые должно быть выполнено преобразование его типа.
Участники шаблона – следующие классы:
• Actor – класс, тип которого должен быть преобразован в один из типов, принадлежащих иерархии
ролевых классов. Класс Actor не знает классов, в которые должен быть преобразован его тип;
• Role – класс, в тип которого должен быть преобразован класс Actor;
• Converter – класс, выполняющий динамическое преобразование типов данных;
• RoleA, RoleB – классы – наследники класса Role, которые могут представлять специализацию ролей.
Взаимодействия объектов: клиент выполняет явное преобразование объекта класса Actor к объекту
класса Converter. Преобразование объекта класса Converter к объекту класса Role выполняется неявно.
Эти преобразования типов выполняются во время исполнения программы.
61
Вестник БГУ. Сер. 1. 2013. № 1
Рис. 2. Шаблон с реализацией ассоциации Play классом Converter
Последствия: класс Actor освобождается от необходимости знания всех ролевых классов. Как следствие,
код приложения становится более структурированным, так как уменьшается связность классов.
Родственные шаблоны: Factory Method, Abstract Factory. Шаблон Actor – Role можно отнести к порождающим, так как им создаются объекты класса Role. С точки зрения создания объектов этот шаблон можно сравнить с шаблонами Factory Method и Abstract Factory, различие между которыми состоит в подходе к созданию объектов различных классов: в первом случае классы создаваемых объектов определяются через наследование, во втором – путем агрегации. В шаблоне Actor – Role класс
создаваемого объекта определяется посредством оператора преобразования типов.
Реализация и использование шаблона Actor – Role
Проблема заключается в практической реализации класса-ассоциации Converter. С этой целью
предлагается использовать идиоматический шаблон Type Promotion [18], который устанавливает
между двумя типами отношение преобразования объектов одного типа в объекты другого типа.
В языке программирования C++ этот идиоматический шаблон реализуется двумя способами:
• конструктором класса с единственным параметром;
• оператором преобразования типов.
Однако каждая из этих реализаций не является транзитивным отношением. Поэтому клиент должен
явно выполнить одно из двух преобразований типов. Более подробно последовательность этих преобразований можно описать таким образом. Клиент явно преобразовывает объект класса Actor к типу
Converter, а преобразование из типа Converter в нужный тип роли выполняется компилятором. Приведем интерфейс класса Converter на языке программирования С++.
class Converter
{
const Actor& a;
public:
Converter(const Actor& _a): a(_a) {}
operator RoleA() const;
operator RoleB() const;
};
Класс Converter содержит ссылку на объект класса Actor, которая инициализируется при создании
объекта класса Converter. Эта ссылка позволяет динамически выполнить преобразование к ролевым
типам данных в операторах приведения типов.
В простейшем случае клиент просто использует объект класса Converter для преобразования типа
актера к типу роли, которую исполняет этот актер. Например,
void client(const Actor& a)
{
RoleA r = Converter(a);
}
Отметим, что в этом случае в контексте клиента обеспечивается существование объекта типа Actor,
который будет исполнять требуемую клиентом роль.
62
Математика и информатика
Выбор роли
Рассмотрим более сложную проблему, возникающую при программировании ролей, а именно
проблему выбора роли для актера. Причем выбор роли выполняется динамически в зависимости от
контекста окружения. Шаблон проектирования для выбора роли представлен на рис. 3. Отметим, что
этот шаблон практически не отличается от представленного на рис. 2. Но в этом случае класс, реализующий ассоциацию Play, назовем Manager, подчеркивая этим динамический выбор ролей объектами
этого класса. Приведем интерфейс класса Manager.
class Manager
{
const Actor& a;
public:
Manager (const Actor& _a): a(_a) {}
operator Role*() const;
};
Отметим, что оператор преобразования типов класса Manager возвращает указатель на базовый класс
Role, хотя в действительности возвращается указатель на объект одного из классов, наследуемых от
этого класса. Для использования этого шаблона клиенты должны динамически определять тип объектов
класса Role, а точнее, тип объектов всех наследуемых от него классов. Эта задача может быть решена
при помощи механизма динамической идентификации типов, который предоставляет стандартная
библиотека языка программирования C++.
Рис. 3. Шаблон для динамического назначения ролей
Кроме того, очевидно, что выбор роли для актера может зависеть от некоторых условий или контекста, но в этих случаях необходимы конструкторы, которые дополнительно к данным об актере,
для которого выбирается роль, получают сведения о контексте исполнения.
В следующем листинге показан пример динамического назначения роли клиентом с последующей
идентификацией типа этой роли.
void client(const Actor& a)
{
Role* r = Manager(a);
string roleType =typeid(*r).name();
cout << "Role Type: " << roleType << endl;
delete r;
}
Отметим, что в данном случае после завершения работы с ролью клиент должен удалить ролевой
объект, который динамически создается менеджером ролей.
Таким образом, рассмотрен подход к реализации шаблона проектирования Actor – Role посредством идиом преобразования типов данных. Представленный подход позволяет динамически назначать
63
Вестник БГУ. Сер. 1. 2013. № 1
роли объектам в языках программирования со статической типизацией. Приведена реализация шаблона на языке программирования С++, в которой для динамического определения типа объекта
используется механизм динамической идентификации типов данных.
1. K r i s t e n s e n B . B . , Ø s t e r b y e K . // Theory and Practice of Object Systems. 1996. Vol. 2. № 3. P. 143.
2. C h u W . W . , Z h a n g G . // Proc. of the 16th International Conference on Conceptual Modeling ER’97. Berlin; Heidelberg, 1997. Lecture Notes in Computer Science. Vol. 1331. P. 257.
3. G e n i l l o u d G . , W e g m a n n A . A . // Proc. of the 4th International Enterprise Distributed Object Computing Conference (EDOC 2000), 25–28 September 2000. Makuhari, 2000. P. 76.
4. L i p i n g Z h a o // Model Driven Architecture, European MDA Workshops: Foundations and Applications, MDAFA 2003
and MDAFA 2004. Berlin; Heidelberg, 2005. Lecture Notes in Computer Science. Vol. 3599. P. 1.
5. Z h u H . , Z h o u M . C . // IEEE Trans. on Systems, Man and Cybernetics, Pt. A. 2006. Vol. 36. № 6. P. 1110.
6. П о б е г а й л о А . П . // Материалы Междунар. науч. конгр. «Информационные системы и технологии» (CSIST’11),
Минск, 31 окт. – 3 нояб. 2011 г. Минск, 2011. С. 218.
7. F o w l e r M . Dealing with Roles // Proc. of Pattern Languages of Programming (PLoP) Conference 1997. Technical Report
WUCS-97-34. Washington University Dept.
8. B ä u m e r D . , R i e h l e D . , S i b e r s k i W . , W u l f M . // Proc. of Pattern Languages of Programming (PLoP) Conference 1997. Technical Report WUCS-97-34. Washington University Dept.
9. S t e i m a n n F . // J. of Object-Oriented Programming. 2001. Vol. 14. № 14. P. 23.
10. M o s s é F r a n c i s G . // J. of Object Technology. 2002. Vol. 1. № 4. P. 27.
11. C a b o t J . , R a v e n t ó s R . // Proc. of the 23rd International Conference on Conceptual Modeling (ER’04). Berlin; Heidelberg, 2004. Lecture Notes in Computer Science. Vol. 3288. P. 69.
12. C h e r n u c h i n D . , L a z a r O . S . , D i t t r i c h G . // Roles, An Interdisciplinary Perspective. Papers from the 2005
AAAI Fall Symposium. AAAI Press. Menlo Park, California, 2005. P. 39.
13. C a b o t J . , R a v e n t ó s R . Conceptual Modeling Patterns for Roles / J. Cabot, R. Raventós // J. on Data Semantics V.
Berlin; Heidelberg, 2006. Lecture Notes in Computer Science. Vol. 3870. P. 158.
14. S t e i m a n n F . // Data & Knowledge Engineering. 2000. Vol. 35. № 1. P. 83.
15. G o t t l o b G . , S c h r e f l M . , R ö c k B . // ACM Transactions on Information Systems. 1996. Vol. 14. № 3. P. 268.
16. C h e r n u c h i n D . , L a z a r O . S . , D i t t r i c h G . // Roles, An Interdisciplinary Perspective. Papers from the 2005
AAAI Fall Symposium. AAAI Press. Menlo Park, California, 2005. P. 31.
17. Г а м м а Э . , Х е л м Р . , Д ж о н с о н Р . , В л и с с и д е с Д ж . Приемы объектно-ориентированного проектирования. СПб., 2001.
18. C o p l i e n J . O . // Pattern Languages of Program Design 4. Addison Wesley, Reading, MA, 2000. P. 167.
Поступила в редакцию 20.03.12.
Александр Павлович Побегайло – кандидат технических наук, доцент кафедры технологий программирования.
УДК 517.954
T. C. ШЛАПАКОВА, Н. И. ЮРЧУК
СМЕШАННАЯ ЗАДАЧА ДЛЯ УРАВНЕНИЯ КОЛЕБАНИЯ
ОГРАНИЧЕННОЙ СТРУНЫ С ПРОИЗВОДНОЙ В КРАЕВОМ УСЛОВИИ,
НАПРАВЛЕННОЙ НЕ ПО ХАРАКТЕРИСТИКЕ
The article deals with a mixed problem for the vibration equation of a finite string with a time dependent oblique derivative in the
boundary condition. It’s mean that dynamic force applies to the end of a finite string. Consider a case where a derivative in the
boundary condition is not directed along the characteristics. There exists a unique classical solution of the mixed problem which is
represented as a restriction of some function. This function is build by special method using the results which were obtained for the
solution of a problem for a semi-bounded string. The method is similar with a reflection method for the solution of a mixed problem
for a finite string with fixed ends. This method has a unique nature and it is considered for the first time in the article. Formulas of the
solution of this problem and matching conditions between initial and boundary conditions have been found.
Ключевые слова: cмешанная задача, уравнение колебания, метод отражений, ограниченная струна, продолжение функции, условия согласования, производная по времени.
Key words: mixed problem, vibration equation, reflection method, finite string, contraction of the function, matching conditions,
a time dependent oblique derivative.
1. Для ограниченной струны рассматривается следующая смешанная задача:
2
∂ 2u
2 ∂ u
−
a
= 0, 0 < x < l , t > 0,
∂x 2
∂t 2
64
(1)
Download