juan_gandhi: (Default)
[personal profile] juan_gandhi
Некоторое время назад, когда ООП было единственным политически корректным приемом программирования, программисту полагалось знать три столпа объектно-ориентированной религии:
- наследование
- инкапсуляция
- полиморфизм

Нынче жизнь стала сложнее, см. википедию - ООП включает "абстракцию", "классы", "объекты".

Я хочу сказать, что сам-то по себе полиморфизм никакого отношения к ООП не имеет. В ООП применяется только один вид полиморфизма, т.наз. ад-хок (см вики) - method operator overloading (see wiki). Когда для разных классов (или для разных типов; в ООП это всё одно и то же) один и тот же идентификатор переопределяется в "конкретных классах".

А вот более сильный вид полиморфизма, параметрический - отсутствует ("как класс"). В джаве, объектном языке, он присутствует, в generics: в коллекциях, к примеру, когда тип элемента коллекции или специфицируется, или выводится. Это не имеет никакого отношения к ООП, и, к примеру, добавлено в джаву потому только, что авторы смогли найти способ расширить джаву таким образом. Выведя её с уровня простого "объектно-ориентированного языка" на уровень выше.

Если задуматься, то на самом-то деле, как только мы введем коллекции в язык, так мы где-то уже выходим за пределы ООП. Нас уже начинают интересовать вопросы type inference, covariance vs contravariance, и т.д. Просто как-то эти вопросы ещё не стали мейнстримом. Ну, с другой стороны, нынче ведь вообще затишье.

Date: 2007-02-12 05:50 pm (UTC)
From: [personal profile] alll
Надобно сказать, что темплейты того же C++ ставят полиморфизм через method overloading в очень интересную позицию, буквально бобром. :)

Date: 2007-02-12 06:32 pm (UTC)
From: [identity profile] furia-krucha.livejournal.com
Параметрический полиморфизм, конечно, чужд ООП, потому что он, фактически, определяет функцию из типов в типы. Естественная для OOP форма универсального (по Карделли) полиморфизма это virtual types Thorup-а и Torgersen-а.

Date: 2007-02-12 06:50 pm (UTC)
From: [identity profile] arkanoid.livejournal.com
Должен сказать что равно и инкапсуляция не требует каких-то специфических "ООП-средств" и отлично ложится на plain C.

Date: 2007-02-12 07:18 pm (UTC)
From: [identity profile] caseq.livejournal.com
Строго говоря, и на ассемблере можно писать объектно-ориентированно при наличии определенной воли, просто есть языки которые делают выражение этой воли более удобным.

Date: 2007-02-12 07:13 pm (UTC)
From: [identity profile] caseq.livejournal.com
> В джаве, объектном языке, он присутствует, в generics: в коллекциях, к примеру, когда тип элемента коллекции или специфицируется, или выводится.

Пуская меня товарищи джависты поправят если я неправ, но generics в Java — это нихрена не средство реализации полиморфизма, а убогий костыль предназначенный для реализации статического контроля типов в отсутствие честного статического полиморфизма (как, например, в случа темплейтов в C++). Соответственно, в отличие от тех же темплейтов, дженерики ни на какой новый уровень джаву не выводят.

Date: 2007-02-12 08:00 pm (UTC)
From: [identity profile] ivan-gandhi.livejournal.com
Я частично соглашусь, и частично возражу. Да, это не средство реализации полиморфизма вообще, но это средство, позволяющее делать вывод типов. Можешь называть это статическим контролем - но таков уж язык джава; я не знаю, во что бы его превратили программисты-практики, если бы не было статического контроля. Мы вот тут перекатываем некоторое количество софта с пайтона на джаву - не потому, что джава лучше пайтона, а потому, что на джаве "за программистом контроль имеется". Меньше шансов увековечить бред. Дженерики как раз мешают строить коллекции из разнородных элементов, с последующей "проверкой типа".

Недавно у меня была дискуссия с человеком, который хотел изготовить что-то вроде следующего:
class SingletonCache {
  T get(class<T> cls) {
  ...
  }
}

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

А уровень, на который дженерики выводят джаву - это более упорядоченный образ мышления программиста, когда он начинает где-то мыслить не циклами и присваиваниями, а в терминах коллекций. Конечно, не сравнить с эффектом темплейтов в си++; без них язык, в голове программиста, вообще состоял из битов и байтов - да таблиц "виртуальных функций". Но сишные темплейты, хоть им сто лет уже, всё равно, имхо, остаются чуждыми языку, экзотической надстройкой. А в джаве и коллекции и дженерики вписались только так. Дай бы бог ещё Гафтеру протащить closures (что маловероятно), тогда бы вообще можно было не тужить джавщикам, что переучиваться придется.

