~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ FC81464D76BAB04717181A6E0527A888__1716553860 ✰
Заголовок документа оригинал.:
✰ Jackson structured programming - Wikipedia ✰
Заголовок документа перевод.:
✰ Структурное программирование Джексона — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Jackson_structured_programming ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/fc/88/fc81464d76bab04717181a6e0527a888.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/fc/88/fc81464d76bab04717181a6e0527a888__translat.html ✰
Дата и время сохранения документа:
✰ 16.06.2024 10:09:07 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 24 May 2024, at 15:31 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Структурное программирование Джексона — Википедия Jump to content

Структурированное программирование Джексона

Из Википедии, бесплатной энциклопедии
Пример диаграммы JSP.

Структурное программирование Джексона ( JSP ) — метод структурного программирования , разработанный британским консультантом по программному обеспечению Майклом А. Джексоном и описанный в его книге « Принципы проектирования программ» 1975 года . [1] Техника JSP заключается в анализе структур данных файлов, которые программа должна читать как входные данные и создавать как выходные данные, а затем создавать проект программы на основе этих структур данных, чтобы структура управления программой обрабатывала эти структуры данных естественным образом. и интуитивный способ.

JSP описывает структуры (как данных, так и программ), используя три основные структуры: последовательность, итерацию и выбор (или альтернативы). Эти структуры изображены на диаграмме (по сути) как визуальное представление регулярного выражения .

Введение [ править ]

Майкл А. Джексон первоначально разработал JSP в 1970-х годах. Он описал систему в своей книге « Принципы проектирования программ» 1975 года . [1] В докладе на конференции 2001 г. [2] он представил ретроспективный анализ первоначальных движущих сил этого метода и связал его с последующими разработками в области разработки программного обеспечения. Целью Джексона было облегчить модификацию и поддержку программ пакетной обработки файлов COBOL , но этот метод можно использовать для разработки программ для любого языка программирования , который имеет структурированные конструкции управления — последовательность, итерацию и выбор («если/то/иначе»). .

Структурное программирование Джексона было похоже на структурное программирование Варнье/Орра. [3] [4] хотя JSP рассматривал структуры как входных, так и выходных данных, в то время как метод Варнье/Орра фокусировался почти исключительно на структуре выходного потока.

Мотивация метода [ править ]

На момент разработки JSP большинство программ представляли собой пакетные программы COBOL, обрабатывавшие последовательные файлы, хранящиеся на ленте. Типичная программа считывала входной файл как последовательность записей, поэтому все программы имели одинаковую структуру — единый основной цикл, который обрабатывал все записи в файле по одной. Джексон утверждал, что такая структура программы почти всегда неверна, и призывал программистов искать более сложные структуры данных. В главе 3 Принципов проектирования программ [1] Джексон представляет две версии программы: одна разработана с использованием JSP, другая — с традиционной одноконтурной структурой. Вот его пример, переведенный с COBOL на Java. Целью этих двух программ является распознавание групп повторяющихся записей (строк) в отсортированном файле и создание выходного файла со списком каждой записи и количества раз, когда она встречается в файле.

Вот традиционная одноконтурная версия программы.

Струнная   линия  ; 
 интервалов    число   =   0  ; 
  Строка   firstLineOfGroup   =   null  ; 

 одиночный основной цикл 
 while   ((  line   =   in  .  readLine  ())   !=   null  )   { 
     if   (  firstLineOfGroup   ==   null   ||   !  line  .quals   // начинаем  (  firstLineOfGroup  ))   { 
         if   (  firstLineOfGroup   !=   null  )   { 
             System  .   вне  .   println  (  firstLineOfGroup   +   ""   +   счетчик  ); 
          } 
         Счет   =   0  ; 
          firstLineOfGroup   =   линия  ; 
      } 
     Счет  ++  ; 
  } 
 Если   (  firstLineOfGroup   ! =   null  )   { 
     System  .   вне  .   println  (  firstLineOfGroup   +   ""   +   count  ); 
  } 

