Телематика'2002

Всероссийская
научно-методическая
конференция


 

 

ПРОЕКТИРОВАНИЕ ОБЪЕКТНО-ОРИЕНТИРОВАННЫХ ПРОГРАММ С ИСПОЛЬЗОВАНИЕМ АВТОМАТОВ

А.А.Шалыто, Н.И.Туккель

Федеральное государственное унитарное предприятие "НПО "Аврора"", Санкт-Петербургский государственный институт точной механики и оптики (технический университет), Санкт-Петербург

Тел.: (812) 247-95-45, e-mail: mail@avrorasystems.com

При создании объектно-ориентированных программ [1,2] в литературе все большее внимание уделяется их проектированию [3,4]. Однако при этом на практике возникают сложности, во многом связанные с недостаточной эффективностью известных технологий проектирования. В настоящей работе предлагается технология, обеспечивающая разработку минимального набора документов, наглядно и строго описывающих как структурные, так и поведенческие стороны программ.
Особенности предлагаемой технологии состоят в следующем:
- атрибуты объекта разделены на управляющие и остальные по аналогии с памятью в машине Тьюринга или в машине фон Неймана;
- явно выделены управляющие (автоматные) состояния объекта, число которых обычно значительно меньше числа остальных состояний, например, "вычислительных". При этом, находясь в одном из управляющих состояний, объект может пройти множество "вычислительных" состояний;
- в программирование введено понятие "пространство состояний", под которым понимается множество управляющих состояний объекта. Ориентация в этом пространстве обеспечивает существенно более понятное поведение по сравнению со случаем, когда такое пространство или ориентация в нем отсутствует;
- процессы рассматриваются как последовательности смены состояний;
- при спецификации задачи автоматные состояния рассматриваются в качестве абстракций, а переход к переменным, им соответствующим, осуществляется только на этапе реализации;
- программирование выполняется "через состояния", а не "через переменные" (флаги), что позволяет лучше понять и специфицировать задачу и ее составные части;
- в этап реализации программ, традиционно называемый "кодирование", введен новый подэтап, который в теории автоматов называется "кодирование состояний". Такое кодирование необходимо для их различия, особенно в тех случаях, когда в разных состояниях формируются одинаковые выходные воздействия;
- введено многозначное кодирование для каждого автомата с целью различия его состояний по значениям одной переменной;
- автоматы формально и изоморфно реализуются с помощью конструкции switch языка Си или ее аналогов, особенностью которых является возможность записи меток case в произвольном порядке;
- в программирование введено понятие "наблюдаемость", обеспечивающее возможность слежения за переходами каждого автомата только по одной многозначной переменной;
- выходные воздействия "привязаны" к переходам, петлям или состояниям автомата с целью представления в компактном виде большого числа последовательностей действий, которые являются реакциями на соответствующие входные воздействия;
- обеспечено протоколирование в терминах автоматов с целью проверки корректности построенной программы, представляющей собой систему взаимосвязанных объектов.
Также как и при использовании любого другого подхода, применение предлагаемого связано со множеством эвристик, возвратов назад, уточнений и параллельно выполняемых работ. Однако, после завершения создания программы, предлагаемый подход может быть сформулирован (по крайней мере для полного ее документирования) как "идеальная" технология, фиксирующая принятые решения.
1. На основе анализа предметной области выделяются классы и строится диаграмма классов, отражающая, в основном, наследование и агрегирование.
2. Для каждого класса разрабатывается словесное описание, по крайней мере, в форме перечня решаемых задач.
3. Для каждого класса создается его схема, отражающая его интерфейс и структуру. При этом атрибуты и методы разделены на автоматные и остальные.
4. При наличии в классе нескольких автоматов строится схема их взаимодействия, отражающая в общем случае вложенность, вызываемость и обмен номерами состояний [5].
5. Для каждого класса составляются перечни событий, входных переменных и выходных воздействий.
6. Для каждого автомата разрабатывается словесное описание.
7. Для каждого автомата, используя правила, изложенные в [5,6], строится схема связей, определяющая его входные и выходные воздействия (интерфейс). В качестве входных воздействий применяются: входные переменные; предикаты, проверяющие номера состояний; события. В этой схеме в качестве событий (наряду с другими) могут быть указаны сообщения, получаемые объектом, которые приводятся в структурной схеме класса.
8. Для каждого автомата на основе нотации, приведенной в [5,6], строится граф переходов.
9. Каждый класс реализуется соответствующим модулем программы. Его структура должна быть изоморфна структурной схеме класса, а методы, реализующие автоматы, создаются по шаблону, приведенному в [5,6]. При этом методы, соответствующие входным переменным и выходным воздействиям автомата, располагаются отдельно от метода, реализующего автомат, из которого они только вызываются. Благодаря такому подходу, методы, соответствующие входным переменным и выходным воздействиям автомата, могут быть абстрактными или полиморфными, и переопределяться в порождаемых классах. Таким образом, имеется возможность создать базовый класс для управления некоторой группой устройств, в котором реализуются только автоматы, а используемые ими входные переменные и выходные воздействия переопределяются на уровне порождаемых классов, управляющих конкретными устройствами.
10. Для изучения поведения программы, определяемого, в том числе, и взаимодействием объектов, а в ходе разработки - для ее отладки, автоматически строятся протоколы, описывающие работу всех автоматов в терминах состояний, переходов, входных переменных и выходных воздействий с указанием соответствующих объектов. Это обеспечивается за счет включения функций протоколирования в соответствующие методы. При необходимости могут протоколироваться также и аналоговые параметры. Тот факт, что входные и выходные воздействия "привязаны" к объектам, автоматам и состояниям упрощает понимание таких протоколов по сравнению с протоколами, которые строятся традиционно. Из рассмотрения протоколов следует, что автоматы (в отличие от классов) абстракциями не являются. Они используются при спецификации, реализации и протоколировании. При этом можно утверждать, что автоматы структурируют поведение, которое с их помощью описывается весьма компактно и строго.
11. Выпускается созданная в ходе проекта документация.
Подход, излагаемый в настоящей работе, является продолжением работ авторов, направленных на широкое внедрение таких понятий как "состояние" и "автомат" в инженерное программирование (software engineering). Он берет свое начало в теории автоматов и в проектировании систем управления.
Из изложенного следует, что объектно-ориентированное программирование с явным выделением состояний базируется на двух парадигмах: объектной и автоматной. При этом, если "объектный подход предоставляет программисту средства для решения задачи в ее пространстве" [2], то автоматный подход - средства для описания поведения объектов в терминах пространства состояний. Применение автоматов проясняет поведение программы, так же, как применение объектов проясняет ее структуру.
Предлагаемый подход является альтернативой унифицированному языку моделирования UML, который, по мнению авторов, при создании систем со сложным поведением практически не применим.
Материалы, описывающие предлагаемый подход и примеры его применения, приведены на сайте www.softcraft.ru.
Литература
1. Страуструп Б. Язык программирования Си++. М.: Бином, СПб.: Невский диалект, 1999.
2. Эккель Б. Философия Java. СПб.: Питер, 2001.
3. Буч Г. Объектно-ориентированный анализ и проектирование с примерами приложений на С++. М.: Бином, СПб.: Невский диалект, 1998.
4. Шлеер С., Меллор С. Объектно-ориентированный анализ: моделирование мира в состояниях. Киев: Диалектика, 1993.
5. Шалыто А.А., Туккель Н.И. SWITCH-технология - автоматный подход к созданию программного обеспечения "реактивных" систем //Программирование. 2001. ╧ 5.
6. Шалыто А.А., Туккель Н.И. Программирование с явным выделением состояний //Мир ПК. ╧ 8,9.
7. Буч Г., Рамбо Д., Джекобсон А. Язык UML. Руководство пользователя. М.: ДМК, 2000.

 


Санкт-Петербург, 3 - 6 июня 2002 года,
Всероссийская научно-методическая конференция "Телематика'2002"