Lecture06 (1133563), страница 4
Текст из файла (страница 4)
Итоги оценки двух вариантов архитектуры индексатора.+ обозначает возможность не изменять компонент, - — необходимость изменения компонента,* — необходимость добавления одного компонента6. В целом первая архитектура на предложенных сценариях выглядит лучше второй.Единственный ее недостаток — отсутствие возможности инкрементально поставлятьданные на вход компонентам. Если его устранить, сделав компоненты способнымипотреблять данные постепенно, эта архитектура станет почти идеальным вариантом,поскольку она легко расширяется — для решения многих дополнительных задачпотребуется только добавлять компоненты в общий конвейер.Вторая архитектура, несмотря на выигрыш в инкрементальности, проигрывает в целом.Основная ее проблема — слишком специфически построенный компонент-обработчикбукв.
Необходимость изменить его в нескольких сценариях показывает, что нужнообъединить обработчик букв и обработчик конца слов в единый компонент, выдающийслова целиком, после чего полученная архитектура не будет ничем уступать исправленнойпервой.UML. Виды диаграмм UMLДля представления архитектуры, а точнее — различных входящих в нее структур, удобноиспользовать графические языки. На настоящий момент наиболее проработанным и наиболеешироко используемым из них является унифицированный язык моделирования (Unified ModelingLanguage, UML) [5-7], хотя достаточно часто архитектуру системы описывают просто наборомименованных прямоугольников, соединенных линиями и стрелками, которые представляютвозможные связи.UML предлагает использовать для описания архитектуры 8 видов диаграмм.
9-й вид UMLдиаграмм, диаграммы вариантов использования (см. Лекцию 4), не относится к архитектурнымпредставлениям. Кроме того, и другие виды диаграмм можно использовать для описаниявнутренней структуры компонентов или сценариев действий пользователей и прочих элементов, кархитектуре часто не относящихся. В этом курсе мы не будем разбирать диаграммы UML вдеталях, а ограничимся обзором их основных элементов, необходимым для общего пониманиясмысла того, что изображено на таких диаграммах.Диаграммы UML делятся на две группы — статические и динамические диаграммы.Статические диаграммыСтатические диаграммы представляют либо постоянно присутствующие в системе сущности исвязи между ними, либо суммарную информацию о сущностях и связях, либо сущности и связи,существующие в какой-то определенный момент времени.
Они не показывают способовповедения этих сущностей. К этому типу относятся диаграммы классов, объектов, компонентов идиаграммы развертывания.• Диаграммы классов (class diagrams) показывают классы или типы сущностей системы,характеристики классов (поля и операции) и возможные связи между ними.
Примердиаграммы классов изображен на Рис. 31.Классы представляются прямоугольниками, поделенными на три части. В верхней частипоказывают имя класса, в средней — набор его полей, с именами, типами, модификаторамидоступа (public ‘+’, protected ‘#’, private ‘-’) и начальными значениями, в нижней —набор операций класса. Для каждой операции показывается ее модификатор доступа исигнатура.На Рис. 31 изображены классы Account, Person, Organization, Address, CreditAccount иабстрактный класс Client.Класс CreditAccount имеет private поле maximumCredit типа double, а также publicметод getCredit() и protected метод setCredit().Интерфейсы, т.е.
типы, имеющие только набор операций и не определяющие способов ихреализации, часто показываются в виде небольших кружков, хотя могут изображаться и какобычные классы. На Рис. 31 представлен интерфейс AccountInterface.Наиболее часто используется три вида связей между классами — связи по композиции,ссылки, связи по наследованию и реализации.Композиция описывает ситуацию, в которой объекты класса A включают в себя объектыкласса B, причем последние не могут разделяться (объект класса B, являющийся частьюобъекта класса A, не может являться частью другого объекта класса A) и существуюттолько в рамках объемлющих объектов (уничтожаются при уничтожении объемлющегообъекта).Композицией на Рис. 31 является связь между классами Organization и Address.Ссылочная связь (или слабая агрегация) обозначает, что объект некоторого класса A имеетв качестве поля ссылку на объект другого (или того же самого) класса B, причем ссылки наодин и тот же объект класса B могут иметься в нескольких объектах класса A.И композиция, и ссылочная связь изображаются стрелками, ведущими от класса A к классуB.
Композиция дополнительно имеет закрашенный ромбик у начала этой стрелки.Двусторонние ссылочные связи, обозначающие, что объекты могут иметь ссылки друг надруга, показываются линиями без стрелок. Такая связь показана на Рис. 31 между классамиAccount и Client.Рисунок 31. Диаграмма классов.Эти связи могут иметь описание множественности, показывающее, сколько объектовкласса B может быть связано с одним объектом класса A. Оно изображается в видетекстовой метки около конца стрелки, содержащей точное число или нижние и верхниеграницы, причем бесконечность изображается звездочкой или буквой n.
Для двустороннихсвязей множественности могут показываться с обеих сторон. На Рис. 31 множественности,изображенные для связи между классами Account и Client, обозначают, что один клиентможет иметь много счетов, а может и не иметь ни одного, и счет всегда привязан ровно кодному клиенту.Наследование классов изображается стрелкой с пустым наконечником, ведущей отнаследника к предку. На Рис. 31 класс CreditAccount наследует классу Account, а классыPerson и Organization — классу Client.Реализация интерфейсов показывается в виде пунктирной стрелки с пустым наконечником,ведущей от класса к реализуемому им интерфейсу, если тот показан в видепрямоугольника. Если же интерфейс изображен в виде кружка, то связь по реализациипоказывается обычной сплошной линией (в этом случае неоднозначности в ее толкованиине возникает). Такая связь изображена на Рис.
31 между классом Account и интерфейсомAccountInterface.Один класс использует другой, если этот другой класс является типом параметра илирезультата операции первого класса. Иногда связи по использованию показываются в видепунктирных стрелок. Пример такой связи между классом Person и перечислимым типомAddressKind можно видеть на Рис. 31.Ссылочные связи, реализованные в виде ассоциативных массивов или отображений (map)— такая связь в зависимости от некоторого набора ключей определяет набор ссылокзначений — показываются при помощи стрелок, имеющих прямоугольник с перечислениемтипов и имен ключей, примыкающий к изображению класса, от которого идет стрелка.Множественность на конце стрелки при этом обозначает количество ссылок,соответствующее одному набору значений ключей.•На Рис. 31 такая связь ведет от класса Person к классу Address, показывая, что объекткласса Person может иметь один адрес для каждого значения ключа kind, т.е. одиндомашний и один рабочий адреса.Диаграммы классов используются чаще других видов диаграмм.Диаграммы объектов (object diagrams) показывают часть объектов системы и связи междуними в некотором конкретном состоянии или суммарно, за некоторый интервал времени.Объекты изображаются прямоугольниками с идентификаторами ролей объектов (вконтексте тех состояний, которые изображены на диаграмме) и типами.
Однородныеколлекции объектов могут изображаться накладывающимися друг на другапрямоугольниками.Такие диаграммы используются довольно редко.Рисунок 32. Диаграмма объектов.•Диаграммы компонентов (component diagrams) представляют компоненты в несколькихсмыслах — атомарные составляющие системы с точки зрения ее сборки,конфигурационного управления и развертывания. Компоненты сборки иконфигурационного управления обычно представляют собой файлы с исходным кодом,динамически подгружаемые библиотеки, HTML-странички и пр., компонентыразвертывания — это компоненты JavaBeans, CORBA, COM и т.д.
Подробнее о такихкомпонентах см. Лекцию 12.Компонент изображается в виде прямоугольника с несколькими прямоугольными илидругой формы «зубами» на левой стороне.Связи, показывающие зависимости между компонентами, изображаются пунктирнымистрелками. Один компонент зависит от другого, если он не может быть использован вотсутствии этого другого компонента в конфигурации системы. Компоненты могут такжереализовывать интерфейсы.Диаграммы этого вида используются редко.Рисунок 33.
Диаграмма компонентов.На диаграмме компонентов, изображенной на Рис. 33, можно также увидеть пакеты,изображаемые в виде «папок», точнее — прямоугольников с прямоугольными «наростами»•над левым верхним углом. Пакеты являются пространствами имен и средствомгруппировки диаграмм и других модельных элементов UML — классов, компонентов и пр.Они могут появляться на диаграммах классов и компонентов для указания зависимостеймежду ними и отдельными классами и компонентами.
Иногда на такой диаграмме могутприсутствовать только пакеты с зависимостями между ними.Диаграммы развертывания (deployment diagrams) показывают декомпозицию системы нафизические устройства различных видов — серверы, рабочие станции, терминалы,принтеры, маршрутизаторы и пр. — и связи между ними, представленные различного родасетевыми и индивидуальными соединениями.Физические устройства, называемые узлами системы (nodes), изображаются в виде кубовили параллелепипедов, а физические соединения между ними — в виде линий.На диаграммах развертывания может быть показана привязка (в некоторый моментвремени или постоянная) компонентов развертывания системы к физическим устройствам— например, для указания того, что компонент EJB AccountEJB исполняется на сервереприложений, а аплет AccountInfoEditor — на рабочей станции оператора банка.Рисунок 34. Диаграмма развертывания.Эти диаграммы используются достаточно редко.
Пример диаграммы развертыванияизображен на Рис. 34.Динамические диаграммыДинамические диаграммы описывают происходящие в системе процессы. К ним относятсядиаграммы деятельности, сценариев, диаграммы взаимодействия и диаграммы состояний.• Диаграммы деятельности (activity diagrams) иллюстрируют набор процессовдеятельностей и потоки данных между ними, а также возможные их синхронизации друг сдругом.Деятельность изображается в виде прямоугольника с закругленными сторонами, слева исправа, помеченного именем деятельности.Потоки данных показываются в виде стрелок.