Re[17]: про провал ООП
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.10.10 21:53
Оценка: +1
Здравствуйте, FR, Вы писали:

FR>Как будто с использованием ООП мы в этом случае получим что-то большее. Будет ровно тоже самое. Притом используя те же модули ML например код практически будет идентичным с ООП.


Конечно получим больше. Мы получим возможность не заморачиваясь писать то что мы хотим так как мы хотим.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[20]: про провал ООП
От: Cyberax Марс  
Дата: 13.10.10 22:19
Оценка:
Здравствуйте, LaPerouse, Вы писали:

C>>А это плохой дизайн в ООП. У тебя получится класс с asBytes(), asVector(), asList(), asStringInUTF() и т.д. Т.е. будет типичное нарушение SRP.

LP>Разумеется, в данном конкретном случае логично иметь один интерфейс BinaryStream, а указанные тобой представления должны получаться из BinaryStream в каком-нибудь хелпере.
Мимо. BinaryStream подразумевает потоковое чтение, а не произвольный доступ. Тебе нужно контейнер, заточенный на произвольный доступ/изменение и не поддерживающий произвольное увеличение/уменьшение размера.

Это получается... э... массив байт.

LP>Я же совсем не про это говорил. А говорил я про скрытие используемых структур данных за интерфейсами. Насколько я понимаю, такой стиль кодирования в ФП не в почете.

Ибо нафиг он не нужен в 95% случаев. А для остальных 5% можно использовать и этот ваш полиморфизм с интерфейсами.
Sapienti sat!
Re[22]: про провал ООП
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 13.10.10 22:47
Оценка:
Здравствуйте, LaPerouse, Вы писали:

AVK>>Какому потоку? Массив байтов это уже считанный из потока результат.


LP>
LP>File file = new File("filename");
LP>BinaryStream stream = file.open();
LP>byte[] array = BinaryDataHelper.read(stream, 100);
LP>


Ну и? У тебя точно так же массив байт.
... << RSDN@Home 1.2.0 alpha 4 rev. 1476 on Windows 7 6.1.7600.0>>
AVK Blog
Re[18]: про провал ООП
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 13.10.10 22:47
Оценка:
Здравствуйте, LaPerouse, Вы писали:

LP>Попытка почти любого практического применения функциональных языков оканчивается использованием монады IO


Нет, не оканчивается. Где монады нужны, там они нужнв, а где не нужны спокойно можно обходится без них. Проблема то в чем?
... << RSDN@Home 1.2.0 alpha 4 rev. 1476 on Windows 7 6.1.7600.0>>
AVK Blog
Re[16]: про провал ООП
От: IB Австрия http://rsdn.ru
Дата: 14.10.10 10:14
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Думаю, что с ООП у него тоже все довольно не плохо.

Не хорошо, я проверял.. =))

VD> Инкапсуляция и полиморфизм не есть изобретения или достоинства только лишь ООП. Они достижимы где угодно. Наследование вообще спорная вещь. Тот же АВК не раз говорил о его вреде в ряде случаев. Вот и рождаются сомнения в умах.

Это все верно, но сомнения рождаются от недопонимания...
... << RSDN@Home 1.2.0 alpha 4 rev. 1082>>
Мы уже победили, просто это еще не так заметно...
Re[17]: про провал ООП
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.10.10 11:17
Оценка:
Здравствуйте, IB, Вы писали:

VD>>Думаю, что с ООП у него тоже все довольно не плохо.

IB>Не хорошо, я проверял.. =))

Это субъективное мнение .

IB>Это все верно, но сомнения рождаются от недопонимания...


Не только.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[18]: про провал ООП
От: FR  
Дата: 14.10.10 12:52
Оценка:
Здравствуйте, LaPerouse, Вы писали:

LP>Замыкание полностью эквивалентно функтору с параметрами, установленными из локального контекста, а функторы прекрасно делаются на любом процедурном языке, по крайней мере на С — точно (структуры). И по выразительности функторы ничем не уступят замыканиям, разве что немного — по удобству использования.


Можно также выразительно повторить на функторах?:
let f x = fun y -> x + y
Re[18]: про провал ООП
От: FR  
Дата: 14.10.10 12:58
Оценка:
Здравствуйте, LaPerouse, Вы писали:

LP>Попытка почти любого практического применения функциональных языков оканчивается использованием монады IO, которая сама по себе императивна до безобразия.


Функциональные языки не ставят свой целью полностью исключить императив. У них цель гораздо более скромная изолировать его с целью минимизировать
связанные с ним ненадежность и непредсказуемость.
Re[18]: про провал ООП
От: FR  
Дата: 14.10.10 13:01
Оценка:
Здравствуйте, VladD2, Вы писали:

FR>>Как будто с использованием ООП мы в этом случае получим что-то большее. Будет ровно тоже самое. Притом используя те же модули ML например код практически будет идентичным с ООП.


VD>Конечно получим больше. Мы получим возможность не заморачиваясь писать то что мы хотим так как мы хотим.


Для тех же файлов и подобных вещей решаемых в процедурном программировании использованием абстрактных типов данных никаких преимуществ
не получим. Даже сахар не существенный.
Re[19]: про провал ООП
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.10.10 13:52
Оценка:
Здравствуйте, FR, Вы писали:

FR>Для тех же файлов и подобных вещей решаемых в процедурном программировании использованием абстрактных типов данных никаких преимуществ

FR>не получим. Даже сахар не существенный.

Не надо с умным видом говорить глупости. Прочти в вики определение абстрактных типов данных и ты поймешь, что как раз классы — это они и есть, только с блэкджеком и шлюхами, а вот в С таких средств вообще нет. Так что в С придется поплясать с бубном чтобы добиться того же результата.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[20]: про провал ООП
От: FR  
Дата: 14.10.10 14:12
Оценка:
Здравствуйте, VladD2, Вы писали:

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


С просто плохой процедурный язык, практически не поддерживает модульность. В языках с хорошей модульностью никаких плясок нет.
Объекты конечно одним из родителей имели абстрактные типы данных, но тут уже доходит до маразма если кто-то в той же функциональщине
использует АТД начинается крик что это объекты. Это не объекты.
Re[21]: про провал ООП
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.10.10 14:31
Оценка:
Здравствуйте, FR, Вы писали:

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


Да ладно тебе. С модульностью у него все ОК. Его проблемы — это прероцессор и плохой контроль за типами.

FR>В языках с хорошей модульностью никаких плясок нет.


Да ну? Хаскель обладает "хорошей модульностью"?

FR>Объекты конечно одним из родителей имели абстрактные типы данных, но тут уже доходит до маразма если кто-то в той же функциональщине использует АТД начинается крик что это объекты. Это не объекты.


Причем тут крики? Я утверждал, и продолжаю утверждать, что объекты — это отличная штука в первую очередь для той самой модульности. Кроме того они отлично подходят для, выражения АТД и кучи других задач.

В прочем, кому я это все рассказываю? Ты ведь у нас пишешь на Питоне и С++, так? Тебе ли всего этого не знать? Даже в ОКамле объекты не лишние. Хотя казалось бы язык сначала функциональный и только потом немного объектно-ориентированный. Согласен?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[22]: про провал ООП
От: FR  
Дата: 14.10.10 14:46
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Да ладно тебе. С модульностью у него все ОК. Его проблемы — это прероцессор и плохой контроль за типами.


В языке вообще нет модульности, компиляторы да с грехом пополам ее обеспечивают.
В С++ с одной стороны улучшили, namespace классы, но с другой убили уничтожив ABI.

FR>>В языках с хорошей модульностью никаких плясок нет.


VD>Да ну? Хаскель обладает "хорошей модульностью"?


Наверно, я не знаток Хаскеля.

FR>>Объекты конечно одним из родителей имели абстрактные типы данных, но тут уже доходит до маразма если кто-то в той же функциональщине использует АТД начинается крик что это объекты. Это не объекты.


VD>Причем тут крики? Я утверждал, и продолжаю утверждать, что объекты — это отличная штука в первую очередь для той самой модульности. Кроме того они отлично подходят для, выражения АТД и кучи других задач.


Я тоже так думаю, но я думаю что и нормальные модули такая же отличная штука.

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


