ООП vs структурное прогр. vs функциональное прогр.

Windows лучше чем Linux! Чем? Ясно же написано — чем Linux!
Раздуй свой холивар сегодня, потому что завтра это может сделать уже кто-то другой!

Какая концепция вам больше нравиться?

ООП
31
74%
Структурное
2
5%
Функциональное
6
14%
Другое
3
7%
 
Всего голосов : 42

GM
programador
programador
 
Сообщения: 1427
Зарегистрирован: 24.06.2003 (Вт) 15:56
Откуда: 194.67.52.100

ООП vs структурное прогр. vs функциональное прогр.

Сообщение GM » 14.06.2006 (Ср) 10:35

Какая концепция вам больше нравиться?
ЗЫ: Возможно я ошибаюсь в терминах, так что поправьте меня, если что-то не то.
الفيجوال بيسك الرابح

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 14.06.2006 (Ср) 13:03

Lambda calculus рулит, потому что я в нём ничерта не понимаю :-D
Изображение

Денис Победря
Мегобойанист
Мегобойанист
 
Сообщения: 1037
Зарегистрирован: 03.01.2005 (Пн) 21:29
Откуда: Из Москвы

Сообщение Денис Победря » 14.06.2006 (Ср) 14:02

Мне нравится .Нет, ПауерБейсик, АСМ. И за что голосовать?
[Место cдаётся]

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 14.06.2006 (Ср) 14:12

За што хочешь ))))

ООП ибо рульно

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 14.06.2006 (Ср) 14:16

Мне все одинаково нравится. В конце концов, выбор зависит от задачи.
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

MeMBus
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 450
Зарегистрирован: 23.02.2005 (Ср) 7:03
Откуда: Из леса...

Сообщение MeMBus » 15.06.2006 (Чт) 3:52

Стока много слов незнакомых, одно ООП чего стоит :)
Бороться и искать, найти и перепрятать!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 15.06.2006 (Чт) 4:01

ух ты. Все, кроме меня, единогласно за ООП.
Если мотивировка у них такая же, как у меня -- тогда забавно :-)
Изображение

--=GAMER=--
Фиолетовый бот
Фиолетовый бот
Аватара пользователя
 
Сообщения: 810
Зарегистрирован: 22.03.2004 (Пн) 11:29
Откуда: Владивосток

Сообщение --=GAMER=-- » 15.06.2006 (Чт) 7:19

А чё такое ООП????
В темноте слепец — самый надежный проводник. В эпоху безумия пусть тебя ведет сумасшедший.

rRenderer Engine
VB Wiki

Tamplier
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 183
Зарегистрирован: 18.11.2005 (Пт) 13:35
Откуда: Москва

Сообщение Tamplier » 15.06.2006 (Чт) 8:09


GAGArin
Неистовый флудер
Неистовый флудер
 
Сообщения: 1777
Зарегистрирован: 23.12.2002 (Пн) 12:46
Откуда: я тут взялся, не знаю...

Сообщение GAGArin » 15.06.2006 (Чт) 8:54

Tamplier
Да НЛП рулит над другими однозначно ))

Oxygen
Белая и пушистая
Белая и пушистая
Аватара пользователя
 
Сообщения: 1314
Зарегистрирован: 15.07.2003 (Вт) 7:14
Откуда: Москва

Сообщение Oxygen » 15.06.2006 (Чт) 9:09

--=GAMER=-- писал(а):А чё такое ООП????


Гы. :lol: Объектно Ориентированное Программирование.
Процедура клонирования завершена.
Коррекция имплантированного сознания соответствует принятым алгоритмам.
Уникальный идентификатор скопирован в чип временного паспорта.
Активация прав гражданина ожидается в течение 24 часов

Денис Победря
Мегобойанист
Мегобойанист
 
Сообщения: 1037
Зарегистрирован: 03.01.2005 (Пн) 21:29
Откуда: Из Москвы

Сообщение Денис Победря » 15.06.2006 (Чт) 9:16

А вроде бы не функциональное, а процедурное :!: :arrow:
[Место cдаётся]

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 15.06.2006 (Чт) 10:56