Вот версия той же программы в стиле JSP. Обратите внимание, что (в отличие от традиционной программы) она имеет два цикла, один вложенный в другой. Внешний цикл обрабатывает группы повторяющихся записей, а внутренний цикл обрабатывает отдельные записи в группе.

Струнная   линия  ; 
  int   NumberOfLinesInGroup  ; 

  линия   =   в  .   читатьстроку  (); 
  // начинаем внешний цикл: обрабатываем 1 группу 
 while   (  line   !=   null  )   {   
     NumberOfLinesInGroup   =   0  ; 
      Строка   firstLineOfGroup   =   линия  ; 

      // начинаем внутренний цикл: обрабатываем 1 запись в группе 
     while   (  line   !=   null   &&   line  .  равно  (  firstLineOfGroup  ))   { 
         NumberOfLinesInGroup  ++  ; 
          линия   =   в  .   читатьстроку  (); 
      } 
     Система  .   вне  .   println  (  firstLineOfGroup   +   " "   +   NumberOfLinesInGroup  ); 
  } 

Джексон критикует традиционную одноконтурную версию за неспособность естественным образом обработать структуру входного файла (повторяющиеся группы записей, содержащие повторяющиеся отдельные записи). Одним из признаков его неестественной конструкции является то, что для правильной работы он вынужден включать специальный код для обработки первой и последней записи файла.

Основной метод [ править ]

JSP использует полуформальные шаги для отражения существующей структуры входных и выходных данных программы в структуре самой программы.

Цель состоит в том, чтобы создавать программы, которые легко модифицировать в течение срока их службы. Основная идея Джексона заключалась в том, что изменения требований обычно представляют собой незначительные изменения в существующих структурах. Для программы, созданной с использованием JSP, все входные, выходные данные и внутренние структуры программы совпадают, поэтому небольшие изменения входных и выходных данных должны привести к небольшим изменениям в программе.

JSP структурирует программы с использованием четырех типов компонентов:

  • фундаментальные операции
  • последовательности
  • итерации
  • выбор

Метод начинается с описания входных данных программы с точки зрения четырех основных типов компонентов. Затем таким же образом описываются выходные данные программы. Каждый вход и выход моделируются как отдельная диаграмма структуры данных (DSD). Чтобы заставить JSP работать в приложениях с интенсивными вычислениями, таких как цифровая обработка сигналов (DSP), необходимо также нарисовать структурные диаграммы алгоритмов, которые фокусируются на внутренних структурах данных, а не на входных и выходных.

Структуры ввода и вывода затем унифицируются или объединяются в окончательную структуру программы, известную как диаграмма структуры программы (PSD). Этот шаг может включать добавление небольшого количества структур управления высокого уровня для объединения входов и выходов. Некоторые программы обрабатывают весь ввод перед выполнением какого-либо вывода, в то время как другие считывают одну запись, записывают одну запись и выполняют итерацию. Такие подходы должны быть отражены в PSD.

PSD, который не зависит от языка, затем реализуется на языке программирования. JSP ориентирован на программирование на уровне структур управления, поэтому реализованные проекты используют только примитивные операции, последовательности, итерации и выборки. JSP не используется для структурирования программ на уровне классов и объектов, хотя он может помочь структурировать поток управления внутри методов класса.

JSP использует нотацию диаграмм для описания структуры входов, выходов и программ с элементами диаграммы для каждого из основных типов компонентов.

Простая операция изображается в виде прямоугольника.

Коробка с надписью «А».
Операция

Последовательность операций представлена ​​прямоугольниками, соединенными линиями. В приведенном ниже примере A — это последовательность, состоящая из операций B, C и D.

Коробка с надписью «А» соединена с тремя коробками под ней с надписью «B», «C» и «D».
Последовательность

