Лыцарь пичальнава образа - ООП несовместимо с мягкой типизацией. [entries|archive|friends|userinfo]
silly_sad

[ userinfo | ljr userinfo ]
[ archive | journal archive ]

ООП несовместимо с мягкой типизацией. [Oct. 20th, 2010|09:08 am]
Previous Entry Add to Memories Tell A Friend Next Entry
Ничего нового не скажу, просто из всего ранее сказанного относительно говно-ЯваСкрипта подведу самоценный итог: В языках без предельно жёсткой типизации ООП жить не может вообще тоесть совсем.

почему?
по тому, что было мной уже дважды сказано ранее.
всё ООП вертится вокруг одного крайне неудобного способа передачи аргумента в функцию:
arg1.foo(arg2, ... ,argN)

Если в языке нет жёсткой типизации то мы не можем предсказать каким будет тип arg1.
Соотвественно мы не можем предсказать какая функция foo будет вызвана и существует ли она вообще.
Поэтому вместо того чтобы получить от foo() вполне логичный и ожидаемый ответ "вы дали мне кривые аргументы" мы получаем FATAL ERROR в полный рост.

Поэтому все мэйнстримовые практики письма на говно-ЯваСкрипте предусматривают проверку типа arg1 ДО вызова foo().
А это ни что иное как прямое нарушение инкапсуляции -- мы выносим рутинную foo()-специфичную операцию в вызвающую программу и повторяем запись этой операции хренову тыщу раз.

P.S. Некоторые библиотекописатели даже додумались писать обёртки для подобных случаев... уж не этим ли случаем объяснима ВСЯ любовь оопэшников к безконечным тысячеслойным обёрткам?... способ-то вызова просто черезжопный...
LinkLeave a comment

Comments:
From:[info]tzirechnoy.livejournal.com
Date:October 20th, 2010 - 07:58 am
(Link)
Smalltalk не сушествует!


А вообще -- это не проблема ООП, это "проблема" отсутствия типизацыи. Да, у нас нет никаких ограничений на свойства a -- соответственно, a priori мы не можэм утверждать, что какая-то операцыя с a (дажэ и ==) выдаст какой-то вменяемый результат (в языках с исключениями -- не кинет исключение). Апологеты статической типизацыи утверждают, что это критический недостаток языков с типизацыей динамической, их оппоненты -- что всякие исключения у них возникают только от кривого кода, когда хрен знает что проникает куда-то внутрь программы, а статическая типизацыя даёт только иллющию защищнности поскольку ровно те жэ проблемы могут вылезать по совершэнно разным поводам, и решать их всё равно надо другими методами.
From:[info]silly_sad
Date:October 20th, 2010 - 09:09 am

оба хуже.

(Link)
оппоненты хуёвые вам попались.
это не от кривого кода, а от принципиальной философской несовместимости ПЕРЕГРУЖЕНЫХ ОПЕРАТОРОВ с отсутсвием типизации.

Умные люди это поняли ещё 30 лет назад. и поэтому в нормальных безтиповых языках просто нет перегрузки и всё. -- проблемы нет.

Не понять эту очевидную вещь не может даже ребёнок (если он не ООПэшник).

P.S.
но вообще перегрузка это не заебись всегда, даже в очень строгих языках.
From:[info]tzirechnoy.livejournal.com
Date:October 20th, 2010 - 09:12 am

Re: оба хуже.

(Link)
Нормально оно совместимо, не вижу никакой вообще проблемы. То есть совсем никаких дополнительных проблем от полиморфизма кроме самого полиморфизма-то и нет.

И да, Вы опять рассказываете что Smalltalk не существует.
From:[info]silly_sad
Date:October 20th, 2010 - 09:14 am

Re: оба хуже.

(Link)
информацию о типе аргументов надо откуда-то брать.
есть типизация -- есть перегруженые операторы.
нет типизации -- информация о типах аргументов возникает из самого оператора.

что может быть более очевидным? наличие у дедушки хуя?
From:[info]tzirechnoy.livejournal.com
Date:October 20th, 2010 - 09:32 am

Re: оба хуже.

(Link)
>информацию о типе аргументов надо откуда-то брать.

В смысле -- о типе аргументов? Фактической информацыей о типе аргументов обладают сами аргументы. То есть если тебе надо (где-то) отличить float от стиха Пушкина -- то ты по факту проверяешь, это float или стих Пушкина, никаких проблем. Безо всякой статической типизацыи.