Date: 2007-02-12 08:34 pm (UTC)
From: [identity profile] itman.livejournal.com
> Но сишные темплейты, хоть им сто лет уже, всё равно, имхо, остаются чуждыми языку, экзотической надстройкой.
Это все из-за SFINAE :-) Создатели концепции понятия не имели, какой ящик Пандоры они открыли.

Date: 2007-02-13 06:10 am (UTC)
From: [identity profile] relyef.livejournal.com
И ведь что характерно, на С++ singleton pattern именно так, в пол-пинка и реализуется. Что многое говорит про generics, в том числе что они ни хрена не templates. Policy classes в Java отсутствуют, как концепция. Можно, конечно, сделать их через annotations, но это еще большее уродство.

Date: 2007-02-13 09:41 am (UTC)
From: [identity profile] ex-chrobin.livejournal.com
в сишарпе, насколько я понимаю, синглетон реализуется так же, как и в плюсах

Date: 2007-02-12 08:33 pm (UTC)
From: [identity profile] itman.livejournal.com
Три столпа ООП - это очень устаревшее понятие. С тех пор все очень усложнилось. У того же Буча признаков объектно-ориентированного программирования гораздо больше перечислено.

Date: 2007-02-12 08:51 pm (UTC)
From: [identity profile] selfmade.livejournal.com
Затишье? А Nemerle. Там вывод типов в полный рост. Хотя, не мейнстрим, конечно.

Date: 2007-02-12 10:27 pm (UTC)
From: [identity profile] ivan-gandhi.livejournal.com
Да я имею в виду именно то, что на поверхности. Когда закон Мора работал, выползали толпы новых людей и новых технологий; теперь же всё как бы затихло, на поверхности; и, похоже, вся проблема - в ограниченных способностях программирующего населения. Все всему научились, и прогресс (видимый) остановился. Или дело в критической массе? Когда десять миллионов знают как надо, прогресс должен остановиться. Но та же самая проблема, как будто, и в других областях. Что случилось с кино? Где кино? Или всё кино теперь на ютьюбе? Или произошло примерно то же, что и с музыкой в начале 20-го века?

А может быть, глупо искать какую-то истину - это как бы квантовый физик стал бы сотрудничать с теплоэнергетиками с целью повышения производительности заводов по производству жидкого кислорода - такое сотрудничество возможно только при наличии какого-нибудь Берии над всеми ими... имхо. То-то, может быть, и нынешние физики, перековавшиеся в программисты, частенько ностальгируют о терроре - надеясь, может быть, что их истина тогда будет услышана подчиненными. В условиях же демократии и разгильдяйства разъяснить практикующему J2EE программисту значение вывода типов, пользы монад, а уж тем более небулевости окружающей нас логики, ну совершенно невозможно.

Date: 2007-02-13 09:50 am (UTC)
From: [identity profile] ex-chrobin.livejournal.com
я думаю, тут больше психологический барьер. практикующий j2ee программист (я уж тут со своей колокольни, но не думаю что разница велика) скорее побоится привносить в свою ежедневную практику что-то не опробованное; ну и когда перед глазами ява-ява циклы-циклы, сдвиг парадигмы инициировать как-то сложно – мозг костенеет и воспринимает яыы как синоним циклов. если же программист берется изучать другой язык, барьер ниже -- язык другой, очень хорошо если синтаксис другой -- есть повод писать по другому. я несколько лет писал на питоне, практически сразу научился (на консумерском уровне, понятное дело) орудовать high-order functions и замыканиями, но эффективно применить эти практики в сишарпе смог только сейчас. думаю, если бы опята питона у меня за спиной не было, я бы искренне не понимал полезности анонимных делегатов.

то же и с руби -- однажды увидев в чужом языке "реализацию strategy в синтаксисе" (тогда я еще не знал что есть замыкание), куда проще применять strategy в работе, нежели опираясь на модель gof.

Date: 2007-02-12 11:11 pm (UTC)
From: [identity profile] 109.livejournal.com
почти всё правильно, за исключением того, что overloading к ООП никакого отношения не имеет, overloading - это когда есть несколько имплементаций одного и того же метода с разными наборами параметров. или в джаве нет оверлодинга? сомневаюсь.

а то, что ты имел в виду - это virtual methods / method override.