Конечно, но в OCaml давняя традиция не пользоваться объектами
Re: про провал ООП
От: deimos  
Дата: 14.10.10 15:53
Оценка:
Здравствуйте, Фукерман, Вы писали:

Ф>http://citforum.ru/gazeta/165/


Вот эту фразу не понял:
“Я уверен, что парадигма ООП методологически неверна. Она начинает с построения классов. Это как если бы математики начинали бы с аксиом. Но реально никто не начинает с аксиом, все начинают с доказательств. Только когда найден набор подходящих доказательств, только тогда на этой основе выводится аксиома. Т.е. в математике вы заканчиваете аксиомой."

Может нам не ту математику преподавали, но вроде как в матемаике (например геометрии) все начинают с аксиом а уж потом даказательства разных теорем вытекают из аксиом.
Re[23]: про провал ООП
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.10.10 15:58
Оценка:
Здравствуйте, FR, Вы писали:

FR>В языке вообще нет модульности, компиляторы да с грехом пополам ее обеспечивают.


Ты же на С++ пишешь!
Модульность обеспечивается за счет директив extern и typedef-ов.
Раздельная компиляция, объектники и т.п., если не ошибаюсь прописаны в стандарте.

FR>В С++ с одной стороны улучшили, namespace классы, но с другой убили уничтожив ABI.


Что убили?

VD>>Да ну? Хаскель обладает "хорошей модульностью"?


FR>Наверно, я не знаток Хаскеля.


Так вот у него тоже работа с файлами через хэндлы организована. А инкапсуляция идет в стиле С.
Единственное преимущество — это более удобные модули.

VD>>Причем тут крики? Я утверждал, и продолжаю утверждать, что объекты — это отличная штука в первую очередь для той самой модульности. Кроме того они отлично подходят для, выражения АТД и кучи других задач.


FR>Я тоже так думаю,


Ну, а зачем тогда спорить лезешь? Лучше поддержал бы тога.

FR>но я думаю что и нормальные модули такая же отличная штука.


А где они нормальные то? В том то и дело, что нормальные они в основном в ООЯ. Класс — это супер-пупер штуковина для решения задач инкапсуляции. Причем ты дже не обязан в нем состояние хранить, в общем-то.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[24]: про провал ООП
От: FR  
Дата: 14.10.10 16:28
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Ты же на С++ пишешь!

VD>Модульность обеспечивается за счет директив extern и typedef-ов.
VD>Раздельная компиляция, объектники и т.п., если не ошибаюсь прописаны в стандарте.

Угу, только эта фигня не обеспечивает нормальной модульности. Все вручную, турбо паскаль
и тот лучше.

FR>>В С++ с одной стороны улучшили, namespace классы, но с другой убили уничтожив ABI.


VD>Что убили?


Application binary interface.
Я вот сейчас часто делаю dll на VC которые должны вызываться и из C++ Builder, интерфейс
приходится делать сишный.


FR>>Наверно, я не знаток Хаскеля.


VD>Так вот у него тоже работа с файлами через хэндлы организована. А инкапсуляция идет в стиле С.


И что в этом плохого?
В OCaml в общем также, но писать в этом стиле удобнее и проще чем на Си, модули (даже без функторов) рулят.

VD>Единственное преимущество — это более удобные модули.


Этого вполне достаточно для АТД.

FR>>Я тоже так думаю,


VD>Ну, а зачем тогда спорить лезешь? Лучше поддержал бы тога.


Я и не спорю, просто не разделяю твоего мнения (может неправильно понял) что только объекты хороши для АТД.

VD>А где они нормальные то? В том то и дело, что нормальные они в основном в ООЯ. Класс — это супер-пупер штуковина для решения задач инкапсуляции. Причем ты дже не обязан в нем состояние хранить, в общем-то.


В OCaml и вообще в ML семействе хорошие.
В питон — руби, паскаль — дельфи и по слухам и в modula, ada и oberon вполне нормальные.
Re[2]: про провал ООП
От: -_*  
Дата: 14.10.10 16:30
Оценка:
Здравствуйте, deimos, Вы писали:

D>Вот эту фразу не понял:

