Процедурна декомпозиція програм, застосування підпрограм в мові високого рівня Паскаль (Лабораторна робота № 4), страница 2

program Scheme_With_Procedures;

      ...

procedure Plot_Rezistor ( ... );

begin

      Line( … );

      Line( … );

      Line( … );

      Line( … );

end;

procedure Plot_Condencer ( ... );

begin

      ...

end;

procedure Plot_Inductance ( ... );

begin

      ...

end;

      ...

begin

      ...

      Plot_Rezistor ( ... );

      Plot_Rezistor ( ... );

      Plot_Rezistor ( ... );

      Plot_Rezistor ( ... );

      Plot_Inductance ( ... );

      Plot_Inductance ( ... );

      Plot_Condencer ( ... );

      ...

end.

program Scheme_Without_Procedures;

      ...

begin

      Line( … );

      Line( … );

      Line( … );

      Line( … );

      Line( … ); 

      Line( … );

      Line( … );

      Line( … );

      Line( … ); 

      Line( … );

      Line( … );

      Line( … );

      Line( … ); 

      Line( … );

      Line( … );

      Line( … );

      Line( … ); 

      Line( … ); 

      Line( … ); 

      Line( … ); 

      Arc( … );  

      Arc( … );

      Arc( … );

      Arc( … );  

      Arc( … );

      Arc( … );

      Arc( … );  

      Arc( … );

      Arc( … );

      . . .

end.

а) застосування процедурної декомпозиції

б) непроцедурний стиль

Рис. 4.2. Вигляд програм для зображення принципової електричної схеми

За рахунок чого ж саме вдалося підвищити зрозумілість програми? Відповідь – за рахунок відділення застосування процедур (підзадач) від їх механізму реалізації. Якщо "малювання резистора" є підзадачею, то механізмом її реалізації в мові Паскаль є малювання чотирьох ліній. Програмістові, якому потрібно зобразити резистор в непроцедурній програмі (рис. 4.3б), вставляє до її тексту чотири рядки Line, тобто вміщує в безпосередньо в програму механізм реалізації потрібної підзадачі. У випадку ж процедурної декомпозиції до основної програми вміщується ідентифікатор процедури (Plot_Rezistor), що відображає ціль виконаної дії ("малювати резистор") а не спосіб її досягнення  ("малювати чотири лінії"). Механізм дії процедур в Паскалі виноситься до розділу оголошень програми (на рис. 4.3а реалізацію процедури Plot_Rezistor зафарбовано темно-сірим кольором), або до іншого модуля (див. наступний розділ).

Таким чином встановлено головну перевагу процедурних програм над не процедурними – підвищення зрозумілості (читаємості) текстів програм.

Розглянемо тепер процес розробки процедурних програм більш детально. Головні етапи розробки є наступними:

1.  Аналіз та декомпозиція предметної області з виділенням переліку процедур (функцій) та встановленням задач, що вирішуються кожною з процедур.

2.  Детальний аналіз кожної з підзадач та визначення їх інтерфейсу.

3.  Реалізація процедур (написання програмного коду кожної з процедур).

4.  Інтеграція процедур для формування кінцевої програми.

В якості прикладу застосування наведеної послідовності розробки розглянемо написання програми для малювання принципової схеми (рис. 4.1), але в цьому випадку доведемо програму до робочої версії.

Аналіз та процедурна декомпозиція предметної області