а generics сейчас везде есть - даже в джаве, как ты правильно заметил :-), поэтому слышать, что они выводят джаву "на уровень выше" - как-то прикольно.

Date: 2007-02-13 12:35 am (UTC)
From: [identity profile] ivan-gandhi.livejournal.com
Да, я неправильное слово употребил. То, что у объектных называется method override, то в другом контексте называется operator overloading.

Не знаю, что уж тебе так прикольно; джаве ещё шагать и шагать в направлении языка будущего - но у неё есть шанс; а вот у си++ такого шанса нету почему-то. Имхо.

Date: 2007-02-13 02:12 am (UTC)
From: [identity profile] spamsink.livejournal.com
В джаве уже можно устроить такую же интроспекцию, как в C++ c помощью partial specialization?

Date: 2007-02-13 04:11 am (UTC)
From: [identity profile] ivan-gandhi.livejournal.com
Ни фига себе. Надо переварить вашу partial specialization; ну и как это относится к introspection, совсем не понял.

Date: 2007-02-13 04:22 am (UTC)
From: [identity profile] spamsink.livejournal.com
Вот так, к примеру:

template < typename T> 
struct arrdef
{
    typedef T type;
    static const std::size_t size = 0;
};

// If X happens to be an array type, e.g. typedef Y X[K];
// arrdef< X>::type == Y, arrdef< X>::size == K
template < typename T, std::size_t N> 
struct arrdef< T[N]>
{
    typedef T type;
    static const std::size_t size = N;
};

Date: 2007-02-13 02:51 am (UTC)
From: [identity profile] 109.livejournal.com
мнэ... в каком контексте это называется operator overloading?

джаве ещё шагать и шагать, это верно. только непонятно, зачем, если в сишарпе есть и lambda expressions, и type inference, и lazy evaluation...

http://tomasp.net/articles/csharp3-concepts.aspx

Date: 2007-02-13 04:07 am (UTC)
From: [identity profile] ivan-gandhi.livejournal.com
Да я разве слово плохое сказал про сишарп? С ним одна только проблема, что язык не публичный. А так, может быть, это лучшее, что ваше предприятие изготовило по жизни. Но... халявы нету, вот проблема. А нет халявы - нету и ubiquity. На джаве полбразилии программирует - ну дык. А как бы наша контора, скажем, взялась бы на вашем шарпе программировать? Да разорились бы.

Date: 2007-02-13 07:01 pm (UTC)
From: [identity profile] 109.livejournal.com
ужас, Вова. просто ужас, какие предрассудки у вас водятся :)

C# стандартизован гораздо раньше джавы - несмотря на то, что появился позже. см., например, сюда: http://www.ecma-international.org/publications/standards/Ecma-334.htm

Date: 2007-02-14 03:32 pm (UTC)
From: [identity profile] ivan-gandhi.livejournal.com
Так. Вот это новость. Надо будет это попереваривать. Хотя... Ведь попытки изготовить самопальную, народную версию jvm с библиотеками, считай, провалились. Ну посмотрим, посмотрим.

Не про полиморфизм

Date: 2007-02-13 02:56 pm (UTC)
From: [identity profile] piggymouse.livejournal.com
Тут вот один ваш чувак прогнозами балуется — предсказывает, каким будет The Next Big Language, но сам язык не называет, хотя мимикой показывает, что догадался.

Комментаторы склоняются к джаваскрипту.

Очень интересно услышать твоё мнение.

Предыдущий текст этого же товарища тоже интересный.

Re: Не про полиморфизм

Date: 2007-02-14 04:07 pm (UTC)
From: [identity profile] ivan-gandhi.livejournal.com
Спасибо за линки. Мне больше понравилось про Буратино. Вишь, Стиви как бы практик; ему все эти сложности чужды. Как теплотехник, глядящий большими глазами на квантовых термодинамиков, мол, шо тут в котле ещё им непонятно.

На матмехе, думаю, до сих пор популярен анекдот: приезжает теоретический механик в колхоз; ему председатель: "механик? дифференциал знаешь? поди разбери."

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

C башорга тебе цитатка

Date: 2007-02-15 08:06 pm (UTC)
From: [identity profile] bravomail.livejournal.com
Чу: Говорят, есть Перл, реализованный на Хаскелле
Чу: причём, его разработчик транссексуал
Чу: хотя это можно было и так догадаться

Profile

juan_gandhi: (Default)
Juan-Carlos Gandhi

May 2025

S M T W T F S
    1 2 3
456 7 8 9 10
11 121314151617
181920 21 222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 25th, 2025 03:05 am
Powered by Dreamwidth Studios