Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2002.07.29;
Скачать: [xml.tar.bz2];

Вниз

Структурное программирование - что за штука?   Найти похожие ветки 

 
MaximatorVeter   (2002-07-01 14:23) [0]

Зашел тут у нас небольшой спор на эту тему.

Я (более молодой) утверждаю:

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

А мой оппонент (человек лет 30-35) говорит:

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

Кто из нас прав?


 
VAleksey   (2002-07-01 14:31) [1]

Ну насколько мне помнятся все курсы по программированию то ты прав. Хотя ... память слабовата и теорию надо освежить :)).
ЗЫ
Ты прав 100%.


 
Виктор Щербаков   (2002-07-01 14:34) [2]

Одно дело структура записи программы (это я про отступы), и другое - структура самой программы.
Для восприятия программы человеком важно и то и другое, для машины неважно вообще. Она делает то, что написали.
А что касается терминологии, то в термин "структурное программирование" вкладывается смысл структурирования алгоритма, а не его записи. Так что выходит ты прав.


 
Игорь Шевченко   (2002-07-01 14:42) [3]

Сдается мне, что оба неправы...


 
VAleksey   (2002-07-01 14:44) [4]

Освежил память -)). То что ты говоришь это процедурное программирование.


 
MaximatorVeter   (2002-07-01 14:45) [5]


> Игорь Шевченко © (01.07.02 14:42)
> Сдается мне, что оба неправы...


А аргументы?


 
MaximatorVeter   (2002-07-01 14:46) [6]


> VAleksey © (01.07.02 14:44)
> Освежил память -)). То что ты говоришь это процедурное программирование.


Что же тогда структурное?


 
VAleksey   (2002-07-01 14:47) [7]

http://www.stu.ru/inform/glaves2/glava18/gl_18_2.html#structur_progr
Структурное программирование основано на модульной структуре программного продукта и типовых управляющих структурах алгоритмов обработки данных различных программных модулей


 
VAleksey   (2002-07-01 14:53) [8]

можно и так
http://manuilov.narod.ru/structura/2_3.htm

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



 
Виктор Щербаков   (2002-07-01 14:56) [9]

Однако MaximatorVeter © всё же оказался намного ближе к истине, если учитывать оговорку "в первом приближении".

Кстати, фанатам структурного программирования нельзя использовать Exit для выхода из функций. Потому что:
"В любой типовой структуре блок, кроме условного, имеет только один вход и выход"


 
MaximatorVeter   (2002-07-01 15:04) [10]

Всем спасибо.

> VAleksey

Особое спасибо.


 
Anatoly Podgoretsky   (2002-07-01 15:22) [11]

Виктор Щербаков © (01.07.02 14:56)
Exit не означает выход из середины, а означает уйти, при том с соблюдений правил хорошего тона, через стандартный выход :-)


 
Виктор Щербаков   (2002-07-01 15:52) [12]

Anatoly Podgoretsky © (01.07.02 15:22)
Exit эквивалентен goto на метку, стоящую непосредственно перед end функции. А про goto здесь уже много "хорошего" сказано.


 
Anatoly Podgoretsky   (2002-07-01 16:12) [13]

ничего хорошего про goto не скажу, позволяет выйти за пределы блока, в то же время exit соблюдает правила хорошего тона


 
Юрий Зотов   (2002-07-01 17:40) [14]

Ребята, что же вы так упрощаете-то?

Структурное программирование - это не практическое программирование, а нечто вроде методологии. В каком-то смысле, наверное, даже математической дисциплины.

Поэтому его НИ В КОЕМ СЛУЧАЕ не следует понимать, как простое разбиение программы на некие модули и подпрограммы. И, тем более, не следует смешивать с форматированием текста, отказом от Exit, GoTo и т.д. (тем более, что этих самых GoTo в виде разных "джампов" компилятор все равно поналепит целое море).

