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

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

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

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

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

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
в сишарпе, насколько я понимаю, синглетон реализуется так же, как и в плюсах

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 293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 30th, 2025 04:46 pm
Powered by Dreamwidth Studios