Идея классов является основой объектно-ориентированного программирования.
Основными свойствами ООП является инкапсуляция, наследование и полиморфизм.
Объединение данных с функциями их обработки в сочетании со скрытием ненужной для использования этих данных информации называется инкапсуляцией.
Наследование – это возможность создания иерархии классов, когда потоки наследуют все свойства своих предков, могут их изменять и добавлять новые.
Полиморфизм – возможность использования в различных классах иерархии одно имя для обозначения сходных по смыслу действий и гибко выбирать требуемое действие во время выполнения программы.
В нашей программе используется первые два свойства ООП.
Проектирование объектно-ориентированной программы представляет собой весьма сложную задачу, поскольку в процесс добавляется ещё один важный этап – разработка иерархий классов.
Представим иерархию классовнашей программы (рисунок 3.1)
Рисунок 3.1
4 РЕАЛИЗАЦИЯ СИСТЕМЫ
Как ранее уже описывалось, программа состоит из трёх классов:
- Класс FuncStandart содержит описание всех стандартных функций, определённых языком имитационного моделирования GPSS.
- Класс GPSSOperatori содержит описание операторов языка имитационного моделирования GPSS.
- Класс GPSSText описывает сгенерированный текст языка имитационного моделирования GPSS.
4.1 Класс FuncStandart
-
- Метод stringfBETA() задает параметры функцииBETA(Stream,Min,Max,Shape1,Shape2) и возвращает строку содержащую описание этой функции с уже заданными пользователем параметрами.
- Метод stringfBINOMIAL()задает параметры функции BINOMIAL(Stream,TrialCount,Probability) и возвращает строку содержащую описание этой функции с уже заданными пользователем параметрами.
- Метод stringfDUNIFORM()задает параметры функции DUNIFORM(Stream,Min,Max) и возвращает строку содержащую описание этой функции с уже заданными пользователем параметрами.
- Метод stringf_1() задает параметры функций EXPONENTIAL(Stream,Locate,Scale), EXTVALA(Stream,Locate,Scale), EXTVALB(Stream,Locate,Scale), LAPLACE(Stream,Locate,Scale), LOGISTIC(Stream,Locate,Scale)и возвращает строку содержащую описание этих параметров с уже заданными пользователем значениями.
- Методstring f_2() задаетпараметрыфункцийGAMMA(Stream,Locate,Scale,Shape), INVGAUSS(Stream,Locate,Scale,Shape), INVWEIBULL(Stream,Locate,Scale,Shape), OGLAPLACE(Stream,Locate,Scale,Shape), LOGLOGIS(Stream,Locate,Scale,Shape),LOGNORMAL(Stream,Locate,Scale,Shape),PEARSON5(Stream,Locate,Scale,Shape),WEIBULL(Stream,Locate,Scale,Shape)ивозвращаетстрокусодержащуюописаниеэтихпараметровсужезаданнымипользователемзначениями.
- Метод stringfGEOMETRIC()задает параметры функции GEOMETRIC(Stream,Probability) и возвращает строку содержащую описание этой функции с уже заданными пользователем параметрами.
- Метод stringfNEGBINOM()задает параметры функции NEGBINOM(Stream,SuccessCount,Probability) и возвращает строку содержащую описание этой функции с уже заданными пользователем параметрами.
- Метод stringfNORMAL()задает параметры функции NORMAL(Stream,Mean,StdDev) и возвращает строку содержащую описание этой функции с уже заданными пользователем параметрами.
- Метод stringfPARETO()задает параметры функции PARETO(Stream,Locate,Scale) и возвращает строку содержащую описание этой функции с уже заданными пользователем параметрами.
- Метод string fPEARSON6()задает параметры функции PEARSON6(Stream,Locate,Scale,Shape1,Shape2) и возвращает строку содержащую описание этой функции с уже заданными пользователем параметрами.
- Метод stringfPOISSON()задает параметры функции POISSON(Stream,Mean) и возвращает строку содержащую описание этой функции с уже заданными пользователем параметрами.
- Метод stringfTRIANGULAR()задает параметры функции
- TRIANGULAR(Stream,Min,Max,Mode) и возвращает строку содержащую описание этой функции с уже заданными пользователем параметрами.
- Метод stringfUNIFORM() задает параметры функции UNIFORM(Stream,Min,Max) и возвращает строку содержащую описание этой функции с уже заданными пользователем параметрами.
4.2 Класс GPSSOperatori
- Описываются переменные целого типа nF, nST, nFas, nQ, ответственные за номер используемой функции, номер многоканального устройства, номер одноканального устройства, номер очереди соответственно.
- МетодGENERATE задаёт параметры оператора GENERATE и возвращает строковое значение этого оператора с заданными пользователем значениями параметров.
На первом этапе определяется промежуток времени между появлениями транзактов. Он может быть: постоянным, случайным, заданным функцией, зависящим от функции, а также не задан.
При промежутке времени между появлениями транзактов заданном функцией или зависящем от функции, определяется, какой будет функция: стандартной или пользовательской, в зависимости от этого вызываются функцииFStandи FUNCTIONсоответственно.
На втором этапе определяется время задержки появления первого транзакта. Оно может быть: задано или не задано.
На третьем этапе определяется предельное число транзактов.Оно так же может быть: задано или не задано.
На четвёртом этапе определяется приоритет транзактов. Он может быть: задан или не задан.
- Метод ADVANCE задаёт параметры оператора ADVANCE и возвращает строковое значение этого оператора с заданными пользователем значениями параметров.
В методе определяется время задержки транзакта. Оно может быть: постоянным, случайным, заданным функцией, зависящим от функции.
При времени задержки транзакта заданном функцией или зависящем от функции, определяется, какой будет функция: стандартной или пользовательской, в зависимости от этого вызываются функцииFStandи FUNCTIONсоответственно.
- Метод ENTER возвращает строку содержащую операторы языка имитационного моделирования GPSS, описывающие многоканальное устройство.
На первом этапе в файл GPSStext.txt (файл для записи сгенерированного текста программы на языке имитационного моделирования GPSS) записывается описание многоканального устройства, то есть его имя и количество каналов.
На втором этапе определяется, на каком шаге программы пользователь желает получить статистику: нахождение транзакта в очереди перед ОУ, нахождение транзакта в ОУ, общее время обработки транзакта, а также возможен вариант без сбора статистики.
На третьем этапе записывается оператор захвата многоканального устройства с названием этого устройства и количеством захвачиваемых каналов.
На четвёртом этапе происходит переход на генерацию текста оператора ADVANCE .
На пятом этапе записывается оператор освобождения многоканального устройства с названием этого устройства и количеством освобождаемых каналов.
- Метод SIZE возвращает строку содержащую операторы языка имитационного моделирования GPSS, описывающие одноканальное устройство.
На первом этапе определяется, на каком шаге программы пользователь желает получить статистику: нахождение транзакта в очереди перед ОУ, нахождение транзакта в ОУ, общее время обработки транзакта, а также возможен вариант без сбора статистики.
На втором этапе записывается оператор захвата одноканального устройства с названием этого устройства.
На третьем этапе происходит переход на генерацию текста оператора ADVANCE .
На четвертом этапе записывается оператор освобождения одноканального устройства с названием этого устройства.
- Метод FUNCTION задаёт параметры оператора FUNCTION и возвращает строковое значение этого оператора с заданными пользователем значениями параметров.
В файл GPSStext.txtна первом этапе записывается номер генератора случайного числа; на втором этапе тип функции; на третьем число точек и их координаты.
- Метод Fstandartопределяет, какая стандартная функция будут вызываться, то есть обращается в класс FuncStandart, и возвращает строку, содержащую описание этой функции.
4.3 Класс GPSSText
- Переменные oper, ukazat, matrix типа vectorнаходящиеся в области private,определяют операторы принадлежащие узлам, указатели на узлы, матрицу переходов от одного узла к другому соответственно.
- Метод Matrix генерирует матрицу переходов от одного узла к другому, а также определяет, какие операторы принадлежат узлам.
На первом этапе определяется оператор на соответствующем узле.
На втором этапе в соответствии с номером узла, определяется, какая строка будет генерироваться в матрице.
Если узел содержит генератор, одноканальное либо многоканальное устройство, то в столбец с номером узла, в который переходит дальше транзакт, записывается 1, в остальные столбцы записывается 0.
Если узел вероятностный, то в столбцы с номерами узлов, на которые совершается переход, записывается соответствующая вероятность, в остальные столбцы записываются нули.
Если узел является терминатором, то в соответствующую строку записываются все нули.
Причем, при каждом описании узла, в вектор operзаписывается оператор, соответствующий узлу.
- Метод Programma окончательно генерирует текст программы, написанной на языке имитационного моделирования GPSS.
На первом этапе вызывается метод Matrix, который заполняет матрицу переходов и вектор операторов.
На втором этапе определяются узлы, на которых будут стоять указатели.
На третьем генерируется программа в соответствии с матрицей, операторами и указателями.
В конце программы выводится текст, подтверждающий корректное ее завершение, а также название файла, хранящего текст программы, написанной на языке имитационного моделирования GPSS.