
- •Содержаhие
- •2. Классические математические
- •3. Стохастические модели
- •4.4. Имитация случайных событий…………………..… 78
- •5. Обработка результатов
- •6. Моделирование вероятностных
- •7. Модели систем
- •8. Алгоpитмизация пpоцеccов
- •9. Унифицированный
- •Введение
- •1. Концепция моделирования
- •1.1. Понятие модели
- •1.2. Концепции определения моделей
- •2. Классические математические модели
- •2.1. Примеры моделей в виде дифференциальных уравнений
- •2.2. Классические модели в виде дифференциальных уравнений
- •2.3. Инерционные модели
- •2.4. Модели на основе передаточных функций
- •2.5. Конечные автоматы
- •3. Стохастические модели объектов
- •3.1. Математические модели случайных процессов
- •3.2. Классификация моделей случайных процессов
- •3.3. Модели марковских процессов
- •4. Имитация случайных событий
- •4.1. Понятие статистического моделирования
- •4.2. Датчики случайных чисел
- •4.3. Проверочные тесты
- •4.4. Имитация случайных событий
- •4.5. Имитация непрерывных случайных величин
- •4.6. Имитация марковского процесса
- •5. Обработка результатов моделирования на эвм
- •5.1. Выбор числа опытов
- •5.2. Значимость оценки
- •5.3. Формулы и алгоритмы для оценки результатов моделирования
- •6. Моделирование вероятностных автоматов
- •6.1. Аналитическое определение вероятностных автоматов
- •6.2. Табличное задание функций переходов и выходов
- •6.3. Имитационное моделирование вероятностных автоматов
- •7. Модели систем массового обслуживания
- •7.1. Общие сведения
- •7.2. Модель входного потока заявок и времени обслуживания
- •7.3. Модель Эрланга
- •7.4. Исследование модели пуассоновского процесса с помощью производящих функций
- •7.5. Модель для определения времени задержки в виде интегро-дифференциальных уравнений Линди-Такача-Севастьянова
- •7.6. Имитационное моделирование одноканальной смо
- •7.7. Имитационные модели многофазных смо
- •7.8. Имитационные модели многоканальных смо
- •7.9. Алгоритмизация имитационной модели смо произвольной структуры
- •8.1. Моделиpующие алгоpитмы
- •9. Унифицированный язык моделирования uml
- •9.1. Основные компоненты
- •9.2. Понятия и компоненты
- •9.3. Диаграммы вариантов использования
- •9.4. Диаграммы классов
- •Вертикальная координата : : Подвеска : : Машина
- •9.5. Типы связей между классами
- •9.6. Расширения понятия класса в uml
- •9.7. Связи между объектами
- •9.8. Диаграммы взаимодействия
- •9.9. Диаграммы состояний
- •9.10. Диаграммы деятельностей
- •10. Объектно-ориентированное моделирование
- •10.1. Определение объекта
- •10.2. Наследование
- •10.3. Полиморфизм
- •10.4. Типы данных и пакеты
- •Библиографический список
- •Аналитические и имитационные модели
10.3. Полиморфизм
Полиморфизмом в ООП называется возможность использования вместо объектов одного декларированного класса объекты другого класса, называемого замещающим, совместимого с первым. Аналогом в языках программирования являются передача в качестве действительного параметра объекта другого класса, нежели объявленный класс формального параметра, а также присваивание указателю на объект ссылки на экземпляр иного класса, нежели декларированный класс указателя. Совместимость классов в традиционном понимании означает, что замещающий класс является потомком декларированного класса или декларирован интерфейс, а замещающий класс реализует этот интерфейс. Таким образом, можно выделить «совместимость по наследованию» и «совместимость по интерфейсу».
В ООМ объекты также могут быть формальными параметрами процедур и функций, а в системах с динамической структурой возможны присваивания переменным, являющимся указателями на блоки. Даже в системе со статической структурой локальные блоки и поведения можно рассматривать как указатели на экземпляры соответствующих классов, присваивание которым происходит один раз при создании блока-контейнера или модели в целом. Поэтому вопросы переопределения переменных и локальных блоков тесно связаны с полиморфизмом. Совместимость по наследованию в ООМ ничем не отличается от ООП.
Интерфейсом в ООП называется совокупность спецификаций процедур и функций (методов) без указания их реализации, т.е. совокупность абстрактных методов. Считается, что класс реализует (implements) некоторый интерфейс, если в определении класса имеются реализации для всех методов, указанных в определении интерфейса.
Иное положение в ООМ. Устройства Gen и Amp на рис. 10.1 взаимодействуют с внешним окружением через свои внешние переменные, значение которых изменяется непрерывно. В практике программирования объектам случается взаимодействовать через свои видимые переменные. При наличии в этих объектах параллельных нитей управления возникает проблема синхронизации, одним из решений которой является, например, property (свойства), обращения к которым автоматически переводятся компилятором в вызов соответствуюших методов. Для реальных физических систем эта проблема решается самой природой, а для модели правильная синхронизация обеспечивается исполняющей системой пакета моделирования.
Под интерфейсом в ООМ следует понимать некоторую совокупность видимых компонентов объекта, т.е. для блока это внешние переменные и видимые извне (pablic) процедуры и функции. Если блок содержит совокупность видимых компонент с теми же именами, что и в декларации интерфейса, и с совместимыми типами, то блок реализует этот интерфейс. Каждый блок неявно задает определенный интерфейс - совокупность всех своих внешних компонентов. «Чистым» интерфейсом является блок, у которого не определено поведение.
Тогда усилитель в схеме на рис. 10.1
можно заменить усилителем с насыщением,
который совместим с ним по наследованию
и по интерфейсу. Однако усилитель может
быть также заменен и на интегратор,
задаваемый уравнением
,
который тоже имеет вход Х, выход Y
и параметр К того же вещественного
типа и, следовательно, совместим с
усилителем по интерфейсу, хотя и не
имеет с ним ничего общего по наследованию.
В языке Modelica в дополнение к паре «суперкласс-подкласс» (superclass-subclass) очень активно используется другая пара – «супертип-подтип» (supertype-subtype), ориентированная на совместимость по интерфейсу.
Например, из класса CGain можно вывести производный класс (подкласс) CMulDiv (умножитель-делитель). Усилитель с насыщением в Modelica нельзя вывести из простого усилителя, поскольку карт состояния этот язык не поддерживает, а уравнения переопределять запрещает.
model CGain
parameter Real K = 1;
input Real X (start=0);
output Real Y;
equation
Y = K*X;
end CGain;
model CMulGiv
extends CGain;
output Real Z;
equation
Z= X/K;
end CMulGiv;
Новый класс CMulGiv наследует от своего суперкласса CGain вход, выход, параметр и одно уравнение, а также добавляет один выход и одно уравнение. Определим теперь класс CSaturation вне всякой связи с CGain:
model CSaturation
parameter Real K = 1;
parameter Real UpperLimit = 1;
parameter Real LowerLimit = - UpperLimit;
input Real X (start=0);
input Real Y;
protected
Real Xmin (start=LowerLimit/K);
Real Xmax (start=UpperLimit/K);
equation
Y = if X>Xmax then UpperLimit
else if X<Xmin then LowerLimit
else K*X;
end Csaturation;
CSaturation является подтипом класса CGain, а тот, в свою очередь, супертипом CSaturation, поскольку каждому public-элементу класса CGain соответствует совместимый по типу (в данном случае одного и того же типа) public -элемент CSaturation.
Для того чтобы в устройстве SineSource (см. рис. 10.1) простой усилитель можно было заменить на усилитель с насыщением, нужно этот блок параметризовать:
model CSineSource
output Real Y;
replaceable model Camp = CGain
protected
CsainGenerator Gen (Amplitude=2);
Camp Amp (K=0.6);
equation
connect(Gem.Y,Amp.X);
connect(Gem.Y,Y);
end CSineSource;
Далее нужно создать специальный класс CLimitedSineSource на основе СSineSource, переопределив параметризованный класс СAmp, и затем его использовать. Это можно сделать двумя способами:
model CLimitedSineSource
extends СSineSource (redeclare СSaturation CAmp);
end ClimitedSineSource;
model ClimitedSineSource=
СSineSource (redeclare model Camp=СSaturation);
Modelica разрешает переопределять локальные блоки посредством параметризации класса. Аналогичным способом разрешается переопределять и коннекторы.