Вот, как всегда ни черта не знаю по теории. Не могу отличить структурное программирование от декларативного, а декларативное - от процедурного. Не знаю наизусть закон де Моргана. И уравнение Кортевега-де Фриса (хотя это уже из физики.) Что не мешает писать всякие ListControl'ы, HTML-редакторы и утилиты.

Функциональное - это совсем другое. Лисп, например. Очень, говорят, подходит для обработки (парсинга) текстов.
Последний раз редактировалось hCORe 15.06.2006 (Чт) 14:33, всего редактировалось 1 раз.
Моду создают модоки, а распространяют модозвоны.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 15.06.2006 (Чт) 12:07

hCORe писал(а):Структурное = Процедурное = Декларативное. Типа кубэйсика.

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


hCORe писал(а):А функциональное - это совсем другое. Лисп, например. Очень, говорят, подходит для обработки (парсинга) текстов.

И для всего остального тоже ;-)
Точно так же, как Фортран подходит не только для обработки формул.
И точно так же, как VB -- не "многоцелевой язык для начинающих".
Нельзя название трактовать совсем уж буквально.


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

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

Lumen
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 841
Зарегистрирован: 03.12.2005 (Сб) 16:09
Откуда: Брянск

Сообщение Lumen » 15.06.2006 (Чт) 13:47

Обеими руками за ООП, ибо рулит.
Подпись проходит рефакторинг

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 15.06.2006 (Чт) 14:45

Ааа, так наверное все единогласно голосуют за ООП потому, что другие варианты видят впервые? :-)
Изображение

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 15.06.2006 (Чт) 14:52

tyomitch
ну это ты поторопился насчет всех. Я например знаю не только что такое ООП

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 15.06.2006 (Чт) 14:57

Ramzes писал(а):ООП ибо рульно

Ну тогда распиши за рульность ООП.
Холивары ведь создавались именно для аргументированных споров?
Изображение

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 15.06.2006 (Чт) 15:20

tyomitch писал(а):
Ramzes писал(а):ООП ибо рульно

Ну тогда распиши за рульность ООП.
Холивары ведь создавались именно для аргументированных споров?

Рульность для каждого своя! Мне очень нравится создавать свои обьекты, и работать с ними! Мне нравится лубую мелочь превращать в обьект и оперировать им. Для большинства моих целей это более чем подходит. Например в моей посл. проге mp3 описывается классом, чесно говоря даже предстваить себе не могу как это можно сделать без этого. А возможность перегружать методы? это ж бомба!!!
Я конечно понимаю, что мои восхищения больше похожи на фосхищение первокласника, который играет новой игрушкой, но я действительно не представляю, как можнго решить болльшинство задач, которые я решаю без ООП (учитывая тот факт, что я прикладник)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 15.06.2006 (Чт) 15:32

Возможность перегрузки не имеет отношения к ООП. Ты бы ещё шаблоны сюда же до кучи свалил.

А фраза "чесно говоря даже предстваить себе не могу как это можно сделать без этого" как раз подтверждает мой предыдущий пост ;-)
Изображение

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 15.06.2006 (Чт) 17:06

tyomitch
то, что немогу представить, это не говорит о том, что не могу сделать.

Что не подтверждает твой пост. :)

"Аналог" класса можно написать и на QBasic, просто насколько легче работать с кассом!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 15.06.2006 (Чт) 17:16

Ramzes писал(а):tyomitch
то, что немогу представить, это не говорит о том, что не могу сделать.

Демагогия.
Или ты хочешь сказать, что ты вообще не представляешь, что ты делаешь? По накурке, что ли, программы пишешь?

Ramzes писал(а):"Аналог" класса можно написать и на QBasic, просто насколько легче работать с кассом!

Ну и насколько? (Когда же наконец кончатся эмоции, и начнутся аргументы?)
Изображение

FaKk2
El rebelde gur&#250;
El rebelde gur&#250;
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Сообщение FaKk2 » 15.06.2006 (Чт) 19:59

