ооп и полиморфизм
Feb. 12th, 2007 09:04 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Некоторое время назад, когда ООП было единственным политически корректным приемом программирования, программисту полагалось знать три столпа объектно-ориентированной религии:
- наследование
- инкапсуляция
- полиморфизм
Нынче жизнь стала сложнее, см. википедию - ООП включает "абстракцию", "классы", "объекты".
Я хочу сказать, что сам-то по себе полиморфизм никакого отношения к ООП не имеет. В ООП применяется только один вид полиморфизма, т.наз. ад-хок (см вики) -method operator overloading (see wiki). Когда для разных классов (или для разных типов; в ООП это всё одно и то же) один и тот же идентификатор переопределяется в "конкретных классах".
А вот более сильный вид полиморфизма, параметрический - отсутствует ("как класс"). В джаве, объектном языке, он присутствует, в generics: в коллекциях, к примеру, когда тип элемента коллекции или специфицируется, или выводится. Это не имеет никакого отношения к ООП, и, к примеру, добавлено в джаву потому только, что авторы смогли найти способ расширить джаву таким образом. Выведя её с уровня простого "объектно-ориентированного языка" на уровень выше.
Если задуматься, то на самом-то деле, как только мы введем коллекции в язык, так мы где-то уже выходим за пределы ООП. Нас уже начинают интересовать вопросы type inference, covariance vs contravariance, и т.д. Просто как-то эти вопросы ещё не стали мейнстримом. Ну, с другой стороны, нынче ведь вообще затишье.
- наследование
- инкапсуляция
- полиморфизм
Нынче жизнь стала сложнее, см. википедию - ООП включает "абстракцию", "классы", "объекты".
Я хочу сказать, что сам-то по себе полиморфизм никакого отношения к ООП не имеет. В ООП применяется только один вид полиморфизма, т.наз. ад-хок (см вики) -
А вот более сильный вид полиморфизма, параметрический - отсутствует ("как класс"). В джаве, объектном языке, он присутствует, в generics: в коллекциях, к примеру, когда тип элемента коллекции или специфицируется, или выводится. Это не имеет никакого отношения к ООП, и, к примеру, добавлено в джаву потому только, что авторы смогли найти способ расширить джаву таким образом. Выведя её с уровня простого "объектно-ориентированного языка" на уровень выше.
Если задуматься, то на самом-то деле, как только мы введем коллекции в язык, так мы где-то уже выходим за пределы ООП. Нас уже начинают интересовать вопросы type inference, covariance vs contravariance, и т.д. Просто как-то эти вопросы ещё не стали мейнстримом. Ну, с другой стороны, нынче ведь вообще затишье.
no subject
Date: 2007-02-12 05:50 pm (UTC)no subject
Date: 2007-02-12 06:32 pm (UTC)no subject
Date: 2007-02-12 06:50 pm (UTC)no subject
Date: 2007-02-12 07:18 pm (UTC)no subject
Date: 2007-02-12 07:13 pm (UTC)Пуская меня товарищи джависты поправят если я неправ, но generics в Java — это нихрена не средство реализации полиморфизма, а убогий костыль предназначенный для реализации статического контроля типов в отсутствие честного статического полиморфизма (как, например, в случа темплейтов в C++). Соответственно, в отличие от тех же темплейтов, дженерики ни на какой новый уровень джаву не выводят.
no subject
Date: 2007-02-12 08:00 pm (UTC)Недавно у меня была дискуссия с человеком, который хотел изготовить что-то вроде следующего:
ну конечно, он исхитрился такой класс изготовить, но... но слава богу, что обычная публика предпочитает легкие пути.
А уровень, на который дженерики выводят джаву - это более упорядоченный образ мышления программиста, когда он начинает где-то мыслить не циклами и присваиваниями, а в терминах коллекций. Конечно, не сравнить с эффектом темплейтов в си++; без них язык, в голове программиста, вообще состоял из битов и байтов - да таблиц "виртуальных функций". Но сишные темплейты, хоть им сто лет уже, всё равно, имхо, остаются чуждыми языку, экзотической надстройкой. А в джаве и коллекции и дженерики вписались только так. Дай бы бог ещё Гафтеру протащить closures (что маловероятно), тогда бы вообще можно было не тужить джавщикам, что переучиваться придется.
no subject
Date: 2007-02-12 08:34 pm (UTC)Это все из-за SFINAE :-) Создатели концепции понятия не имели, какой ящик Пандоры они открыли.
no subject
Date: 2007-02-13 06:10 am (UTC)no subject
Date: 2007-02-13 09:41 am (UTC)no subject
Date: 2007-02-12 08:33 pm (UTC)no subject
Date: 2007-02-12 08:51 pm (UTC)no subject
Date: 2007-02-12 10:27 pm (UTC)А может быть, глупо искать какую-то истину - это как бы квантовый физик стал бы сотрудничать с теплоэнергетиками с целью повышения производительности заводов по производству жидкого кислорода - такое сотрудничество возможно только при наличии какого-нибудь Берии над всеми ими... имхо. То-то, может быть, и нынешние физики, перековавшиеся в программисты, частенько ностальгируют о терроре - надеясь, может быть, что их истина тогда будет услышана подчиненными. В условиях же демократии и разгильдяйства разъяснить практикующему J2EE программисту значение вывода типов, пользы монад, а уж тем более небулевости окружающей нас логики, ну совершенно невозможно.
no subject
Date: 2007-02-13 09:50 am (UTC)то же и с руби -- однажды увидев в чужом языке "реализацию strategy в синтаксисе" (тогда я еще не знал что есть замыкание), куда проще применять strategy в работе, нежели опираясь на модель gof.
no subject
Date: 2007-02-12 11:11 pm (UTC)а то, что ты имел в виду - это virtual methods / method override.
а generics сейчас везде есть - даже в джаве, как ты правильно заметил :-), поэтому слышать, что они выводят джаву "на уровень выше" - как-то прикольно.
no subject
Date: 2007-02-13 12:35 am (UTC)Не знаю, что уж тебе так прикольно; джаве ещё шагать и шагать в направлении языка будущего - но у неё есть шанс; а вот у си++ такого шанса нету почему-то. Имхо.
no subject
Date: 2007-02-13 02:12 am (UTC)no subject
Date: 2007-02-13 04:11 am (UTC)no subject
Date: 2007-02-13 04:22 am (UTC)no subject
Date: 2007-02-13 02:51 am (UTC)джаве ещё шагать и шагать, это верно. только непонятно, зачем, если в сишарпе есть и lambda expressions, и type inference, и lazy evaluation...
http://tomasp.net/articles/csharp3-concepts.aspx
no subject
Date: 2007-02-13 04:07 am (UTC)no subject
Date: 2007-02-13 07:01 pm (UTC)C# стандартизован гораздо раньше джавы - несмотря на то, что появился позже. см., например, сюда: http://www.ecma-international.org/publications/standards/Ecma-334.htm
no subject
Date: 2007-02-14 03:32 pm (UTC)Не про полиморфизм
Date: 2007-02-13 02:56 pm (UTC)Комментаторы склоняются к джаваскрипту.
Очень интересно услышать твоё мнение.
Предыдущий текст этого же товарища тоже интересный.
Re: Не про полиморфизм
Date: 2007-02-14 04:07 pm (UTC)На матмехе, думаю, до сих пор популярен анекдот: приезжает теоретический механик в колхоз; ему председатель: "механик? дифференциал знаешь? поди разбери."
Насчет практики, однако. Пусть он сначала выпустит ту штуковину, которой он занимается, а там уж посмотрим. Пока что одни разговоры. Хаскел ему нехорош. От монады, как от балерины, нету пользы народному хозяйству; а вот если к ней динамомашину приспособить, так польза будет.
C башорга тебе цитатка
Date: 2007-02-15 08:06 pm (UTC)Чу: причём, его разработчик транссексуал
Чу: хотя это можно было и так догадаться