LINUX.ORG.RU

[philosophy] В чем заключается революционность перехода от функциональщины к ООП?


1

0

Так уж повелось, что первый язык, который я изучал, был делфи. Потом всякие сишарпики, С++, лисп, и т.п. В итоге, как мне кажется, у меня ООП головного мозга. Когда возникала задача писать на С, я начал реализовавывать обьектную модель в этом языке.

«Стоп», сказал я себе и подумал. Почему сейчас все кругом вопят про ООП и про его архиполезность и архиправильность? Далее, по ходу раздумий, пришел к мысли, что все, что пишется с использованием ООПшной парадигмы, может быть написано и без нее.

Почему появились языки, которые взяли ООП за главенствующую идею (java, c#, етц)?

Неужели те преимущества, которые предлагает ООП (полиморфизм, инкапсуляция, наследование), дают прирост в эффективности, скорости написания программ, понимания их работы и поддержке? Здесь было бы интересно сравнить одну и ту же программу, написанную на С и на С++, чтобы узреть принципиальные архитектурные различия (может такие уже есть?).

Сухой остаток. ООП представляет из себя еще один уровень абстракции, который позволяет оперировать про проектировании не функциями, а обьектами. А неужели это так меняет дело и делает разработку более удобной?

Было бы интересно без срачей услышать компетентное мнение.

★★
Ответ на: комментарий от paranonymous

>Если задача не решается, только очень глупый специалист будет пытаться >ее решать наобум, обычно сразу же обращаются к предметнику, который >рассказывает, как решать. Это касается не только математики, но других >научных дисциплин.

Эх, хорошо, если б так.

Тут как везде, если результата нет, задача не решена или решена плохо, >то это плохой специалист, его нужно увольнять.

Результат результату рознь. Как зачастую было в советские (и не только) времена? План формально выполнен? Ok. Profit.

EVP
()
Ответ на: комментарий от EVP

> Порочным (на мой взгляд) является непробиваемое убеждение в том, что «это мне знать не надо»

А все знать нельзя, да. Приходится знать немногое и необходимое.

Ни черта не поняв о сути побочных эффектах. И конечно же заявив: «подробности меня не интересуют». Или что-то похожее

Насколько я могу судить о работе конструкторов - они основываются в принятии своих решений на свой опыт и best practices. Вчерашнего студента без опыта никто не допустит до ответственных должностей.

А еще, если этот персонаж обладает правом принятия решений, он принимает весьма экзотические решения насчет того, что нужно исправить. Только потом или здание рушится, или самолет падает, или... ну сами знаете.

И его совершенно справедливо сажают.

paranonymous
()
Ответ на: комментарий от EVP

> Результат результату рознь. Как зачастую было в советские (и не только) времена? План формально выполнен? Ok. Profit.

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

paranonymous
()
Ответ на: комментарий от EVP

> Порочным (на мой взгляд) является непробиваемое убеждение в том,

что «это мне знать не надо»


Никто не может знать всё, но надо делать изделие, поэтому люди придумали разделение труда.

Ни черта не поняв о сути побочных эффектах


О каких побочных эффектах идёт речь? Кто может судить о важности побочных эффектов? В реальных изделиях возможные эффекты так сложны и многообразны, что судить о них обоснованно можно только на основе экспериментов и реальной практики.

А еще, если этот персонаж обладает правом принятия решений


Обычно он получает его не просто так, а как следствие успешной работы в течении многих лет.

archimag ★★★
()
Ответ на: комментарий от anonymous

Для этого, кстати, совершенно не обязательно иметь мат. образование.

Один мой приятель, с кем я в школьные годы в Белой Ладье состязался, теперь д.ф-м.н. Самое интересное, что основная специальность у него техническая.

dave ★★★★★
()
Ответ на: комментарий от dave

> с кем я в школьные годы в Белой Ладье состязался

При чём тут Белая Ладья? Будете утверждать, что шахматисты сильны в математике? Или из математиков сильные шахматисты выходят? (и то, и то, очевидно, неверно).

теперь д.ф-м.н. Самое интересное, что основная специальность

у него техническая.



Хм, и? ничего не понял.

archimag ★★★
()
Ответ на: комментарий от archimag

>> Порочным (на мой взгляд) является непробиваемое убеждение в том,

что «это мне знать не надо»

Никто не может знать всё, но надо делать изделие, поэтому люди >придумали разделение труда.

Между «мне это знать не надо» и «надо знать все» есть масса промежуточных вариантов. Не так ли?

Кто может судить о важности побочных эффектов?

Специалисты

А еще, если этот персонаж обладает правом принятия решений

Обычно он получает его не просто так, а как следствие успешной работы >в течении многих лет.

К сожалению, далеко не всегда так.

EVP
()
Ответ на: комментарий от anonymous

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

Согласен. Нужны. Для конвейера. Но мне, скорее всего, они будут мешать.

dave ★★★★★
()
Ответ на: комментарий от archimag

При чём тут Белая Ладья? Будете утверждать, что шахматисты сильны в математике? Или из математиков сильные шахматисты выходят? (и то, и то, очевидно, неверно).

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

dave ★★★★★
()
Ответ на: комментарий от dave

> Склад ума напрямую не зависит ни от места учебы, ни от специальности.

И что?

Как-то мне попадалось исследование, что для программистов характерен «технический» склад ума, который также свойственен писателям и композиторам, а вот «абстрактный» склад ума, характерный для физиков и математиков, среди программистов встречается весьма редко.

archimag ★★★
()
Ответ на: комментарий от EVP

> Между «мне это знать не надо» и «надо знать все» есть

масса промежуточных вариантов


И в чём заключается ваша мысль? Есть знания, которые реально востребованы работой. Если для работы конструктора знание математики не является важным, то конструкторы типично в ней и не разбираются.

Кто может судить о важности побочных эффектов?

Специалисты


Гы, кто такие? Вы можете привести практический пример из реальной инженерной практики? У нас были конструкторы, расчётчики, технологи и ещё различные рабочие. Кто из них? Хм, ещё было несколько людей, занимавшихся эскизными проектами, вот они как бы должны были знать по-немного обо всём, но их основаная функция - обоснование контрактов.

К сожалению, далеко не всегда так.


На основании какого опыта вы говорите? Можно больше конкретики? А то я не могу понять вашу мысль.

archimag ★★★
()
Ответ на: комментарий от archimag

А у исследователя какой склад ума был?

oh
()
Ответ на: комментарий от archimag

а вот «абстрактный» склад ума, характерный для физиков и математиков, среди программистов встречается весьма редко.

Но ведь встречается же. Мне еще школьнику вдолбили, что самое важное и сложное в программировании - это постановка задачи. Есть такое чувство, что для этого как раз нужен «абстрактный» склад ума.

Кстати, придумал тест. Нужно задавать вопрос: «нравятся ли вам примеры по программированию с числами Фибоначчи?»

Варианты ответов:

  • Да, потому что нет никаких лишних деталей;
  • Нет, не понимаю на кой черт они сдались, если можно взять более полезные задачи из реальной практики.
dave ★★★★★
()
Ответ на: комментарий от archimag

>И в чём заключается ваша мысль? Есть знания, которые реально >востребованы работой. Если для работы конструктора знание математики >не является важным, то конструкторы типично в ней и не разбираются.

Если конструктор не знает математики, для него это энание всегда не важно. Кто решил, что это ему не важно? Мысль заключается в том, что нельзя принять решения о ненужности ЭТОГО ЗДЕСЬ, если в ЭТОМ ничего не понимаешь. Или имеешь самое поверхностное впечатление.

Гы, кто такие? Вы можете привести практический пример из реальной >инженерной практики? У нас были конструкторы, расчётчики, технологи > и ещё различные рабочие. Кто из них? Хм, ещё было несколько людей, >занимавшихся эскизными проектами, вот они как бы должны были знать по->немного обо всём, но их основаная функция - обоснование контрактов.

В моей практике были сотрудники, основная функция которых - заключение контрактов. Всю науку давно забыли. Как бы не их функция. Но! обладая нереально завышенным ЧСВ, высокими должностями и окладами, считали нижестоящих быдлом, и отдавали такие указания, что разруливать последствия приходилось долго.

Обычно он получает его не просто так, а как следствие успешной >>>работы в течении многих лет.

К сожалению, далеко не всегда так.

На основании какого опыта вы говорите? Можно больше конкретики? А то >я не могу понять вашу мысль.

Представьте себе член-корра, который ничего не понимает в инженерной работе (и не желает знать, помните выше: «мне это знать не надо»?), но, руководя проектом, и обладая непомерно раздутым ЧСВ, выдает такие распоряжения, что приведи я их здесь, все были бы под стулом.

EVP
()
Ответ на: комментарий от archimag

а вот «абстрактный» склад ума, характерный для физиков и математиков, среди программистов встречается весьма редко.

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

dave ★★★★★
()
Ответ на: комментарий от dave

Один мой приятель, с кем я в школьные годы в Белой Ладье состязался, теперь д.ф-м.н.

у того парня нет профильного, официального, задокументированного образования по специальности математика.

Если я правильно помню, стать д.ф.-м.н., не имея официального, задокументированного образования, невозможно.

Другой вопрос, что цена этому образованию...

Miguel ★★★★★
()
Ответ на: комментарий от Miguel

Речь была о том, что по диплому он технарь, а не математик. Тема диссертации математическая.

dave ★★★★★
()
Ответ на: комментарий от anonymous

>Но это именно тот мизерный сектор, где она имеет большое значение.

Безопасность, где всё держится на шифровании и хешировании. Пиринговые сети, особенно протоколы маршрутизации. Графические и физические движки. Распознавание образов (достаточно глянуть в мануал OpenCV). Вообщем, секторов таких амасса.

Современному программисту нужно очень мало математики, а если нужна, то школьного курса вполне хватает, чтобы работать.


s/программисту/кодеру

anonymous
()
Ответ на: комментарий от dave

> Нужно задавать вопрос: «нравятся ли вам примеры по программированию с числами Фибоначчи?»

Эк тебя накрыло.

tarc
()
Ответ на: комментарий от dave

> Мне еще школьнику вдолбили

Да, это верно, самые стойкие предрассудки они из детства.

самое важное и сложное в программировании - это постановка задачи


Самое важно и сложное это способность к ясному, четкому и последовательному изложению мысли. Кстати, у тебя, по крайней мере по общению на данном форуме, с этим заметные проблемы, ибо ты постоянно разбавляешь свою мысль какими-то левыми вставками (хотя бы той же Белой Ладьей), рассуждениями не понятно о чем, так что трудно понять что именно ты утверждаешь.

archimag ★★★
()
Ответ на: комментарий от anonymous

>Безопасность, где всё держится на шифровании и хешировании. Пиринговые сети, особенно протоколы маршрутизации. Графические и физические движки. Распознавание образов (достаточно глянуть в мануал OpenCV). Вообщем, секторов таких амасса.

Разработка всех этих алгоритмов к программированию не относится. Имплементация всего этого - совершенно другое дело.

III
()
Ответ на: комментарий от anonymous

> s/программисту/кодеру

Вы просто не понимаете суть программирования и демонстрируете при этом высокомерное чванство.

archimag ★★★
()
Ответ на: комментарий от III

>>Безопасность, где всё держится на шифровании и хешировании. >>Пиринговые сети, особенно протоколы маршрутизации. Графические и >>физические движки. Распознавание образов (достаточно глянуть в мануал >>OpenCV). Вообщем, секторов таких амасса.

Разработка всех этих алгоритмов к программированию не относится

А что относится к программированию? Давайте тогда уж в терминологии разберемся

EVP
()
Ответ на: комментарий от III

>Разработка всех этих алгоритмов к программированию не относится. Имплементация всего этого - совершенно другое дело.

Я как раз имел ввиду реализацию алгоритмов. Вся математика при этом никуда не денется. И если человек не шарит в том, что пишет, то результат будет плачевным.

anonymous
()
Ответ на: комментарий от archimag

>> s/программисту/кодеру

Вы просто не понимаете суть программирования и демонстрируете при этом высокомерное чванство.


Кто ты такой, чтобы судить о справедливости моих понятий?

anonymous
()

Судя по этому топику, все присутствующие погромизды находятся в московской и смежных областях, где стоит жара. Им припекло голову и потянуло на абстрактные беседы :)

