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

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

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

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

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

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 с библиотеками, считай, провалились. Ну посмотрим, посмотрим.

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
25 262728 2930 31

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 1st, 2025 12:57 pm
Powered by Dreamwidth Studios