Итерация снова представлена ​​соединенными прямоугольниками. Кроме того, повторяющаяся операция отмечена звездочкой в ​​правом верхнем углу поля. В приведенном ниже примере A — это итерация нуля или более вызовов операции B.

Коробка с надписью «А» соединена с коробкой с надписью «Б» под ней со звездочкой в ​​правом верхнем углу.
Итерация

Выбор аналогичен последовательности, но в правом верхнем углу каждой дополнительной операции нарисован кружок. В данном примере A представляет собой выбор одной и только одной операции B, C или D.

Коробка с надписью «A» соединена с тремя коробками под ней с надписью «B», «C» и «D», каждая с кружком в верхнем правом углу.
Выбор

Обратите внимание, что на диаграммах выше последовательность или итерацию представляет собой элемент A, а не элементы B, C или D (которые на диаграммах выше являются элементарными). Джексон предлагает «правило просмотра вниз», чтобы определить, что представляет собой элемент, т.е. посмотрите на элементы под элементом, чтобы узнать, что это такое.

Рабочий пример [ править ]

В качестве примера, вот как программист JSP может спроектировать и закодировать кодировщик длины серии . Кодер длины прогона — это программа, входные данные которой представляют собой поток байтов, который можно рассматривать как происходящий в прогонах , где прогон состоит из одного или нескольких вхождений байтов одного и того же значения. Результатом работы программы является поток пар байтов, где каждая пара байтов представляет собой сжатое описание выполнения. В каждой паре первый байт представляет собой значение повторяющегося байта в выполнении, а второй байт представляет собой число, указывающее количество раз, когда это значение повторялось в выполнении. Например, серия из восьми вхождений буквы «А» во входной поток («АААААААА») приведет к созданию пары байтов «А8» в выходном потоке. Кодеры длины серии часто используются для грубого сжатия растровых изображений.

При использовании JSP первым шагом является описание структуры(ов) данных входного потока(ов) программы. Программа имеет только один входной поток, состоящий из нуля или более запусков одного и того же значения байта. Вот диаграмма структуры данных JSP для входного потока.

Второй шаг — описать структуру выходных данных, которая в данном случае состоит из нуля или более итераций пар байтов.

Следующим шагом является описание соответствий между компонентами входной и выходной структур.

Следующим шагом является использование соответствий между двумя структурами данных для создания структуры программы, способной обрабатывать структуру входных данных и создавать структуру выходных данных. (Иногда это невозможно. См. обсуждение конфликтов структур ниже.)

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

  1. прочитать байт
  2. запомнить байт
  3. обнулить счетчик
  4. счетчик приращения
  5. вывести запомненный байт
  6. выходной счетчик

Также на этом этапе перечисляются и добавляются в структурную схему программы условия итераций (циклов) и выборок (если-то-иначе или операторы случая).

  1. пока есть больше байтов
  2. пока байтов больше, и этот байт такой же, как первый байт прогона, и счетчик все равно умещается в байте

Как только диаграмма будет готова, ее можно будет перевести на любой используемый язык программирования. Вот перевод на C.

#include   <stdio.h> 
 #include   <stdlib.h> 

 int   main  (  int   argc  ,   char   *  argv  []) 
 { 
     int   c  ; 
      интервал   первый_байт  ; 
      число   интервалов  ; 

      с   =   получитьсимвол  ();      /* получаем первый байт */ 
     while   (  c   !=   EOF  )   { 
         /* обрабатываем первый байт в цикле */ 
         first_byte   =   c  ; 
          счет   =   1  ; 
          с   =   получитьсимвол  ();      /* получаем следующий байт */ 

         /* обрабатываем последующие байты в серии */ 
         while   (  c   !=   EOF   &&   c   ==   first_byte   &&   count   <   255  )   { 
             /* обрабатываем один байт того же значения */ 
             count  ++  ; 
              с   =   получитьсимвол  ();      /* получаем следующий байт */ 
         } 

         putchar  (  first_byte  ); 
          путчар  (  количество  ); 
      } 
     Возврат   EXIT_SUCCESS  ; 
  } 