13 страниц совершенно бесполезного флейма. А стоило задать конкретный вопрос — нуль эффекта(ну, кроме одной Ъ-ссылки).

P.S. Шел 13ый год: ЛОР все так же катитится в СГ :)

balodja ★★★
()
Ответ на: комментарий от anonymous

> Кто ты такой, чтобы судить о справедливости моих понятий?

Программист.

archimag ★★★
()
Ответ на: комментарий от anonymous

>Вся математика при этом никуда не денется.

ну то есть все придётся изобретать заново.

III
()
Ответ на: комментарий от balodja

> 13 страниц совершенно бесполезного флейма. А стоило задать конкретный вопрос — нуль эффекта(ну, кроме одной Ъ-ссылки).

от тебя ничего полезного тоже не было. так что ой.

anonymous
()
Ответ на: комментарий от balodja

>13 страниц совершенно бесполезного флейма. А стоило задать конкретный вопрос — нуль эффекта

Это ЛОР, детка, привыкай.

anonymous
()
Ответ на: комментарий от quasimoto

> Обсуждалось уже, ленивость не покрывает возможностей макросов: http://www.newartisans.com/2009/03/hello-haskell-goodbye-lisp.html

Где? в статье не нашел, в комментах?

Because Haskell never evaluates anything unless you use it, there’s no need to distinguish between macros and functions."