D>“Я уверен, что парадигма ООП методологически неверна. Она начинает с построения классов. Это как если бы математики начинали бы с аксиом. Но реально никто не начинает с аксиом, все начинают с доказательств. Только когда найден набор подходящих доказательств, только тогда на этой основе выводится аксиома. Т.е. в математике вы заканчиваете аксиомой."

D>Может нам не ту математику преподавали, но вроде как в матемаике (например геометрии) все начинают с аксиом а уж потом даказательства разных теорем вытекают из аксиом.


В школе — да. Но если ты захочешь родить раздел математики, то тебе придется _найди_ базис. В ООП вобщем то тоже так — реально никто не начинает городить классы. Не ясно, что автор имел ввиду.
Материал из Википедии — свободной энциклопедии, -_*
Re[25]: про провал ООП
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.10.10 18:06
Оценка:
Здравствуйте, FR, Вы писали:

FR>Угу, только эта фигня не обеспечивает нормальной модульности. Все вручную, турбо паскаль

FR>и тот лучше.

Оно обеспечивает такую же "нормальную" модульность, как и большинство других не ООЯ.

Другое дело, что там других проблем хватает. Но уже устал это обсуждать.

FR>>>В С++ с одной стороны улучшили, namespace классы, но с другой убили уничтожив ABI.


VD>>Что убили?


FR>Application binary interface.

FR>Я вот сейчас часто делаю dll на VC которые должны вызываться и из C++ Builder, интерфейс
FR>приходится делать сишный.

Байнари в С небыло никогда. Это как раз соглашения негласные. А что до переименования, то таки — да, только через С. Спасибо Страуструпу за точ, что он в угоду совместимости со старыми сишными линкерами заложил в язык такую баяку.


VD>>Так вот у него тоже работа с файлами через хэндлы организована. А инкапсуляция идет в стиле С.


FR>И что в этом плохого?


А ты напиши такую библиотеку и узнаешь.



VD>>Единственное преимущество — это более удобные модули.


FR>Этого вполне достаточно для АТД.


Нет. Это только обеспечивает часть механизма абстрагирования. Причем при этом абстрагирование становится паттерном, а не фичей языка. Что и есть большой минус в сравнении с классами.

FR>>>Я тоже так думаю,


VD>>Ну, а зачем тогда спорить лезешь? Лучше поддержал бы тога.


FR>Я и не спорю, просто не разделяю твоего мнения (может неправильно понял) что только объекты хороши для АТД.


Я не говорил "только". Я говорил, что объекты (точнее классы) хороши. Просто модули, даже очень хорошие все равно вынуждают применять паттерн так хорошо известный по С. А паттерн — это набор действий который нужно постоянно повторять, плюс возможность допустить ошибку. Класс же описывает АТД за один прием и без приседаний.

VD>>А где они нормальные то? В том то и дело, что нормальные они в основном в ООЯ. Класс — это супер-пупер штуковина для решения задач инкапсуляции. Причем ты дже не обязан в нем состояние хранить, в общем-то.


FR>В OCaml и вообще в ML семействе хорошие.

FR>В питон — руби, паскаль — дельфи и по слухам и в modula, ada и oberon вполне нормальные.

Да ладно. Не гони. Все это не обеспечивает того удобства что обеспечивают классы. Возможно на счет АДЫ я не прав. В остальных же языках или надо танцевать с бубном, или есть те же классы которые решают задачу прямо и удобно.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[26]: про провал ООП
От: FR  
Дата: 15.10.10 14:49
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Оно обеспечивает такую же "нормальную" модульность, как и большинство других не ООЯ.


Гораздо хуже, особенно си.

VD>Байнари в С небыло никогда. Это как раз соглашения негласные. А что до переименования, то таки — да, только через С. Спасибо Страуструпу за точ, что он в угоду совместимости со старыми сишными линкерами заложил в язык такую баяку.


Так в си хоть и неформальное соглашения, но его придерживаются все производители OS и компиляторов (куда денешься если хочешь вызывать
системные функции ), в C++ его вообще нет.


VD>А ты напиши такую библиотеку и узнаешь.


Неоднократно писал и на C/C++ и недавно на OCaml.
Писать такое:

module Dir : sig
  type handle
  
  val _open:  utf8 -> handle
  val _close: handle -> unit
  
  val _read:  handle -> DirData.t  
  
end


Не сложнее чем класс.

VD>Нет. Это только обеспечивает часть механизма абстрагирования. Причем при этом абстрагирование становится паттерном, а не фичей языка. Что и есть большой минус в сравнении с классами.


Паттерн, да, но в языках с нормальной модульностью элементарный.


VD>Я не говорил "только". Я говорил, что объекты (точнее классы) хороши. Просто модули, даже очень хорошие все равно вынуждают применять паттерн так хорошо известный по С. А паттерн — это набор действий который нужно постоянно повторять, плюс возможность допустить ошибку. Класс же описывает АТД за один прием и без приседаний.


Хорошие модули также за один прием. Плюс в тех же модулях OCaml есть приватные и фантомные типы, плюс возможность параметризации, это с избытком покрывает АТД.

VD>Да ладно. Не гони. Все это не обеспечивает того удобства что обеспечивают классы. Возможно на счет АДЫ я не прав. В остальных же языках или надо танцевать с бубном, или есть те же классы которые решают задачу прямо и удобно.


В ML семействе обеспечивают. Трудности появляются только когда нужен полиморфизм в рантайме.
В новой версии OCaml (3.12) уже и в рантайме все нормально, модули стали первоклассными сущностями
http://caml.inria.fr/pub/docs/manual-ocaml/manual021.html#toc81 можно завести модульную переменную
например.
Re[21]: про провал ООП
От: Silver_s Ниоткуда  
Дата: 15.10.10 16:54
Оценка: :)
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Когда в рамках ООП я думаю об *экземпляре* класса Car, то я думаю о нем, как о конкретной машине.... И функция Drive в этом плане не просто какая-то там функция — я именно в этот Москвич сел, завел его и поехал.


ВВ>В ФП я совсем иначе смотрю на вещи. У меня есть одна обобщенная функция Drive. Я пишу ее так, чтобы результат работы функции зависел только от ее параметров. Я могу эту функцию каррировать хоть до опупения, передавая таким образом кол-во бензина и проч., но все равно она не превратится в мой старенький Москвич 2140.


ВВ>По этим причинам мне кажется, что с точки зрения моделирования ООП и ФП не очень совместимы.


Может это от задач зависит? Да и что значит несовместимы. Если в то смысле, что интеллектуальный труд функциональшика (алгоритмы которые он настрочил в функциональном стиле) невозможно соединить с трудами имеперативщика ООП-шника в единую полезную систему. То тут скорее такое соединение, если получится, может оказаться крайне выгодным. А если в плане того что они чаще как противоположности — там где рулит ФП, там плохо дело у ИП,ОПП, и наоборот. То такое наверное есть.

Лучше взять Excel, чем Москвич 2140. Точнее использование API Excel из своей программы. Без внутреннего состояния никому такой Excel не будет нужен. Ради этого состояния он вобще-то и нужен — сложным внутренним состоянием позволяет управлять через простой API (хотя могли бы сделать и постройнее). Excel это точно не одна pure function, и даже не две.

Или другой пример. Здесь вот народ играется, ботов пишут
Google ai challenge: http://rsdn.ru/forum/etude/3969096.1.aspx
Автор: fleandr
Дата: 23.09.10

Задача очень сложная, по крайней мере сделать качественно (например чтобы оказаться в первой пятерке), алгоритмы реально сложные. А по сути то надо написать всего лишь одну функцию — на вход берет 2 массива простеньких структур с 2-5 полями, на выходе результат как один массив структур. Никаких состояний там просто нет нигде, не нужны они. Хотя каких-то игрушек с двумя игроками совсем без состояний не бывает — но в данном случае этим можно полностью пренебречь. Т.е. теоретически как бы можно сказать состояние есть — но на самом деле его нет.

И кстати, там правила игры такие, что императивщикам на С++ будет очень тяжко — все недостатики ИП проявятся во всей красе. Хотя плюсники тоже наверное будут в первой десятке, но не столько как в прошлом году было. Тода задача была потупее нужно было вернуть одно число 1..4, тупой перебор был выгоднее. А сейчас уже сложным образом прийдется молотить списки и структурки данных. Эта задача однозначно лучше для ФП.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.