Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.07.29;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.016 c
1-95291
AlekseyK
2002-07-15 18:32
2002.07.29
ComPort


7-95585
МИФИст
2002-05-10 20:14
2002.07.29
Кодировка


3-95198
alexvan
2002-07-06 12:45
2002.07.29
Как выполнить запрос?


6-95473
MixerPro
2002-04-17 08:39
2002.07.29
Помогите с MNPOP3


4-95621
Nubie
2002-05-21 02:59
2002.07.29
???Запуск прграммы???