На этом шаге рассмотрим понятие каркаса в UML.
Каркас (framework) – это архитектурный образец, предлагающий расширяемый шаблон для приложений в некоторой предметной области. Например, в системах реального времени часто можно встретить архитектурный образец "циклический исполнитель" (cyclic executive), который разделяет время на кадры и подкадры, где обработка происходит в строгих временных рамках. Выбор этого образца вместо управляемой событиями архитектуры оказывает влияние на всю систему. Данный образец (как и его альтернатива) является настолько общим, что имеет смысл назвать его каркасом.
Каркас – это нечто большее, чем механизм. Фактически можно считать каркас разновидностью микроархитектуры, включающей в себя множество механизмов, совместно работающих над решением типичной проблемы для типичной предметной области. Специфицируя каркас, вы тем самым описываете "скелет" архитектуры вместе со всеми ее органами управления, которые применяются пользователем для адаптации к нужному контексту.
В UML каркас моделируется в виде пакета со стереотипом. Заглянув внутрь этого пакета, можно увидеть механизмы, существующие в любом из представлений системной архитектуры. Например, там обнаружатся не только параметризованные кооперации, но также варианты использования (которые объясняют, как надо работать с этим каркасом), а также простые кооперации (представляющие набор абстракций, на базе которых можно строить систему, – например, путем порождения классов-потомков).
Рис. 1 показывает такой каркас, названный CyclicExecutive (ЦиклическийИсполнитель).
Рис.1. Каркасы
Помимо прочего, этот каркас включает кооперацию CommonEvents (ОбщиеСобытия), охватывающую множество классов событий, и механизм EventHandler (ОбработчикСобытий), предназначенный для циклической обработки событий.
Клиент, построенный на базе этого каркаса, – к примеру, Pacemaker (СердечныйСтимулятор), – может пользоваться абстракциями из кооперации CommonEvents путем порождения производных классов, а также применять механизм EventHandler.
Каркасы отличаются от обычных библиотек классов. Библиотека классов содержит абстракции, конкретизируемые или вызываемые другими абстракциями программы. Каркас же содержит абстракции, которые сами вызывают или конкретизируют другие абстракции. Оба вида соединений образуют те самые элемнты, посредством которых каркас настраивается на используемый вами контекст.
На следующем шаге рассмотрим типичные приемы моделирования образцов проектирования в UML.