но это очевидно покрывает только часть потенциального использования

макросом, как минимум, можно по одному коду сгенерить другой код — хотя бы подставлять числа вместо фантомных типов

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от Miguel

>> Кроме того, существует куча паттернов, которые так вот просто в функции высшего порядка не разложишь.

Ну так скажи, какие?

например, Z<17> — кольцо вычетов по модулю 17; чтобы сделать это в хаскеле, придется привлекать паттерн «фантомный тип вместо целого числа», и этот паттерн ты в функции высшего порядка не разложишь.

да и вообще тут макрос был бы полезен, чтобы убрать или довести до ума этот паттерн

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от oh

Кроме одной интересной ссылки про реализацию в хаскиле паттернов из GoF'а, ничего не узнал(точнее не реализацию, а соответствие конструкций).

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

balodja ★★★
()
Ответ на: комментарий от www_linux_org_ru

например, Z<17> — кольцо вычетов по модулю 17;

Э... имеется в виду, по числовому параметру создать соответствующий тип?

Да, в ФВП это не разложишь, и если тебе так важна классическая запись чисел, придётся привлекать богопротивный TH.

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

Miguel ★★★★★
()
Ответ на: комментарий от balodja

> Судя по этому топику, все присутствующие погромизды находятся в московской и смежных областях, где стоит жара. Им припекло голову и потянуло на абстрактные беседы :)

