Электронный журнал Cloud of Science. 2014. T. 1. № 1.
http://cloudofscience.ru
УДК 621.391
Принципы проектирования приложений с помощью проблемно-ориентированного объектного программирования
Д. М. Цыбулько
Рязанский государственный радиотехнический университет 390005, г. Рязань, ул. Гагарина, д. 59/1 e -mail: [email protected]
Аннотация. Рассмотрены этапы проектирования приложений с помощью предложенного автором проблемно-ориентированного объектного программирования (ПООП). Приведен пример описания с помощью ПООП продукционных правил системы логического вывода.
Ключевые слова: предметно-ориентированные языки, объектно-ориентированное программирование.
ГРНТИ 50.05.13
В настоящее время существенно увеличилось количество сложных программ, разрабатываемых для персональных компьютеров. Многие из таких программ по причине изменений внешних условий со временем требуют изменений порядка своей работы. Существует два основных подхода к решению данной задачи. Одним из способов является изменение исходного кода программы. Код может изменяться разработчиком данной системы, который одновременно является и пользователем или вызывается пользователем для изменения кода по мере надобности. Вторым способом является добавление в систему поддержки макросов. Однако далеко не каждый пользователь способен освоить этот инструмент, требующий от него дополнительных знаний и навыков работы с языками программирования. Оба этих подхода требуют вмешательства программиста при каждом изменении или дополнительных знаний от пользователя. Поэтому для решения проблемы внесения изменений в программу был предложен подход, названный проблемноориентированным объектным программированием (ПООП) [5]. В основе данного подхода к программированию лежит разработанный язык программирования, который состоит всего из одной конструкции. Структура и описание конструкции ПООП также приведены в работе [5]. С помощью этой конструкции описываются объекты, составляющие сценарий работы программы для решения задачи из некоторой предметной области. ПООП позволяет существенно упростить процесс изменения порядка работы системы и сделать его более доступным для пользователей, знакомыми лишь с основами программирования.
Процесс разработки приложения с использованием ПООП можно разделить на следующие этапы:
1) анализ предметной области;
2) выделение типов объектов, описание полей, условий и их действий;
3) разработка программного кода, реализующего действия объектов.
Данный процесс аналогичен процессу проектирования баз данных (табл. 1).
Таблица 1. Сравнение этапов проектирования
База данных Сценарий ПООП
Анализ предметной области Анализ предметной области
Выделение типов объектов, описание полей, ограничений, связей между данными Выделение типов объектов, описание полей, условий и их действий
Написание сценария, реализующего создание модели базы данных Разработка программного кода, реализующего действия объектов
Основное отличие процесса разработки базы данных и приложения с использованием ПООП заключается в том, что при проектировании баз данных используется предметно-ориентированный подход, а при проектировании сценария ПООП — проблемно-ориентированный. При проектировании сценария, состоящего из конструкций ПООП, первичным будет являться решение самой проблемы, а не доскональное описание объектов предметной области. Данное отличие проявляется на третьем этапе, где разрабатывается программный код реализации действий объектов ПООП в данной предметной области.
Схема взаимодействия между программой ПООП и программными функциями системы представлена на рис. 1.
Программный интерфейс (АР1)
Программные функции системы
Рисунок 1. Схема взаимодействия между сценарием ПООП и функциями программы (системы)
Программа выполняется специальной программой (интерпретатором). Интерпретатор имеет собственную «теневую» память, с помощью которой объекты программы хранят и обмениваются данными. Интерпретатор сам не выполняет никаких операций с данными. Он, используя программный интерфейс (Application Programming Interface), лишь вызывает программные функции целевой программы, которые необходимы для решения поставленной задачи.
Рассмотрим пример сценария на ПООП. В статье [1] приведен пример классификации инвестиционных объектов на основе четырех критериев: конкурентоспособность проекта, актуальность и новизна проекта, социально-экономическая значимость проекта для города и области, финансовый уровень предприятия-заявителя. На основании этих критериев требуется принять решение об отнесении проекта к одному из четырех классов «Принять проект к реализации», «Принять проект к реализации при наличии средств», «Отложить рассмотрение проекта» и «Отклонить проект». В той же работе [1] приведены продукционные правила для принятия решения. Обозначим их как R1, R2, ..., R10 и запишем их как объект типа ControlCondition, который имеет единственное поле Сondition — условие; и две ветви:
iftrue (обозначается T) — выполнить команды, если условие истинно; iffalse (F) — выполнить команды, если условие ложно.
Общий вид объекта типа ControlCondition:
C1 = ControlCondition {
Condition: <условие> i ftrue
call <объект 1>;
iffalse
call <объект 2>;
}
Правила R1, R2, ..., R10 будут описаны с помощью объекта типа ControlCondition следующим образом.
R1 = ControlCondition
{
Condition:
(«конкурентоспособность проекта» = «очень высокая») AND («актуальность и новизна проекта» = «очень высокая») AND
(«социально-экономическая значимость проекта для города и области» = «очень высокая») AND
(«финансовый уровень предприятия-заявителя» = «очень высокий») iftrue
call A;
iffalse
call R2;
}
R2 = ControlCondition
{
Condition:
(«конкурентоспособность проекта» = «высокая») AND («актуальность и новизна проекта» = «очень высокая») AND
(«социально-экономическая значимость проекта для города и области» высокая») AND
(«финансовый уровень предприятия-заявителя» = «очень высокий») i ftrue
call A;
iffalse
call R3;
}
R3 = ControlCondition {
Condition :
(«конкурентоспособность проекта» = «выше средней») AND («актуальность и новизна проекта» = «выше средней») AND («социально-экономическая значимость проекта для города и области» кая») AND
(«финансовый уровень предприятия-заявителя» = «высокий») iftrue
call B;
iffalse
call R4;
}
R4 = ControlCondition
{
Condition:
(«конкурентоспособность проекта» = «средняя») AND («актуальность и новизна проекта» = «средняя») AND
(«социально-экономическая значимость проекта для города и области» средней») AND
(«финансовый уровень предприятия-заявителя» = «средний») iftrue
call D;
iffalse
call R5;
}
R5 = ControlCondition
{
Condition:
(«конкурентоспособность проекта» = «ниже средней») AND («актуальность и новизна проекта» = «ниже средней») AND («социально-экономическая значимость проекта для города и области» няя») AND
(«финансовый уровень предприятия-заявителя» = «средний») iftrue
call D;
iffalse
call R6;
}
R6 = ControlCondition
{
Condition:
(«конкурентоспособность проекта» = «ниже средней») AND («актуальность и новизна проекта» = «ниже средней») AND («социально-экономическая значимость проекта для города и области» средней») AND
(«финансовый уровень предприятия-заявителя» = «ниже среднего») iftrue
call D;
iffalse
call R7;
}
«очень
«высо-
«выше
«сред-
R7 = ControlCondition
і
Condition і
(«конкурентоспособность проекта» = «низкая») AND («актуальность и новизна проекта» = «низкая») AND
(«социально-экономическая значимость проекта для города и области» = «очень низкая») AND
(«финансовый уровень предприятия-заявителя» = «очень низкий») iftrue
call J;
iffalse
call R8;
}
R8
і
ControlCondition Condition і
(«конкурентоспособность проекта» = «очень низкая») AND («актуальность и новизна проекта» = «очень низкая») AND
(«социально-экономическая значимость проекта для города и области» = «низ) AND
(«финансовый уровень предприятия-заявителя» = «низкий») iftrue
call J;
iffalse
call R9;
R9
і
ControlCondition Condition і
(«конкурентоспособность проекта» = «низкая») AND («актуальность и новизна проекта» = «низкая») AND
(«социально-экономическая значимость проекта для города и области» = «низ) AND
(«финансовый уровень предприятия-заявителя» = «низкий») iftrue
call J;
iffalse
call R10;
}
R10 = ControlCondition
і
Condition і
(«конкурентоспособность проекта» = «очень низкая») AND («актуальность и новизна проекта» = «очень низкая») AND («социально-экономическая значимость проекта для города и области» низкая») AND
(«финансовый уровень предприятия-заявителя» = «очень низкий») iftrue
call J;
iffalse
call I;
}
«очень
Определим классы, связанные с принятие решения о проектах, как объекты ПООП следующих типов:
- ApproveBut ф), выполняется при принятии проекта к реализации при наличии средств;
- DeferProject ф), выполняется, если проект откладывается на неопределенный срок;
- RejectProject ^), выполняется при отклонении проекта;
- ImpossibleToDecide (I), выполняется, если решение по проекту не может быть принято.
Описание продукционных правил с помощью ПООП представляет собой алгоритм логического вывода новых знаний в продукционной модели (рис. 2, на примере из работы [2]).
Р1
X ✓
ц
Р2
X ✓
ц
Р3
X ✓
А
С
В
С
1
Р4
X ✓
ц 1
-
Р5
X ✓
ц 1
'
Р6
X ✓
Р7
X ✓
ц 1
'
Р8
X ✓
ц 1
•
Р9
X ✓
ц 1
•
^0
X ✓
С
С
Рисунок 2. Сценарий логического вывода
Заключение. Использование концепции ПООП при разработке систем с изменяющимся поведением позволяет существенно упростить процесс внесения изменений в сценарий работы программы. Пользователю не требуется вносить изменения в исходный код программы, а всего лишь необходимо отредактировать файл сценария, причем для этого не требуется специальных знаний языков программирования. При этом концепция позволяет существенно сократить издержки на дальнейшую поддержку проекта за счет того, что вносить изменения в сценарий будет непосредственно сам пользователь, а не разработчик.
Планируется также использовать ПООП для реализации сценариев проверки знаний в Интернет-приложении для обработки количественных числительных естественных языков [4] и других автоматизированных обучающих систем, в том числе с использованием генерации и определения форм слов [3], а также алгоритмов работы систем адаптивной ускоренной маршрутизации в динамических корпоративных сетях [2].
Литература
[1] Гусева М. В., Демидова Л. А. Классификация инвестиционных проектов на основе систем нечеткого вывода и мультимножеств // Вестник РГРТУ. 2006. № 19. С. 157-165.
[2] Перепелкин Д. А., Перепелкин А. И. Алгоритм адаптивной ускоренной маршрутизации в условии динамически изменяющихся нагрузок на линиях связи в корпоративной сети // Информационные технологии. 2011. № 3. С. 2-7.
[3] Пруцков А. В. Определение и генерация сложных форм слов естественных языков при морфологическом анализе и синтезе // Известия Таганрогского государственного радиотехнического университета. 2006. Т. 70. № 15. С. 10-14.
[4] Пруцков А. В., Цыбулько Д. М. Интернет-приложение метода обработки количественных числительных естественных языков // Вестник РГРТУ. 2012. № 41. С. 70-74.
[5] Пруцков А. В., Цыбулько Д. М. Проблемно-ориентированное объектное программирование // Вестник РГРТУ. 2013. № 45. С. 57-62.
Автор: Дмитрий Михайлович Цыбулько, магистрант кафедры электронных вычислительных машин Рязанского государственного радиотехнического университета.
The Principles of Application Design by means of Problem Driven Object Programming
D. M. Tsybulko
Ryazan state radio engineering university 59/1, Gagarina street, Ryazan, 390005
Abstract. Different steps of application design by using problem-driven object programming (PDOP) are considered in the article. The articles brings an exemple of description by means of PDOP production rules in logical deduction system.
Keywords: domain-specific language, object-oriented programming
Reference
[1] Guseva M. V., Demidova L. A. Klassifikacija investicionnyh proektov na osnove sis-tem nechetkogo vyvoda i mul'timnozhestv // Vestnik RGRTU. 2006. No. 19. P. 157165.
[2] Perepelkin D. A., Perepelkin A. I. Algoritm adaptivnoj uskorennoj marshrutizacii v uslovii dinamicheski izmenjajushhihsja nagruzok na linijah svjazi v korporativnoj seti // Informacionnye tehnologii. 2011. No. 3. P. 2-7.
[3] Prutzkov A. V. Opredelenie i generacija slozhnyh form slov estestvennyh jazykov pri morfologicheskom analize i sinteze // Izvestija Taganrogskogo gosudarstvennogo ra-diotehnicheskogo universiteta. 2006. Vol. 70. No. 15. P. 10-14.
[4] Prutzkov A. V., Tsybulko D. M. Internet-prilozhenie metoda obrabotki kolichestven-nyh chislitel'nyh estestvennyh jazykov // Vestnik RGRTU. 2012. No. 41. P. 70-74.
[5] Prutzkov A. V., Tsybulko D. M. Problemno-orientirovannoe obektnoe programmiro-vanie // Vestnik RGRTU. 2013. No. 45. P. 57-62.