Модели сложных систем

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование

?ласованных между собой логических и физических представлений о системе в целом.

Анализ следует начать с разбиения предметной области на объекты.

Из варианта задания, очевидно, что в луже существует два типа существ:

планктон - самый примитивный объект, жизненная деятельность которого ограничивается постоянным размножением;

косяк - объект, который может передвигаться по игровому полю, находя свободные пути для перемещения и так же как предыдущий класс, выполняет функцию воспроизведения и питается планктоном ;

хищник - более сложный объект, который кроме передвижения по игровому полю и функции воспроизведения, охотится на косяки ;

океан - жизненная система, которая содержит все особи, представленных выше классов существ

На рисунке 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: