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

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



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

Сейчас этот форум просматривают: CDDDS


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

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