Итак, в данном представлении были выделены следующие базовые классы:
Панель (StdPanel) – собственно владелец всех объектов, на ней отрисовываются все элементы модели.
Масса (Massa) – вершина нашего графа, который представляет модель. Содержит одно свойство: List:StringList – список строк, в это свойство заносится все наименования и значения параметров объекта. Так же класс содержит три виртуальных метода: ShowWindow() – вызов диалогового окна для ввода параметров объекта, SetParam() – установка в полях ввода диалогового окна параметров объекта (установить параметры), GetParam() – записать информацию из диалогового окна в параметры объекта.
Связь (Link) –графически изображает связи между массами. Класс содержит свойства: First,next:massa – массы которые соединяет данная связь. Метод ShowWindow() вызывает диалоговое окно для ввода параметров связи.
Связь (Relation) – класс описывает абстрактный элемент соединяющий эти массы физически, содержит следующие свойства: Pram:StringList – список параметров, ClassName:String – имя класса (информация необходима для приложения расчётов). ClassName:String – имя объекта. Так же класс содержит три виртуальных метода: InitWindow – вызов диалогового окна для ввода параметров объекта, InitData – установка в полях ввода диалогового окна параметров объекта (установить параметры), GetData – записать информацию из диалогового окна в параметры объекта.
Эти классы связаны между собой следующими отношениями:
Класс StdPanel и классы Massa и Link связаны отношением зависимости, т. е. Massa и Link зависят от класса StdPanel, он является владельцем всех экземпляров данных классов. Классы Massa и Link связаны отношением ассоциации, класс Link содержит свойства типа Massa. Класс Relation используется классом Link (свойство Relations). Остальные классы наследуются от базовых: PointMassa и SupportMassa – наследованы от класса Massa. Отличие от базового класса в том, что классы потомки по-своему реализовывают методы ShowWindow(), SetParam(), GetParam(). Класс потомок знает свой набор параметров (list – определяется в конструкторе класса потомка) и знает, как заносить и извлекать данные из этого списка. Классы Spring, Screw, Dempfer, DryFriction, Hydrocylinder – наследованы от класса Relations. Эти классы описывают реальные объекты, соединяющие массы (пружина, резьбовое соединение, и т. д.), аналогично классам PointMassa и SupportMassa вышеописанные классы так же знают набор своих параметров и как с этими параметрами работать. Таким образом, данная диаграмма классов реализовывает концепцию, что за каждой связью, которая графически изображает связь между массами(Link), был закреплён список из связей, которые соединяют эти узлы(Relations). Хочу отметить, что при разработке приложения «графический редактор» конкретные свойства элементов не задаются, классы имеют только одно свойство – список параметров, что сделано с целью возможности применения данного приложения в других предметных областях
Разработка диаграммы классов для подсистемы «Расчёт колебательных систем»
Программа «Расчёт колебательных систем» должна выполнять следующее – считать данные о системе с диска или принять их от пользователя (должна иметь свой диалог ввода). Выполнить расчёт параметров элементов модели. Изобразить на экране визуально работу моделируемой системы, вывести результаты в виде графиков и файлов данных. Расчёт должен выполнятся методом, выбранным пользователем, с шагом заданным пользователем.
Выделим следующие классы:
Model – Модель, в этом классе будет записаны параметры моделирования системы, t: Tfloat – время моделирования, ht: TFloat - шаг интегрирования, e: Tfloat – точность,CalcMethod: Tmethod – метод интегрирования. Кроме того этот класс является управляющим, то есть управляет работой других классов. Класс содержит один метод, который вызывает диалоговое окно модели, в этом окне можно будет редактировать параметры модели, изменять свойства элементов модели, как мы условились выше, модель будет представлена списком масс и списком связей, выделяем ещё два базовых класса Massa и Relation. Класс Massa описывает массы в нашей системе, класс имеет следующие свойства: X0,Y0:Float – координаты центра масс;H,W:Float – высота и ширина (любой элемент структурно представляем в виде прямоугольника), f – сила, действующая на данный элемент. Класс имеет виртуальный метод Calculate(). Этот метод выполняет расчёт следующего положения в пространстве для данного элемента. Известна сила, действующая на элемент и предыдущее положение элемента в пространстве, далее решается система дифференциальных уравнений с параметрами заданными в классе Model. От данного класса наследованы следующие классы: PointMassa, SupportMassa. Класс SupportMassa описывает неподвижные элементы модели, отличие от базового в реализации класса Calculate(). Класс PointMassa (сосредоточенная масса) описывает подвижные элементы системы, кроме наследуемых свойств имеет свойства M,v0:float – масса и начальная скорость. Следующий базовый класс relation (связь) – класс описывает элементы связи, класс имеет свойства F: Tfloat – сила с которой она действует на соединяемые массы L0,L: Tfloat – длинна в свободном состоянии, и текущая длинна, Eelast: TFloat; - модуль упругости pm1, pm2:Tobject – указатели на соединяемые массы, c: Tfloat – жесткость. Класс имеет виртуальный метод CalcForce(P) – метод рассчитывает силу, с которой связь действует на соединяемые элементы, рассчитывается это следующим образом, через указатели pm1 и pm2 известны координаты центров масс и размеры соединяемых масс, можно рассчитать длину связи, зная длину связи и длину связи в свободном состоянии, можно посчитать силу с которой она действует на соединяемые связи. От класса relation наследован класс Spring (Пружина), кроме наследованных свойств имеет свойство d: Tfloat – диаметр. По своему реализует метод CalcForce. От класса spring наследованы следующие классы:
SpaceSpring (Пружина с зазором) отличается от базового класса реализацией метода CalcForce.
HydroCylinder (гидроцилиндр) имеет кроме наследуемых следующие параметры: p: Tfloat – давление, SHmax:Tfloat - максимальный ход,SH:Tfloat - ход при кодором давление максимально, по своему реализует метод CalcForce.
Cutt (разрезаемая заготовка) имеет кроме наследуемых следующие параметры: Pr: Tfloat – усилие резания, tv: Tfloat – коэффициент внедрения, по своему реализует метод CalcForce.
Dempfer (демпфер) кроме наследуемых имеет свойство Kf: Tfloat – коэффициент демпфирования, по своему реализует метод CalcForce.
Screw (резьбовое соединение) свойства: Fst:Tfloat - статическая сила действующая в начальный момент времени, z:Tfloat – затяжка, Cd, Cb: Tfloat - жесткость деталей и болта, Fd, Fb: Tfloat - силы деталей и болта, Lmax: Tfloat - длина болта, при которой стык раскрывается
StaticForce (статическая сила) свойство Ft: Tfloat – величина силы.
От класса StaticForce наследован класс GeneratorForce. Класс имеет свойства: Am: Tfloat – амплитуда,W: Tfloat – частота, Fi: Tfloat - начальная фаза, значение свойства Ft изменяется по синусоидальному закону.От класса GeneratorForce наследован класс ExpForce значение силы меняется по закону експоненты. От класса Dempfer наследованы классы:
DryFriction (сухое трение), отличается реализацией метода CalcForce.
Space (пространство), имеет свойство Kf: Tfloat – коэффициент восстановления.
От метода Screw наследован класс Butt (поставка или стык), отличается реализацией метода CalcForce.
Следует отметить, что хоть обе части нашего ПМК и оперируют одними и теми же классами (масса, связь), но диаграммы обеих программ отличаются, тат как для графического редактора в принципе, не важны физические свойства конкретных элементов. Поэтому, к примеру, дерево классов, описывающее класс связей в графическом редакторе достаточно просто (каждый класс отличается только списком конкретных параметров). На диаграмме же классов для программы расчётов эта часть имеет разветвлённую структуру, это обусловлено тем, что здесь нас интересуют конкретные физические свойства элементов и то, как этот элемент влияет на модель (реализация метода CalcForce()) Например, от класса Spring (пружина) наследован класс SpaceSpring (пружина с зазором).Диаграмма классов для программы расчётов колебательных систем приведена в приложении А. В данных диаграммах описаны лиш основные аспекты функционирования данных подсистем. Для графического редактора расматривался только аспект представления информации о системе в виде графа и передачи этой информации программе расчётов колебательных систем. Для программы расчётов рассматривался только расчёт параметров системы во времени. Такие аспекты как интерфейс пользователя (как сруктурно будет изображен узел, связь),взаимодействие с системой расчёта для редактора и такие аспекты как визуализация работы моделируемого обьекта, вывод графиков будут расмотрены в последующих разделах. Теперь приступим к разработке диаграммы обьектов.
Статическое представление модели определяет набор объектов, значений и связей могущих сущесвовать в одним снимке системы [38]. В принцепе возможной конфигурацией модели является любая совместимая со статическим представлением комбинация объектов и связей. Диаграмму объектов ещё называют диаграммой “снимка”. Диаграмма объектов изображает всю систему целиком в конкретный момент времени. Эту диаграмму будем использовать в качестве примера системы для иллюстрации сложности структуры данных. Изобразим пример подсистемы “Графический редактор” на диаграмме объектов которая приведена на рисунке 2.6.
Рисунок 2.6 – диаграмма объектов для «системы графический редактор»
На диаграмме объектов система изображена в момент когда в системе создано две массы неподвижная опора (Item[1]:SupportMassa) и сосредоточенная масса (Item[2]:PointMassa), эти элементы графически соединяет связь (Links1[1]:Link) которая указывает на два объекта типа (relations[1]:Spring) и (relations[2]:Dempfer). Которые фактически соединяют эти две массы. Список параметров инициируется при создании объектов. Прежде чем приступить к следующему представлению опишем те же объекты в системе «Расчёт колебательных систем». Данная диаграмма поможет нам увидеть чёткое различие в представлении данных в этих двух системах. Диаграмма объектов, иллюстрирующая состояние той же модели в программе расчётов представлена на рисунке 2.7.