>нет типизации -- информация о типах аргументов возникает из
> самого оператора.

Чо?
From:[info]silly_sad
Date:October 20th, 2010 - 09:43 am
(Link)
хуй через плечо.
From:[info]tzirechnoy.livejournal.com
Date:October 20th, 2010 - 09:53 am
(Link)
Слив засчитан.
From:[info]silly_sad
Date:October 20th, 2010 - 10:34 am
(Link)
та ладно! могу повторить.
ИНФОРМАЦИЮ о типах аргументов надо откудато БРАТЬ!
если её нет в самих аргументах, она должна быть в записи оператора.

третьего не дано.
брать её из метеосводок из Буркина-Фасо чревато созданием говно-Яваскрипта2
From:[info]tzirechnoy.livejournal.com
Date:October 20th, 2010 - 11:54 pm
(Link)
Информацыя о типе аргументов (включая, например, поведение при данном операторе) замечательно берётся из аргумента. Никаких проблем. При динамической типизацыи -- эта информацыя берётся в рантайме.

Да, я, кстати, не помню (не знаю) как в джаваскрипте с операторами -- но с функцыями в нём именно так. А в смоллтоке и операторы ничем не отличаются.
From:[info]silly_sad
Date:October 21st, 2010 - 07:19 am
(Link)
конечно с точки зрения ООП-обезьянок слово "в рантайме" здорово отвечает на вопрос "ОТКУДА?".
From:[info]tzirechnoy.livejournal.com
Date:October 21st, 2010 - 07:55 am
(Link)
Если Вам такие детали непонятны -- то поясняю, что вопрос о типе (классе) arg1 хранится внутри arg1. Это именно так в Javascript, Smalltalk, Lisp, Perl, Python и куче других ОО-языков с динамической типизацыей.

PS Да, кстати, перечитал -- возможно, что мне просто непонятно что такое "жёсткая" типизацыя. Но в любом случае Вашы философские претэнзии к Javascript откровенно надуманны -- он есть и вызовы функцый в нём нормально работают.
From:[info]silly_sad
Date:October 21st, 2010 - 08:04 am
(Link)
конечно с точки зрения ООПэшников "хранится внутри arg1" отвечает на вопрос "ОТКУДА?".
From:[info]tzirechnoy.livejournal.com
Date:October 21st, 2010 - 08:07 am
(Link)
Это вполне приемлемо отвечает на вопрос откуда с точки зрения любого незашоренного человека. Например, откуда колбаса -- из магазина; откуда тепло -- от солнца и т.д.

Если нужно ещё что-то знать -- спрашывайте, не стесняйтесь.
From:[info]silly_sad
Date:October 21st, 2010 - 08:17 am

Слава подсознательному!

(Link)
оно таки вылезло:
"откуда колбаса? из магазина".

хлеб, из магазина, молоко из магазина -- это точное и достаточное знание для ООПэшника.

это квинтессенция всего ООП!
From:[info]tzirechnoy.livejournal.com
Date:October 21st, 2010 - 08:36 am

Re: Слава подсознательному!

(Link)
Ну да, именно так. И меня колбаса из магазины устраивает (а когда не устраивает -- я меняю магазин, а не начинаю докапываться как коптить колбасы).
From:[info]silly_sad
Date:October 21st, 2010 - 09:08 am
(Link)
я вчера играл в игру Mass Effect охуительно поучительная игра.
противопоказана фанатам ООП. -- может привести к потере смысла жизни.
From:[info]yarikas.livejournal.com
Date:October 20th, 2010 - 12:08 pm

Слив з0считан

(Link)
Мда... Разговор человека, читавшего Дейта, с человеком его не читавшим.
From:[info]silly_sad
Date:October 21st, 2010 - 07:20 am

Re: Слив з0считан

(Link)
продолжайте следить за коментами.
From:[info]mr-aleph.livejournal.com
Date:October 21st, 2010 - 03:08 pm

Re: оба хуже.

(Link)
local VectorMt = {}
function VectorMt.__mul (a,b) return a.x*b.x + a.y*b.y end
local function Vector(x,y) return setmetatable({x=x,y=y}, VectorMt) end

print(Vector(1,2)*Vector(2,-1))


From:[info]silly_sad
Date:October 21st, 2010 - 03:12 pm

Re: оба хуже.

(Link)
хороший способ письма длинных программ.