Структурное программирование - это один из методов построения АЛГОРИТМА решения задачи и одновременно СТРУКТУРЫ этого алгоритма. Например, оно рассматривает нисходящее и восходящее программирование (некие аналоги анализа/синтеза - методики решения задачи путем последовательного вычленения из нее подзадач вплоть до уже известных и, наоборот, "сборки" конечного алгоритма из уже известных). Понятно, что ни с каким практическим программированием, языками и компьютером все это это может быть вообще никак не связано, поскольку найденный в итоге алгоритм решения задачи можно записать и кучей других способов.

А "разбиение программы на процедуры" существовало и правда задолго до появления этого термина. И действительно было взято на вооружение при РЕАЛИЗАЦИИ этой технологии, как наиболее близко соответствующее его идее.

А отступы в тексте и GoTo здесь вообще ни при чем, хоть используете Вы их, хоть нет. Это немного из другой оперы, хотя и похожей.


 
blackman   (2002-07-01 17:50) [15]

>MaximatorVeter
Был такой Clipper - соответствовал стандартам структурного программирования и тихо скончался...


 
kull   (2002-07-01 18:10) [16]

2Юрий Зотов


> (тем более, что этих самых GoTo в виде разных "джампов"
> компилятор все равно поналепит целое море).


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


> , "сборки" конечного алгоритма из уже известных


А каким еще способом кроме вызова готовых функций можно использовать уже известные алгоритмы?
Методом Copy-Paste что ли?

Задача разбитая на логические блоки, реализуется аналогами этих блоков уже применительно к языку программирования.
Вот и получается что эти блоки не что иное как: конструкции, if..then..else, case, while, for, вызовы функций, а так же отдельные модули и т.п.

Это и есть структурное программирование.


 
Дремучий   (2002-07-01 18:39) [17]

а почему никто не вспомнил SQL?


 
Viewer   (2002-07-01 22:24) [18]

Если очень коротко:
1.Структурное программирование (СП)(проектирование) - это действительно методология проектирования, ставшая уже дисциплиной.
( см. Юрий Зотов © (01.07.02 17:40))

2. СП основано на методах нисходящего проектирования, модульности и типовых управляющих структурах.

3.Метод нисходящего проектирования основывается на методологии построения системы "сверху-вниз", когда общая задача(функция) на основе известных методах декомпозиции, разлагается на простые подзадачи (подфункции) и в итоге строится общая иерархическая модель решения задачи (выполнения функции).

4. Модульность основана на представлении (понятии) модуля, как логически взаимосвязанной совокупности функциональных элементов,
оформленных в виде отдельного программного модуля.
Модульност перекликается с методами нисходящего проектирования.

И если, опят же коротко - нижележащий модуль вызывается вышележащим и завершив выполнение, передает управления в верхний (вызвавший) модуль; принятие "основных" решений выносится на максимально высокий уровень; для реализации одной и той же функции в разных местах алгоритма, содается один модуль;
модуль имеет один вход и один выход.

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

6. И еще одна "малоизвестная" деталь СП: документация должна создаваться одновременно с программированием и ее важной частью являются комментарии в программе.

Идеология СП создавалась в IBM (70-е) в эпоху процедурного подхода к программированию.

Наступление ООП было неотвратимым, т.к. позволило устранить главную проблему процедурности - использование переключателей для обработки данных, когда любое изменение данных вело к изменению их обработчиков. Вместо этого были использованы классы, наследование и встраивание обработчиков данных в объекты, чем мы с Вами сегодня и пользуемся с удовольствием.



 
Юрий Зотов   (2002-07-01 23:34) [19]

> А каким еще способом кроме вызова готовых функций
> можно использовать уже известные алгоритмы?

Увы, Вы не поняли сути. Привожу пример.

В начальных классах щколы мы все решали задачки по арифметике и нас учили разбивать решение на отдельные действия. Помните - "эта задача решается в три действия"?

Так вот это и есть использование уже известных алгоритмов ("сложить", "разделить" и т.д.) для построения еще неизвестного алгоритма решения ВСЕЙ задачи. Структурное программирование в чистейшем виде.

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