13 страниц совершенно бесполезного флейма. А стоило задать конкретный вопрос — нуль эффекта(ну, кроме одной Ъ-ссылки).

чувак, после того, как ты написал «А то как ни открою какую-нибудь википедию, там плюсовый маразм в каждом предложении.», ты еще решил и покритиковать других участников флейма?

ссылку я не дам (самому интересно было бы такую); по тому, насколько я знаю с++, могу судить, что там ООП там 1. ad-hoc полиморфизм 2. инкапсуляция 3. немного встроенной ко- и контра-вариантности

+ уже из не-ооп-шного 4. const 5. возможности для эмуляции параметрического полиморфизма 6. возможности для чего-то похожего на зависимые типы (да, я сделал что грозился — scalar_product(a+b+c, c+a+b), но там еще есть места, к которым можно придраться)

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

Чувак, ты своим плюсовым маразмом славишься уже давно и громко. Но да не мне тебя судить и критиковать. Так что можно просто не буду отвечать? Спасибо.

balodja ★★★
()
Ответ на: комментарий от balodja

мне одного лишь авторитета глаголящих не достаточно для убеждения в правоте их речей

Это правильно. Не очень понятно, правда, почему авторитет авторов толстых книжек кажется тебе более существенным. Задавай вопросы по существу, мы, как сможем, ответим (ну, кто-то, конечно, говна нальёт, не без этого, ну дык это ЛОР).

Miguel ★★★★★
()
Ответ на: комментарий от anonymous

> Программирование как наука и как искуство давно в прошлом.

Программирование _никогда_ не было наукой. А «исскуства» не существует.

LamerOk ★★★★★
()
Ответ на: комментарий от Miguel