tyomitch
Аргументы требуешь :)
По пунктам:
1. Идеология обьекта со свойствами и методами мне очень импонирует. Гораздо легче оперировать классом чем отдельным сборищем функций в модуле.
2. Наследование и инкапсуляция это тоже очень удобная штука в плане расширяемости и усовершенствования кода.
3. Подумаю еще и добавлю :)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 15.06.2006 (Чт) 20:24

Чем отличаются операции над классом от операций над сборищем функций в модуле?
А именно, в чём различие между вызовами MyObject->MyMethod() и MyMethod(MyObject), где во втором случае MyObject -- обычная структура?
Особенно если учитывать, что компилируются они одинаково ;-)
Изображение

FaKk2
El rebelde gur&#250;
El rebelde gur&#250;
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Сообщение FaKk2 » 15.06.2006 (Чт) 20:34

tyomitch
А как ты сделаешь коллекцию модулей, будешь наследовать функции чужого модуля и все остальные вкусные штучки?

Кстати, как ты реализуешь MyObject.MyMethod().MyMethod2().... и т.д. в модульном варианте?

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 15.06.2006 (Чт) 20:58

tyomitch, холивары создавались не для аргументированных споров, даже лучше сказать, для неаргументированных споров :)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 15.06.2006 (Чт) 20:59

FaKk2 писал(а):tyomitch
А как ты сделаешь коллекцию модулей, будешь наследовать функции чужого модуля и все остальные вкусные штучки?

Ну, в коллекцию всё равно ложатся структуры с данными, а не функции модуля. Так что это без проблем.

С наследованием чуть хуже, но выкрутиться можно, расширяя в потомке структуру предка вниз. Можно даже виртуальные методы приделать -- точно так же, как их приделывает компилятор.

FaKk2 писал(а):Кстати, как ты реализуешь MyObject.MyMethod().MyMethod2().... и т.д. в модульном варианте?

Последовательным вызовом: MyMethod(MyObject, &amp;Result); MyMethod2(Result);

И вообще, GDI в WinNT 3.1 компилировалась из C++ в Си, и только потом в машинный код -- так что все объектные выкрутасы достаточно прозрачно переносятся в обычный процедурный код.
Изображение

FaKk2
El rebelde gur&#250;
El rebelde gur&#250;
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Сообщение FaKk2 » 15.06.2006 (Чт) 21:15

tyomitch
Ты предлагаешь процедурные аналоги. Но ведь прелесть подхода ООП не в том что он аналогичен процедурному подходу, а тем что он проповедует другую, более информативную, удобную идеологию. В реализации, в конце концов, оба подхода сводятся к одному машинному коду, но идея ведь в другом.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 15.06.2006 (Чт) 21:41

Прекрасно. Процедурное программирование сделали, переходим к функциональному.


Вот в перле я могу, на функциональный манер, написать генератор так:
Код: Выделить всё
sub iterator {
  my @array=@_, $index=0;
  sub { $index>$#array? undef: $array[$index++]; }
}

Здесь внутри одной функции мы породили новую функцию-замыкание, с собственным набором локальных переменных.

И потом этот генератор можно вызывать как обычную функцию:
Код: Выделить всё
$i = iterator(1,2,"moo");
while (defined($next=&$i)) { print $next; }


А в ОО-языках я должен был бы вместо этого лепить объект и дёргать его методы. Согласен, что с замыканиями проще?
Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 15.06.2006 (Чт) 21:57

И ещё один примерчик. Пусть мне нужно отсортировать массив, ммм, хитрых структур, по конкретному полю.

Вот в функциональном языке я могу написать (для удобства продолжаю пользоваться синтаксисом перла)
Код: Выделить всё
sub mysort {
  my ($key,@array)=@_;
  qsort (sub { my($a,$b)=@_; ($a->{$key})<=>($b->{$key}); }, @array);
}

А что ты будешь делать со своим ООП :?:
IComparable на классе может быть всего один, значит мимо стандартной релизации сортировки ты пролетаешь. Будешь писать собственную?
Изображение

След.

Вернуться в Holy Wars@VBStreets

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

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

    TopList