Модели сложных систем
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
?ласованных между собой логических и физических представлений о системе в целом.
Анализ следует начать с разбиения предметной области на объекты.
Из варианта задания, очевидно, что в луже существует два типа существ:
планктон - самый примитивный объект, жизненная деятельность которого ограничивается постоянным размножением;
косяк - объект, который может передвигаться по игровому полю, находя свободные пути для перемещения и так же как предыдущий класс, выполняет функцию воспроизведения и питается планктоном ;
хищник - более сложный объект, который кроме передвижения по игровому полю и функции воспроизведения, охотится на косяки ;
океан - жизненная система, которая содержит все особи, представленных выше классов существ
На рисунке 2.1 представлены информационные модели взаимодействия объектов друг с другом и лужей.
Рисунок 2.1.1
Связи R1 R2 R3 - типа многие к одному, безусловны, т.к. с обеих сторон участвует каждый экземпляр. Связь R1, типа Содержит - Содержится формализована, посредством двумерного массива Mas, в котором по координатам можно обратиться к каждой ячейке океана. Но эти ячейки составляют океан, поэтому изменения происходят со всем океаном в целом. Связи R2 и R3 типа Содержит - Содержится, формализована со стороны океана.
Рисунок 2.1.2 - Диаграмма информационной структуры
Тип связи R4 и R5 Питается - является пищей.
Следующим этапом проектирования, будет построение диаграмм переходов состояний (ДПС) для всех объектов системы, которые выражают описание жизненного цикла каждого объекта.
Действие системы начинается с создания океана, в котором затем происходит размножение планктона.
Если в среду добавить косяки, то они начинают поедать планктон и размножаться, но процесс проходит не контролируемо и возможно вымирание косяков за счет исчезновения планктона либо за счёт поедания косяков хищниками. Если в среду добавить хищников, то они начинают поедать косяки и размножаться.
Процесс также проходит не контролируемо и возможно вымирание хищников за счет исчезновения косяков либо от старости.
Планктон рождается и погибает вместе с океаном, в процессе своей жизнедеятельности он только репродуцируется, поэтому нет необходимости описывать его жизненный цикл отдельно.
.2 Описание связей между объектами
Связь - это набор отношений, которые систематически возникают при взаимодействии объектов.
Поскольку в качестве способа представления объекта был выбран текстовый подход, то при изображении связей в качестве звеньев отображаются объекты без указания их атрибутов.
Связи между объектами изображены на рисунке 1.
Рисунок 2.2 - Связи между объектами
Объект TOkean порождает еду (объект класса TPlankton), которой питаются объекты класса TKosiak, которым в свою очередь питаются объекты TXishnik. Объект класса TOkean порождает объекты классов TPlankton, TKosiak и TXishnik.
2.3 Построение модели состояний объекта
Модель состояния объекта или системы состоит из диаграммы переходов состояний (ДПС), а также из описания каждого звена на этой ДПС.
Модели состояния объекта выражают описание жизненного цикла объекта, т.е. является формальным описанием поведения объекта.
Рисунок 2.3.1 - ДПС для косяка и хищника
.4 Описание классов
В качестве отправной точки для создания модели океана служат классы TOkean и TKletka, первый из которых описывает все характеристики океана как отдельного объекта. Здесь основным полем класса является двумерный массив ссылок на объекты классов TPlankton, TKosiak и TXishnik, которые могут быть пустыми. Второй же является родительским для трёх основных видов жизни, присутствующей в модели, как то пищи и собственно инфузорий, описанных классами TPlankton, TKosiak и TXishnik соответственно.
Интерфейс классов лужи и ее составляющих приведен в модуле oop.pas.
Задаваемые константы
MaxLife:=100;
MaxGolK:=10;{максимально возможное время
MaxGolX:=10; голодания косяка и хищника}
HavkaGrow=1;{выростает за один раз}
EST=8; {съедает за один раз}
Среди полей класса TOkean можно выделить следующие:
x,y: integer; :array[1..MAXSIZEX,1..MAXSIZEY] of TLink; ,где=record
Xish:TPXishnik;
Creature:TPKosiak;
Eda:TPPlankton;
end;=^TXishnik;=^TKosiak;
TPPlankton=^TPlankton;
т.е. есть массив, хранящий в себе ссылки на принадлежащие ему объекты, и соответственно имеющий к ним доступ посредством методов своего класса, а те в свою очередь обращаются к методам объектов типа TPlankton, TKosiak и TXishnik.
Методы класса TOkean
constructor Init(Canv: TCanvas) - создает AmountAtTheBeginingR косяков, AmountAtTheBeginingХ хищников, рисует сетку с помощью процедуры DrawGrid;
procedure DrawGrid - рисует сетку MAXSIZEX на MAXSIZEY;KillKosiak(tx,ty: integer) - уничтожает косяк;KillXishnik(tx,ty: integer) - уничтожает хищника;Draw(i,j:integer) - прорисовывает каждую клетку массива Mas; Step - здесь рассматривается каждая инфузория, анализируются ее поля и если необходимо лужа перемещает инфузорию по полю.
Procedure DivisionKosiak (tx,ty: integer) - текущий косяк делится, порождая новый косяк;
Procedure DivisionXishnik (tx,ty: integer) - текущий хищник делится, порождая нового хищника;
Поля класса TPlankton
amount: integer - количество еды в текущей ячейке;
Методы класса TPlankton
constructor Init(initx, inity, havka: integer; Canva:TCanvas) - конструктор, создает экземпляр класса;
procedure Draw;virtual - прорисовка по текущим координатам;
procedure SetKol(h: