Листинг 28.1. Программа с нечеткой логикой
Start: Get (Time-on, Time-off, Time, Setting, Temp, Switch) if Switch = off goto off if Switch = on goto on goto Cntrld off: if Heating-status = on goto Sw-off goto loop on: if Heating-status = off goto Sw-on goto loop Cntrld: if Time = Time-on goto on if Time = Time-off goto off if Time < Time-on goto Start if Time > Time-off goto Start if Temp > Setting then goto off if Temp < Setting then goto on Sw-off: Heating-status:= off goto Switch Sw-on: Heating-status:= on Switch: Switch-heating loop: goto Start
В листинге 28.2 приведена та же самая программа, переписанная мной с использованием структурированных управляющих конструкций. Три положения переключателя (On, Off и Controlled) четко определены и связаны с соответствующим кодом. Язык Java не был использован при написании этой программы потому, что исходная программа не являлась объектно-ориентированной. Листинг 28.2. Структурированная программа
Loop -- Get получает значения переменных из окружения системы Get (Time-on, Time-off, Time, Setting, Temp, Switch); case Switch of when On =>if Heating-status = off then Switch-heating; Heating-status:= on; end if; when Off=> if Heating-status = on then Switch-heating; Heating-status:=off; end if; when Controlled => if Time >= Time-on and Time <= Time-off then if Temp > Setting and Heating-status = on then Switch-heating; Heating-status = off; elsif Temp < Setting and Heating-status = off then Switch-heating; Heating-status:= on; end if; end if; end case; end loop;
В процессе реструктуризации программ можно также упрощать сложные условные операторы. В листинге 28.3 показан пример упрощения условного оператора, содержащего логический оператор отрицания not. Листинг 28.3. Упрощение условия
-- Сложное условие if not (A > В and (С < D or not (E > F)))...
-- Упрощенное условие if А <= В and (С <= D or E > F)...
В известной работе [50] доказано, что любую программу можно переписать с помощью простых условных операторов if-then-else и циклов while-loop, при этом можно исключить все безусловные операторы перехода. Эта теорема является основой автоматической реструктуризации программ. Этапы такого преобразования программ показаны на рис. 28.6. Сначала программа представляется в виде ориентированного граф, после чего создается структурированная программа без использования операторов перехода.
Рис. 28.6. Автоматическая реструктуризация программ
Созданный ориентированный граф показывает поток передачи управления в программе. К этому графу применяются методы упрощения и преобразования, в результате чего находятся и устраняются неиспользуемые части кода. После этого генерируется новая программа, при этом операторы безусловного перехода заменяются циклами и условными операторами. Такая программа может быть написана как на исходном языке, так и на любом другом (например, программу на языке FORTRAN можно конвертировать в программу на С). Автоматизированный способ реструктуризации программ имеет свои проблемы.
1. Потеря комментариев. Если в программе есть встроенные комментарии, они будут утеряны в процессе реструктуризации. 2. Утрата документации. По той же причине обычно нарушается соответствие между новой программой и документацией на исходную программу. Однако в большинстве случаев это не так уж важно, поскольку документация и комментарии уже устарели. 3. Жесткие требования к компьютерной технике. Алгоритмы, встроенные в средства реструктуризации, отличаются высокой сложностью. Процесс реструктуризации больших программ, даже выполненный на современных быстродействующих компьютерах, будет занимать много времени.
Если программа находится под управлением данных и программные компоненты тесно связаны с используемыми структурами данных, реструктуризация кода не обязательно значительно улучшит программу. Если программа была написана с помощью редкого варианта языка программирования, стандартные средства преобразования структуры могут выполняться некорректно, поэтому неизбежно ручное вмешательство.
Иногда не стоит реструктуризировать все программы системы. Некоторые программы могут отличаться хорошим качеством, другие не подвергались большому количеству изменений, которые повредили бы их структуру. В работе [13] предлагается набор показателей для выявления тех программ, реструктуризация которых будет наиболее эффективной. Для этого можно использовать следующие показатели:
• интенсивность сбоев в работе программы; • процентное соотношение кода, измененного на протяжении года; • сложность компонентов.
При преобразовании структуры программ также следует учитывать степень соответствия программ или системных компонентов существующим стандартам.
Читайте также: II. ПРОГРАММА ТЕОРЕТИКО-ПРИКЛАДНОГО СОЦИОЛОГИЧЕСКОГО ИССЛЕДОВАНИЯ Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|