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 i=02 i=i+13 PRINT i;"squared=";i*i4 IF i>=100 THEN GOTO 65 GOTO 26 PRINT "Program Completed."7 END

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

1 FOR i=1 TO 1002     PRINT i;"squared=";i*i3 NEXT i4 PRINT "Program Completed."5 END

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

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

  INPUT "How many numbers should be sorted? "; T  DIM n(T)  FOR i = 1 TO T    PRINT "NUMBER:"; i    INPUT n(i)  NEXT i  'Calculations:  C = TE180:  C = INT(C / 2)  IF C = 0 THEN GOTO C330  D = T - C  E = 1I220:  f = EF230:  g = f + C  IF n(f) > n(g) THEN SWAP n(f), n(g)  f = f - C  IF f > 0 THEN GOTO F230  E = E + 1  IF E > D THEN GOTO E180  GOTO I220C330:  PRINT "The sorted list is"  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
Номер скриншота №: 47227420b83eb94f522a4794eda949a9__1719160800
URL1:https://arc.ask3.ru/arc/aa/47/a9/47227420b83eb94f522a4794eda949a9.html
Заголовок, (Title) документа по адресу, URL1:
Spaghetti code - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)