Обсуждение:Процедурное программирование

Последнее сообщение: 10 лет назад от РоманСузи

Статью необходимо переписать!

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

Такое впечатление, что статью написал человек, далёкий от реального программирования, возможно математик.
94.179.32.26 20:28, 8 октября 2012 (UTC)Ответить


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

Императивное программирование - это рассмотрение (и конструирование) программы как плана вычислительного процесса.
Императивная программа по сути представляет собой (чётко заданный на формальном языке; гибкий и разветвлённый) план вычислительных работ.

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

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

По логике вещей это именно так. И это конечно не моё "оригинальное исследование". Это следует из самой истории развития языков программирования (самые первые машинные программы - где-то в 1948 - были императивными, но возможность выделения процедур с параметрами появилась заметно позднее - где-то около 1955 - уже в алгебраическом языке Fortran). Хотя конечно нужны ссылки на авторитетные источники. Поищу.

Mas.morozov 10:16, 27 февраля 2010 (UTC)Ответить

Кстати, в качестве первого подтвержедния моего тезиса — в википедии уже имеестя отдельная статья "императивное программирование". При этом в английской версии procedural programming указано, что эти термины иногда (но далеко не всегда ведь) употребляются как синонимы. Там же дано определение процедурного программирования, аналогичное приведённому мной выше, но никак не совпадающее с приведённым в обсуждаемой статье. Рассмотрение этих двух понятий как полных синонимов всё же скорее ошибочно. Mas.morozov 10:49, 27 февраля 2010 (UTC)Ответить
Абсолютно согласен - случайно зашел на эту страницу Википедии и читал недоумевая всё сильнее и сильнее. Что-то автор этой писанины всё перепутал. Прежде всего процедурное программирование = выделение кода в подпрограммы (они же процедуры/функции). 94.179.32.26 20:28, 8 октября 2012 (UTC)Ответить

В этой статье дано определение именно императивного, а не процедурного программирования. Потому предлагаю переписать эту статью, основываясь на procedural programming  (англ.), где дано правильное определение процедурного программирования, что соответствует названию статьи.

"Двойное" обозначение темы в тексте статьи

Процедурное (императивное) программирование

считаю некорректным, поскольку имеется отдельная статья "императивное программирование". Если бы эти термины и в самом деле были полными синонимами (на что намекает подобное указание второго термина в скобках), следовало бы сделать эту стаью перенаправлением, а не указывать "двойную" тему.

Mas.morozov 10:49, 27 февраля 2010 (UTC)Ответить

Поддерживаю! --ol_b 21:06, 9 ноября 2011 (UTC)Ответить
Переписал определение по книге Мир Лиспа. Во всяком случае, определение не противоречит интуиции о сути процедурного программирования. Кроме того, установлена связь между императивным (АИ говорит об операторном как синониме императивного) и процедурным программированием, из которой видно как «план вычислительных работ», так и «организация кода». Если найдется что-то лучше — давайте еще раз пересмотрим, смотря не англовики, а на авторитетные источники. Кроме того, процедурность — первый шаг на пути к инкапсуляции, но пока не нашел ничего авторитетного на этот счет. РоманСузи 16:14, 9 ноября 2013 (UTC)Ответить

Procedural != Imperative

править

Не знаю, почему в англовики en:Procedural programming говорится о синонимах (на это не поставлено источников), но в en:Imperative programming на мой взгляд все поставлено на место (хотя источников тоже не вижу): "Procedural programming is imperative programming in which the program is built from one or more procedures (also known as subroutines or functions)." По всей видимости, сейчас сложно представить, как императивное программирование может не быть процедурным. А как же ассебмлер? Хоть и не АИ, но наверное можно найти и подтверждение в АИ: http://programmers.stackexchange.com/questions/117092/whats-the-difference-between-imperative-procedural-and-structured-programming РоманСузи 17:27, 12 мая 2013 (UTC)Ответить