Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Листинг 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] предлагается набор показателей для выявления тех программ, реструктуризация которых будет наиболее эффективной. Для этого можно использовать следующие показатели:

 

• интенсивность сбоев в работе программы;

• процентное соотношение кода, измененного на протяжении года;

• сложность компонентов.

 

При преобразовании структуры программ также следует учитывать степень соответствия программ или системных компонентов существующим стандартам.

Поделиться:





Читайте также:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...