решения сложных проектирования Методы задач

В «Принципах проектирования программ» Джексон определил ситуации, которые создают определенные виды проблем проектирования, и предложил методы их решения.

Одной из таких ситуаций является случай, когда программа обрабатывает два входных файла, а не один. В 1975 году одной из стандартных «каверзных проблем» была разработка программы обработки транзакций. В такой программе последовательный файл записей обновлений запускается против последовательного главного файла, создавая на выходе обновленный главный файл. (Например, ночью банк запускал пакетную программу, которая обновляла остатки на счетах своих клиентов на основе записей о депозитах и ​​снятиях средств, сделанных ими в тот день.) «Принципы разработки программ» предлагали стандартное решение этой проблемы. , а также объяснение логики дизайна.

Другая проблема заключалась в том, что Джексон назвал «трудностями распознавания», а сегодня мы бы назвали их проблемами синтаксического анализа. Базовая техника проектирования JSP была дополнена операциями POSIT и QUIT, что позволило разработать то, что мы сейчас называем анализатором с обратным отслеживанием.

JSP также распознал три ситуации, которые называются «конфликтами структур» — конфликт границ, конфликт порядка и конфликт чередования — и предоставил методы для их разрешения. В ситуациях конфликта структур структуры входных и выходных данных настолько несовместимы, что невозможно создать выходной файл из входного файла. По сути, необходимо написать две программы: первая обрабатывает входной поток, разбивает его на более мелкие фрагменты и записывает эти фрагменты в промежуточный файл. Вторая программа читает промежуточный файл и выдает желаемый результат.

JSP и объектно-ориентированный дизайн [ править ]

JSP был разработан задолго до того, как стали доступны объектно-ориентированные технологии. Он и его метод-преемник JSD не рассматривают то, что сейчас называют «объектами», как коллекции более или менее независимых методов. Вместо этого, следуя работам К.А.Р. Хоара , JSP и JSD описывают программные объекты как сопрограммы . [5] [6]

См. также [ править ]

Ссылки [ править ]

  1. ^ Перейти обратно: а б с Джексон, Массачусетс (1975), Принципы разработки программ , Академический .
  2. ^ Джексон, Массачусетс (2001), JSP в перспективе (PDF) , Конференция пионеров sd&m, Бонн, июнь 2001 г., заархивировано (PDF) из оригинала 16 мая 2017 г. , получено 26 января 2017 г. {{citation}}: CS1 maint: местоположение ( ссылка ) CS1 maint: отсутствует местоположение издателя ( ссылка )
  3. ^ Варнье, доктор медицинских наук (1974), Логическое построение программ , Нью-Йорк: Ван Ностранд Рейнхольд
  4. ^ Орр, К.Т. (1980), «Структурированное программирование в 1980-е годы», Труды ежегодной конференции ACM 1980 года , Нью-Йорк, Нью-Йорк: ACM Press, стр. 323–26, doi : 10.1145/800176.809987 , ISBN  978-0897910286 , S2CID   26834496
  5. ^ Виринга, Р. (декабрь 1998 г.), «Обзор структурированных и объектно-ориентированных методов и методов спецификации программного обеспечения», Comput Surv , 30 (4): 459–527, CiteSeerX   10.1.1.107.5410 , doi : 10.1145/299917.299919 , S2CID   14967319 .
  6. ^ Хендерсон-Селлерс, Брайан ; Эдвардс, Дж. М. (сентябрь 1990 г.), «Жизненный цикл объектно-ориентированных систем», Communications of the ACM , 33 (9): 142–59, doi : 10.1145/83880.84529 , S2CID   14680399 .

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: FC81464D76BAB04717181A6E0527A888__1716553860
URL1:https://en.wikipedia.org/wiki/Jackson_structured_programming
Заголовок, (Title) документа по адресу, URL1:
Jackson structured programming - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)