Более того, если бы нас интересовал только алгоритм, а не сам ответ, то эти действия мы могли бы записывать обычными русскими фразами. И нам не нужны были бы ни числа, ни таблица умножения.


 
kull   (2002-07-01 23:49) [20]


> Юрий Зотов © (01.07.02 23:34)

Суть ясна.
К чему тогда слова о "джампах"?

Но речь то идет о структурном программировании имея в виду алгоритмические языки (Pascal например).
А то можно и наследование определить применительно к биологическим особям.


 
Юрий Зотов   (2002-07-02 00:53) [21]

> Но речь то идет о структурном программировании
> имея в виду алгоритмические языки

Ну вот, а Вы говорите "суть ясна". Выходит, не ясна все же.

Речь идет о структурном программировании. А оно не имеет в виду НМКАКИХ языков. Оно имеет в виду методологию решения задач. И все. Например, задачи о наиболее выгодном обмене квартиры. Или любой другой задачи. Никак не связанной ни с какими языками и вообще ни с какими компьютерами.


 
kaif   (2002-07-02 02:01) [22]

2 kull © (01.07.02 23:49)
Кстати, биологические виды не поддерживают множественного наследования. Нельзя скрестить крокодила с курицей.
:)
Структурное программирование это когда вместо классического изображения алгоритма используют квадратики и связи. Есть принцип их обхода - связи не должны пересекаться. Это похоже на дерево, по которому ползает букашка. В ветку можно залезать, но с ветки на ветку нельзя прыгать. Такое изображение позволяет моделировать программы на различном уровне подробности. Например, отладить крупную схему из нескольких черных ящиков, а потом уточнять далее сами эти ящики.
Целью было упростить объединение усилий множества программистов.
Однако это не спасло. Пришлось изобретать ООП.
В общем, автор вопроса прав. Отказ от GOTO является самым важным моментом. А exit не нарушает главного принципа - не допустить пересечения связей, поэтому exit приемлем.
Все это ИМХО.


 
Леша   (2002-07-02 07:18) [23]

>kaif
У почти у всех развитых живых организмов два предка. При этом инфромация заложенная в генах наследуюися от обоих, и она неидентична. Да, а вот дальше природа не пошла. А что до крокодила с курицей это вопрос времени.


 
VAleksey   (2002-07-02 08:48) [24]


>
> kaif © (02.07.02 02:01)

Я где то встречал пример про варенье :) предки которого - сахар и ягода :).


 
cyborg   (2002-07-02 10:35) [25]

>>kaif © (02.07.02 02:01)
>>Кстати, биологические виды не поддерживают множественного
>>наследования. Нельзя скрестить крокодила с курицей.
Ну это ошибочно! Ишак + Лошадь = Мул.
Если не ошибаюсь :-).


 
kull   (2002-07-02 10:59) [26]


> Юрий Зотов © (02.07.02 00:53)
> > Но речь то идет о структурном программировании
> > имея в виду алгоритмические языки
>
> Ну вот, а Вы говорите "суть ясна". Выходит, не ясна все
> же.

Не скорее это ВЫ меня не поняли.

То что Вы делаете акцент на том, что алгоритмические языки здесь не причем это я уяснил. В это Вы правы.(Ну раз меня так хотят убедить в том что мне не ясна суть дела, пусть будет так.)

Но делать упор на отсутствие применения этой "методологии решения задач" к языкам программирования не надо.

Я же говорю об этой так называемой "методологии" ПРИМЕНИТЕЛЬНО, ПРИМЕНИТЕЛЬНО, ПРИМЕНИТЕЛЬНО к алгоритмическим языкам.

Не забываем на каком сайте мы находимся...



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2002.07.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.011 c
1-95352
MCFire
2002-07-15 18:13
2002.07.29
Как програмно объеденить ячейки в Exel


1-95319
olookin
2002-07-15 16:07
2002.07.29
Перечисление констант


14-95564
LEON
2002-07-04 12:35
2002.07.29
Базы данны


14-95552
Arkady
2002-06-27 08:11
2002.07.29
Зависание BDE


6-95469
Свой
2002-05-15 11:40
2002.07.29
Преобразование адресов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский