В.В. Кулямин - Технологии программирования. Компонентный подход (1134162), страница 29
Текст из файла (страница 29)
Обычно они являются представлениемэтих понятий и отношений между ними с помощью набора классов и их связей,подходящего для любого объектно-ориентированного языка. Такие представленияобладают важными атрибутами качественных модельных решений — способностью92отображать понятным образом большое многообразие ситуаций, возникающих в реальнойжизни, отсутствием необходимости вносить изменения в модель при небольшихизменениях в требованиях к основанному на ней программному обеспечению и удобствомвнесения изменений, вызванных естественными изменениями в понимании моделируемыхпонятий. В частности, небольшое расширение данных, связанных с некоторым понятием,приводит к небольшим изменениям в структуре, чаще всего, лишь одного класса модели.Образцы анализа могут относиться к определенной предметной области, как следует из ихопределения, но могут также и с успехом быть использованы для моделирования понятий вразных предметных областях.В отличие от образцов проектирования и идиом (см. ниже), образцы анализа используютсяпри концептуальном моделировании и не отражают прямо возможную реализацию такоймодели в виде конкретного кода участвующих в ней классов.
Например, поле X классаконцептуальной модели в реализации может остаться полем, а может превратиться в паруметодов getX() и setX() или в один метод getX() (т.е. в свойство, property, в терминах C#и JavaBeans).• Архитектурные образцы или архитектурные стили (architectural styles, architecturalpatterns).Такие образцы представляют собой типовые способы организации системы в целом иликрупных подсистем, задающие некоторые правила выделения компонентов и реализациивзаимодействий между ними.• Образцы проектирования (design patterns) в узком смысле.Они определяют типовые проектные решения для часто встречающихся задач среднегоуровня, касающиеся структуры одной подсистемы или организации взаимодействия двухтрех компонентов.• Идиомы (idioms, programming patterns).Идиомы являются специфическими для некоторого языка программирования способамиорганизации элементов программного кода, позволяющими, опять же, решить некоторуючасто встречающуюся задачу.• Образцы организации (organizational patterns) и образцы процессов (process patterns).Образцы этого типа описывают успешные практики организации разработки ПО илидругой сложной деятельности, позволяющие решать определенные задачи в рамкахнекоторого контекста, который включает ограничения на возможные решения.Для описания образцов были выработаны определенные шаблоны.
Далее мы будемиспользовать один из таких шаблонов для описания архитектурных стилей, образцовпроектирования и идиом. Этот шаблон включает в себя следующие элементы.• Название образца, а также другие имена, под которыми этот образец используется.• Назначение — задачи, которые решаются с помощью данного образца. В этот же пунктвключается описание контекста, в котором данный образец может быть использован.• Действующие силы — ограничения, требования и идеи, под воздействием которыхвырабатывается решение.• Решение — основные идеи используемого решения. Включает следующие подпункты.o Структура — структура компонентов, принимающих участие в данном образце, исвязей между ними. В рамках образца компоненты принято именовать исходя из ролей,которые они в нем играют.o Динамика — основные сценарии совместной работы компонентов образца.o Реализация — возможные проблемы при реализации и способы их преодоления,примеры кода на различных языках (в данном курсе мы будем использовать дляпримеров только язык Java).
Варианты и способы уточнения данного образца.o Следствия применения образца — какими дополнительными свойствами,достоинствами и недостатками, обладают полученные на его основе решения.93• Известные примеры использования данного образца.• Другие образцы, связанные с данным.Далее в этой лекции рассматриваются некоторые из известных образцов в соответствии сприведенной классификацией. Другие образцы будут упоминаться в последующих лекциях прирассмотрении способов решения тех или иных задач, а также библиотек языков Java и C#.Образцы анализаОбразец анализа является типовым решением по представлению набора понятий некоторойпредметной области в виде набора классов и связей между ними.
Основной источник описанийвыделенных образцов анализа — это работы Мартина Фаулера (Martin Fowler) [2,3].В качестве примера образцов анализа рассмотрим группу образцов, связанных спредставлением в программной системе данных измерений и наблюдений.Наиболее простым образцом этой группы является образец величина (quantity). Результатыбольшинства измерений имеют количественное выражение, однако, если представлять их в видеатрибутов числовых типов (рост — 182, вес — 83), часть информации пропадает.
Пока всепользователи системы и разработчики, вносящие в нее изменения, помнят, в каких единицахизмеряются все хранимые величины, все в порядке, но стоит хоть одному ошибиться — ирезультаты могут быть весьма серьезны. Такого рода ошибка в 1998 году вывела из строяамериканский космический аппарат Mars Climate Orbiter, предназначавшийся для исследованияклимата Марса. Данные о текущих параметрах движения аппарата поступали на Землю,обрабатывались, и результирующие команды отправлялись обратно.
При этом процедурымониторинга и управления движением на самом аппарате воспринимали величину импульса какизмеренную в Ньтонах на секунду, а программы обработки данных на Земле — как значениеимпульса в фунтах силы на секунду. В итоге это привело к выходу на гораздо более низкую, чемпланировалось, орбиту, потере управления и гибели аппарата стоимостью около 130 миллионовдолларов [4].Поэтому более аккуратное решение — использовать для хранения данных числовых измеренийобъекты специального класса Quantity, в полях которого хранится не только значение величины,но и единица ее измерения. Кроме того, весьма полезно определить операции сложения,вычитания и сравнения таких величин.Quantity+ amount : Number+ units : Unit+, -, <, >, ==Рисунок 40. Класс для представления величин, имеющих разные единицы измерения.Помимо измерений, использовать такое представление удобно и для сумм денег в финансовыхсистемах.
Аналогом единиц измерения в этом случае выступают различные валюты. Отфизических величин валюты отличаются изменяемым отношением, с помощью которого ихможно переводить одну в другую. Это отношение может зависеть от времени. Кроме того,существуют единицы измерения физических величин, которые преобразуются друг в друга болеесложным, чем умножение на некоторое число, способом — например, градусы по Фаренгейту и поЦельсию.Эти примеры могут быть охвачены образцом преобразование, который позволяет представлятьв системе правила преобразования различных единиц измерения друг в друга.
Для большинствапреобразований достаточно величины отношения между единицами, быть может, зависящего отвремени, поэтому стоит выделить класс для хранения этого отношения.94Quantity+ amount : Number+ units : Unit+ toUnitConversion+ from+, -, <, >, ==Ratio+ convert()0..1+ ratio : NumberРисунок 41. Представление возможных преобразований между единицами измерений.Другой тип связи между различными единицами измерения — так называемые составныеединицы, например Ньютон для измерения силы (1 Н = 1 кг*м/с2). Разрешение подобного родасоотношений может быть реализовано, если определить два подкласса класса Unit — один дляпредставления простых единиц, PrimeUnit, другой для представления составных, CompoundUnit, иопределить две связи, сопоставляющие одной составной единице два мультимножества простых— те, что участвуют в ней в положительных степенях, и те, что участвуют в отрицательных.UnitPrimeUnit0..*+ direct0..*+ inverseCompoundUnitРисунок 42.
Представление составных единиц измерений.В медицине, где хранение данных измерений имеет особое значение, измерения почти всегдасвязываются с пациентом, для которого они производились. К тому же, медицинских измерений,имеющих, например, значение длины, очень много. Для того, чтобы различать оба этих атрибутаизмерения — объект измерения и вид измерения (например, пациент Иванов Петр Сергеевич иокружность его талии), их нужно явно ввести в модель. Так возникает образец измерение. Этотобразец становится полезным, если имеется очень много различных измерений для каждогообъекта, группируемых в достаточно много видов измеряемых явлений.Object10..*MeasurementQuantity0..*1PhenomenonTypeРисунок 43.
Набор классов для представления результатов измерений.Бывает, однако, необходимо вести учет не только количественных измерений, но икачественных наблюдений, результат которых представляется не числом, а некоторым значениемперечислимого типа (группа крови II, ожог 3-й степени и пр.). При этом наблюдения оченьпохожи на измерения: относятся к некоторому объекту и определяют некоторое значение длякакого-то вида наблюдений.Для совместного представления результатов наблюдений и измерений можно использоватьобразец наблюдение, структура классов которого показана на Рис. 44.
Требуется некотораяпривычка, чтобы быстро разложить по этим классам какой-нибудь реальный пример. Например,группа крови — вид явлений, II — явление этого вида, наблюдение заключается в том, что у ПетраСергеевича Иванова была обнаружена именно такая группа крови. Эти усилия, однако, с лихвойокупаются огромным количеством фактов, которые без изменений можно уложить в эту схему.95Object1Observation0..*CategoryObservation0..*Measurement1Phenomenon0..*1PhenomenonTypeQuantityРисунок 44. Набор классов для представления результатов как измерений, так и наблюдений.Архитектурные стилиАрхитектурный стиль определяет основные правила выделения компонентов и организациивзаимодействия между ними в рамках системы или подсистемы в целом.