2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3, 4
 
 Re: Зачем новичкам впаривают ООП, а не процедурного прог-ния?
Сообщение19.09.2010, 14:26 
Заслуженный участник


09/08/09
3438
С.Петербург
vek88 в сообщении #354002 писал(а):
Это утверждение не вполне точно, но оно бесспорно.
Это для кого как :)
vek88 в сообщении #354002 писал(а):
В самом деле, в реальной жизни мы, как правило, говорим и пишем декларативно.
В реальной жизни, до тех пор пока декларация не сопровождается конкретной программой действий, она остаётся "пустой декларацией":)
vek88 в сообщении #354002 писал(а):
Откройте, например, любой роман - алгоритмического изложения мы там обычно не находим.
В любом романе мы обычно находим описание последовательности событий и поступков действующих лиц, а вовсе не декларации начального и конечного состояний.

 Профиль  
                  
 
 Re: Зачем новичкам впаривают ООП, а не процедурного прог-ния?
Сообщение19.09.2010, 14:34 


16/06/10
199
EtCetera в сообщении #353976 писал(а):
Или Вы не это имели в виду?
Скорее всего имелось ввиду, что-то типа
Код:
do
{
    X = random(100);
    if (Arrow[X] != 0) continue;
    ...
    if (<условие 2>) continue;
    ...
    if (<условие 3>) continue;
    ...
} while (1);
Кстати, в VBA "неплохо смотрится" инструкция On Error Goto.

Для баланса мнений - как вам в языках ООП обработка исключений (exceptions), порядок вызова деструкторов объектов? Очень похоже на завуалированное использование нелюбимого goto. Никогда при изучении какого-нибудь кода не возникал вопрос, что было бы быстрее найти - метку или нужный catch-блок?

 Профиль  
                  
 
 Re: Зачем новичкам впаривают ООП, а не процедурного прог-ния?
Сообщение19.09.2010, 16:12 


15/10/09
1344
Maslov в сообщении #354012 писал(а):
vek88 в сообщении #354002 писал(а):
Это утверждение не вполне точно, но оно бесспорно.
Это для кого как :)
vek88 в сообщении #354002 писал(а):
В самом деле, в реальной жизни мы, как правило, говорим и пишем декларативно.
В реальной жизни, до тех пор пока декларация не сопровождается конкретной программой действий, она остаётся "пустой декларацией":)
vek88 в сообщении #354002 писал(а):
Откройте, например, любой роман - алгоритмического изложения мы там обычно не находим.
В любом романе мы обычно находим описание последовательности событий и поступков действующих лиц, а вовсе не декларации начального и конечного состояний.
Уговорили - скажу и точно и бесспорно: в нашей речи подавляющее большинство высказываний - декларативные. А причем здесь "декларации начального и конечного стостояний" не понял. Ну да ладно - я уже сообщил точный смысл о преобладании деклараций в нашей речи - они в ней почти всюду. Алгоритмы же в ней есть (в том числе, в романах) только иногда, т.е. "на множестве меры ноль". В частности, в программировании оператор GOTO нужен ... иногда, т.е. на "на множестве нулевой меры".

Отсюда заключаем о большей привычности (и понятности?) декларативного стиля для человека. Думаю, что "идеальное программирование" должно быть на 99% декларативным и только на 1% - алгоритмическим. Цифры приближенные - прошу к их точности не придираться.

Теперь, кажется, все, ... и овцы сыты, и волки съедены.

 Профиль  
                  
 
 Re: Зачем новичкам впаривают ООП, а не процедурного прог-ния?
Сообщение19.09.2010, 16:38 
Аватара пользователя


01/04/10
910
vek88

Я сам одно время думал, что мол если написано в учебнике, что использование goto всегда плохо, значит так оно и есть. Но на практике я заметил, что в некоторых случаях goto вполне оправдан.

Сначала немного опишу как я понимаю, где плохо использовать goto:

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

А теперь, где goto уместен:

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

http://nginx.sourcearchive.com/document ... ource.html
http://nginx.sourcearchive.com/document ... ource.html
http://nginx.sourcearchive.com/document ... ource.html
http://nginx.sourcearchive.com/document ... ource.html
http://nginx.sourcearchive.com/document ... ource.html

И во многих других однотипных модулях в папке src/http/modules есть очень похожие друг на друга структуры кода.

 Профиль  
                  
 
 Re: Зачем новичкам впаривают ООП, а не процедурного прог-ния?
Сообщение19.09.2010, 20:46 


15/10/09
1344
creative
Вот Вы пишете
creative в сообщении #354064 писал(а):
Я сам одно время думал, что мол если написано в учебнике, что использование goto всегда плохо, значит так оно и есть. Но на практике я заметил, что в некоторых случаях goto вполне оправдан.
Видите ли, Вы очень плохо думаете, что можно во всем доверять учебникам. Советую в серьезных для Вас вещах читать несколько разных учебников и не только учебников. Только в сравнении разных мнений Вы приблизитесь к истине.

Что касается меня, то по структурному программированию я вообще не читал учебников. Единственная книга, которую я читал более 30 лет назад - это книга отцов-основателей Дал, Дейкстра, Хоор Структурное программирование.

А зауважал их идеи где-то 20-25 лет назад, когда был начальником лаборатории программирования, а потом лаборатории ИИ. В значительной мере, под влиянием моих сотрудников. И убедился в правильности идеи на многолетнем опыте нашего коллектива.

Что касается Ваших примеров, посмотрел только первый (нет времени на просмотр всех). В этом примере я не смог увидеть полезность GOTO. Ведь ИМХО суть примера в следующем. У Вас есть цикл с двумя возможностями окончания, назовем их обычная и необычная. В первом случае Вы выходите из цикла обычным образом, затем что-то делаете, а далее выполняете заключительные действия после метки done. А во втором случае Вы "экстренно" выходите из цикла сразу к заключительным действиям, пропуская что-то.

Я бы это сделал проще и нагляднее - ввел бы переменную "состояния" State, которой присвоил бы сразу значение "Нормально", а при наступлении особой ситуации - значение "Особый случай". Из цикла бы выходил только обычным образом. А после цикла - Вы уже догадались:
Код:
if (State = "Нормально")
выполнить что-то. Да, у Вас появится лишняя переменная, но ИМХО она отражает суть происходящего в Вашей программе. И гораздо лучше, чем GOTO.

Если я неправильно понял смысл Вашего примера, поправьте меня, но суть моего замечания, надеюсь, Вам понятна.

ЗЫ. И напоминаю, что я не за запрет использования GOTO - используйте на здоровье, если Вам это кажется удобным. Но при этом проверяйте себя - так ли уж это Вам удобно, как кажется. Глядишь, и увидите, что это был (по Вашему выражению) костыль.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 50 ]  На страницу Пред.  1, 2, 3, 4

Модератор: Модераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group