~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 2E13208144ADC2632491A71C7C4235E3__1717832700 ✰
Заголовок документа оригинал.:
✰ Spaghetti code - Wikipedia ✰
Заголовок документа перевод.:
✰ Хвосты спагетти — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Spaghetti_code ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/2e/e3/2e13208144adc2632491a71c7c4235e3.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/2e/e3/2e13208144adc2632491a71c7c4235e3__translat.html ✰
Дата и время сохранения документа:
✰ 21.06.2024 09:47:32 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 8 June 2024, at 10:45 (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

Хвосты спагетти

Из Википедии, бесплатной энциклопедии

«Код спагетти» уничижительное словосочетание, обозначающее неструктурированный и сложный в обслуживании исходный код . Код спагетти может быть вызван несколькими факторами, такими как изменчивые требования к проекту, отсутствие правил стиля программирования и инженеров-программистов . недостаточность навыков или опыта [1]

Значение [ править ]

Код, в котором чрезмерно используются операторы GOTO , а не конструкции структурированного программирования , что приводит к запутанным и неподдерживаемым программам, часто называют спагетти-кодом. [2] Такой код имеет сложную и запутанную структуру управления , в результате чего поток программы концептуально похож на тарелку спагетти , запутанную и запутанную. [3]

В публикации Национального бюро стандартов США в 1980 году фраза « программа спагетти» использовалась для описания старых программ, имеющих «фрагментированные и разрозненные файлы». [4]

Код-спагетти также может описывать антишаблон, в котором объектно-ориентированный код написан в процедурном стиле, например, путем создания классов, методы которых слишком длинные и беспорядочные, или отказа от объектно-ориентированных концепций, таких как полиморфизм . [5] Наличие этой формы спагетти-кода может существенно снизить понятность системы. [6]

История [ править ]

Неясно, когда фраза «спагетти-код» вошла в обиход; однако в 1977 году появилось несколько упоминаний, в том числе «Макароны лучше, чем спагетти» Гая Стила . [7] В книге 1978 года «Букварь по дисциплинированному программированию с использованием PL/I, PL/CS и PL/CT» Ричард Конвей описал программы, которые «имеют такую ​​же чистую логическую структуру, как тарелка спагетти». [8] фраза повторена в книге 1979 года «Введение в программирование», которую он написал в соавторстве с Дэвидом Грайсом . [9] В статье 1988 года «Спиральная модель разработки и улучшения программного обеспечения » этот термин используется для описания старой практики модели кода и исправлений , которая не имела планирования и в конечном итоге привела к развитию водопадной модели . [10] В книге 1979 года « Структурное программирование для программистов COBOL» автор Пол Нолл использует фразы «спагетти-код» и «крысиное гнездо» как синонимы для описания плохо структурированного исходного кода. [11]

На Ada – Europe '93 конференции Ада была описана как вынуждающая программиста «создавать понятный код вместо спагетти-кода» из-за его ограничительного механизма распространения исключений. [12]

В пародии на компьютерные языки в журнале The Michigan Technic 1981 года под названием «Говоря в ГЛАВНО... байты FORTRAN!!» автор описал FORTRAN , заявив, что «он полностью состоит из спагетти-кода». [13]

Ричард Хэмминг описал в своих лекциях [14] этимология термина в контексте раннего программирования в двоичных кодах:

Если при исправлении ошибки вы хотели вставить какие-то пропущенные инструкции, то вы брали непосредственно предыдущую инструкцию и заменяли ее переносом на какое-то пустое место. Туда вы помещаете инструкцию, которую только что переписали, добавляете инструкции, которые хотите вставить, а затем следует возврат обратно в основную программу. Таким образом, программа вскоре превратилась в последовательность прыжков управления в странные места. Когда, как это почти всегда случается, в исправлениях были ошибки, вы использовали тот же трюк снова, используя какое-то другое доступное пространство. В результате путь управления программой через хранилище вскоре принял вид банки спагетти. Почему бы просто не вставить их в выполнение инструкций? Потому что тогда вам придется перебирать всю программу и менять все адреса, которые ссылались на любую из перемещенных инструкций! Что угодно, только не это!

Связанные фразы [ править ]

Код равиоли [ править ]

Код равиоли — это термин, специфичный для объектно-ориентированного программирования . Он описывает код, состоящий из хорошо структурированных классов , которые легко понять по отдельности, но трудно понять в целом. [15]

Код лазаньи [ править ]

Код Лазанья относится к коду, слои которого настолько сложны и переплетены, что внесение изменений в один уровень потребует изменений во всех остальных слоях. [16]

Примеры [ править ]

Ниже следует то, что можно было бы считать тривиальным примером спагетти-кода на BASIC . Программа выводит на экран каждое из чисел от 1 до 100 вместе с его квадратом. Отступы не используются для разграничения различных действий, выполняемых кодом, и программы. GOTOоператоры создают зависимость от номеров строк . Поток исполнения из одной области в другую предсказать труднее. Реальные проявления спагетти-кода более сложны и могут значительно увеличить затраты на обслуживание программы.

1   я  знак равно  0 
 2   я  =  я  +  1 
 3   ПЕЧАТЬ   я  ;   "квадрат="  ;   i  *  i 
 4   IF   i  >=  100   THEN   ПЕРЕЙТИ К   6 
 5   ПЕРЕЙТИ К   2 
 6   ПЕЧАТЬ   «Программа завершена». 
  7   КОНЕЦ 

Вот тот же код, написанный в стиле структурированного программирования :

1   FOR   i  =  от 1   до   100 
 2       PRINT   i  ;   "квадрат="  ;   i  *  i 
 3   ДАЛЕЕ   i 
 4   ПЕЧАТЬ   «Программа завершена». 
  5   КОНЕЦ 

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

Вот еще один пример кода спагетти со встроенными операторами GOTO.

  INPUT   «Сколько чисел нужно отсортировать?»  ;    T 
   DIM   n  (  T  ) 
   FOR   i   =   1   TO   T 
     НАПЕЧАТАЙТЕ   «НОМЕР:»  ;    i 
     INPUT   n  (  i  ) 
   NEXT   i 
   'Вычисления: 
   C   =   T 
 E180: 
   C   =   INT  (  C   /   2  ) 
   IF   C   =   0   THEN   GOTO   C330 
   D   =   T   -   C 
   E   =   1 
 I220: 
   f   =   E 
 F230: 
   g   =   f   +   C 
   ЕСЛИ   n  (  f  )   >   n  (  g  )   ТО   ПОМЕНЯЙТЕ   n  (  f  ),   n  (  g  ) 
   f   =   f   -   C 
   ЕСЛИ   f   >   0   ТО   ПЕРЕЙДИТЕ К   F230 
   E   =   E   +   1 
   ЕСЛИ   E   >   D   ТО   ПЕРЕЙДИТЕ К   E180 
   ПЕРЕЙДИТЕ   К I220 
 C330: 
   PRINT   «Отсортированный список» 
   FOR   i   =   1   TO   T 
     PRINT   n  (  i  ) 
   NEXT   i 

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

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

  1. ^ Маркус, Пицка (2004). «Исправление спагетти-кода с помощью рефакторинга?» (PDF) . Исследования и практика в области программной инженерии : 846–852. Архивировано из оригинала (PDF) 5 марта 2018 года . Проверено 5 марта 2018 г.
  2. ^ Крам, Дэвид; Хедли, Пол (2005). «Местоимения и процедурное значение: актуальность спагетти-кода и параноидального бреда» (PDF) . Рабочие документы Оксфордского университета по лингвистике, филологии и фонетике . 10 : 187–210. Архивировано из оригинала (PDF) 6 марта 2018 года . Проверено 5 марта 2018 г.
  3. ^ Хорстманн, Кей (2008). «Глава 6 — Итерация» . Концепции Java для AP Computer Science (5-е изд. [т.е. 2-е изд.]. Изд.). Хобокен, Нью-Джерси: J. Wiley & Sons. стр. 235–236. ISBN  978-0-470-18160-7 . Проверено 2 января 2017 г.
  4. ^ Национальное бюро стандартов США (1980). Специальное техническое издание ASTM . Типография правительства США.
  5. ^ Моха, Н.; Генеук, Ю.Г.; Дюсьен, Л.; Мер, А. Ф. Ле (январь 2010 г.). «ДЕКОР: метод спецификации и обнаружения запахов кода и дизайна». Транзакции IEEE по разработке программного обеспечения . 36 (1): 20–36. CiteSeerX   10.1.1.156.1524 . дои : 10.1109/TSE.2009.50 . ISSN   0098-5589 . S2CID   14767901 .
  6. ^ Аббес, М.; Хомх, Ф.; Генеук, Ю.Г.; Антониол, Г. (2011). «Эмпирическое исследование влияния двух антипаттернов, кода Blob и кода спагетти, на понимание программы». 2011 15-я Европейская конференция по сопровождению и реинжинирингу программного обеспечения . стр. 181–190. CiteSeerX   10.1.1.294.1685 . дои : 10.1109/CSMR.2011.24 . ISBN  978-1-61284-259-2 . S2CID   14152638 .
  7. ^ Гай Льюис Стил. 1977. Макароны лучше спагетти. В материалах симпозиума 1977 года по искусственному интеллекту и языкам программирования. Ассоциация вычислительной техники, Нью-Йорк, штат Нью-Йорк, США, 60–66. DOI: https://doi.org/10.1145/800228.806933.
  8. ^ Конвей, Ричард (1978). Учебник по дисциплинированному программированию с использованием PL/I, PL/CS и PL/CT . Издательство Уинтроп. ISBN  978-0-87626-712-7 .
  9. ^ Конвей, Ричард; Грис, Дэвид (1979). Введение в программирование (3-е изд.). Маленький, Браун. ISBN  978-0-316-15414-7 .
  10. ^ Бём, Барри В. (май 1988 г.). «Спиральная модель разработки и улучшения программного обеспечения». IEEE-компьютер . 21 (2): 61–72. дои : 10.1109/2.59 . S2CID   1781829 .
  11. ^ Нолл, Пол (1977). Структурное программирование для программиста COBOL: проектирование, документация, кодирование, тестирование . М. Мурач и партнеры.
  12. ^ Швилле, Юрген (1993). «Использование исключений и злоупотребление ими — 12 рекомендаций по правильной обработке исключений». Конспекты лекций по информатике . Ада – Европа '93 (Материалы). Конспекты лекций по информатике. Том. 688. Шпрингер Берлин Гейдельберг. стр. 142–152. дои : 10.1007/3-540-56802-6_12 . ISBN  978-3-540-56802-5 .
  13. ^ МТСБС [ нужны разъяснения ] (март – апрель 1981 г.). «Говоря по сути… байты FORTRAN!!». Мичиганский Техник . 99 (4). {{cite journal}}: CS1 maint: несколько имен: список авторов ( ссылка ) CS1 maint: числовые имена: список авторов ( ссылка )
  14. ^ Хэмминг, Ричард (1996). Искусство заниматься наукой и инженерией . Тейлор и Фрэнсис. ISBN  9056995006 .
  15. ^ Де Тройер, О. (13 мая 1991 г.). Андерсен, Рудольф; Бубенко Янис А.; Сёльвберг, Арне (ред.). Объектно-бинарная модель отношений: действительно объектно-ориентированная концептуальная модель (PDF) . Передовая инженерия информационных систем. Заметки по числовой механике жидкости и междисциплинарному проектированию. Том. 498. стр. 561–578. дои : 10.1007/3-540-54059-8_104 . ISBN  978-3-319-98176-5 . S2CID   10894568 .
  16. ^ Томов, Лачезар; Иванова, Валентина (октябрь 2014 г.). «Обучение передовому опыту разработки программного обеспечения на контрпримерах» . Информатика и образование в области компьютерных наук (1): 397–405 . Проверено 5 марта 2018 г.

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

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