> Да, в ФВП это не разложишь, и если тебе так важна классическая запись чисел, придётся привлекать богопротивный TH.

не только :-)

мне нужна еще классическая запись операций над ними Z<1*2+3*4-5>, а лучше CTFE как в D или че там у нас в с++0х для этого.

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

Lisp-way полезен только для того, чтобы выяснить «а что вааще делают макросами», но не для того, чтобы потом по нему идти.

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от balodja

Так что можно просто не буду отвечать?

Чувак, ты и это своё сообщение имел полное право не писать. Местный Маскот хотя бы какие-то мысли высказывает и вопросы вменяемые задаёт.

Miguel ★★★★★
()
Ответ на: комментарий от balodja

> 13 страниц совершенно бесполезного флейма.

Полезность флейма - вопрос сугубо индивидуальный.

Шел 13ый год: ЛОР все так же катитится в СГ :)


Как раз наоборот: такие треды делают лор тортом.

LamerOk ★★★★★
()
Ответ на: комментарий от Miguel

Ну, к тебе у меня все тот же вопрос :) Кратко звучит так: что такое ООП? Более развернуто: почему по-твоему ООП — это ad-hoc полиморфизм + определенный стиль?

<далее можно не читать>

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

Например, под определение ООП из английской вики можно подогнать вообще что угодно.

Object-oriented programming (OOP) is a programming paradigm that uses «objects» – data structures consisting of datafields and methods together with their interactions – to design applications and computer programs. Programming techniques may include features such as data abstraction, encapsulation, modularity, polymorphism, and inheritance.

Из этого определения следует: «Есть объекты — значит ООП».

Кто-то вообще ООП называет набором эвристик, кто-то в ООП вкладывает явно стопицот лишнего, кто-то утверждает, что это всего-лишь посылка сообщений между объектами и т.п. А какого-то принятого нормального определения толком и нет. Какой-то мифический термин, честно говоря.

balodja ★★★
()
Ответ на: комментарий от Miguel

Чувак, ты и это своё сообщение имел полное право не писать.

Ну, уже «Нельзя удалить комментарий с ответами». Поэтому просто извеняюсь перед аудиторией за неадекватный пост.

Местный Маскот хотя бы какие-то мысли высказывает и вопросы вменяемые задаёт.

ОК, постараюсь найти невменяемость в своих вопросах и исправить.

balodja ★★★
()
Ответ на: комментарий от balodja

P.S. И это, хватит меня уже кастрированным бараном обзывать.

balodja ★★★
()
Ответ на: комментарий от balodja

> Чувак, ты своим плюсовым маразмом славишься уже давно и громко. Но да не мне тебя судить и критиковать. Так что можно просто не буду отвечать? Спасибо.

ты бы вместо слова «маразм» поставил бы «фанатизм» — хотя это тоже неправда, но уже только наполовину

а насчет маразма — меня интересует решение вот этой http://www.linux.org.ru/jump-message.jsp?msgid=4911022&cid=4912133 задачи

сделаешь — тогда твои слова про «маразм» еще будут как-то простительны

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от LamerOk

> Полезность флейма - вопрос сугубо индивидуальный.

соглашусь

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от balodja

хотя я и не мигель, отвечу:

почему по-твоему ООП — это ad-hoc полиморфизм + определенный стиль?

потому что так в пересечении фич в известных мне промышленно-языковых-реализациях ООП; если кто-то найдет контрпример, он может возразить

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

Прости, влорчик. Я люблю треды с твоим участием, но тебя регулярно коротит:

есть класс Array, инстансы которого создаются с длинной, определяемой по вводу от пользователя,но далее неизменно; есть (НЕкоммутативная) операция +, которая конкатенирует два массива, длины складываются; есть scalar_product, работающий только на массивах равных длин

так вот, компилятор должен разрешать например

(a+b+c+d+e).scalar_product(a+e+d+b+c)

при этом доказательство равенства длин либо А. должен он получать либо сам, либо В. оно задается программистом в виде исходного кода

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

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

Нельзя даже предложить реализовать динамическую типизацию, т.к. не выполняется условие «компилятор должен получить».

LamerOk ★★★★★
()
Ответ на: комментарий от balodja

Не согласен, тут много людей показывали примеры и объясняли все.

oh
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.