lqp - ПсевдоООП Suxx
January 16th, 2007
03:48 am

[Link]

Previous Entry Add to Memories Tell A Friend Next Entry
ПсевдоООП Suxx
По поводу восторгов [info]vitus-wagner@lj по поводу конструкции

3.times do
some code
end

свойственной Питону, Ruby и прочим современным “обьектно ориентированным” скриптовым языкам.

Если мы возьмем самую обычную (или немного необычную, не суть важно) функцию и поставим ее первый аргумент перед именем самой функции, отделив ее для красоты точкой, то мы вовсе не получим никакой дополнительной обьектной ориентированности. Мы получим уродскую запись функции и не более того.

Об обьектной ориентированности можно было бы как-то говорить, если бы числу 3 можно было бы присвоить значение 5(как в старом фортране), двенадцатеричную систему счисления или свойство “зеленое”. Обьект, все же - это сущность, имеющая состояние, и этим своим состоянием характеризующаяся. Но так, конечно, никто делать не будет, по очевидным причинам.

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

(10 comments | Leave a comment)

Comments
 
From:[info]abbra.livejournal.com
Date:January 15th, 2007 - 10:33 pm
(Link)
Федор, тут немного не то. Дело в том, что в традиционных языках, которые называют "объектными", а на самом деле выросшими из процедурных, есть четкое деление между объектами и всеми остальными. По-английски это называется "objects aren't first class citizens" -- так, все immediate типы (числа, к примеру) объектами в них не являются и их приходится трактовать по-другому.

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

Реакция же может быть изменяющей сам экземпляр или нет. В том же Ruby принято решение не разрешать изменять экземпляры immediate типов, но при этом можно модифицировать сами immediate типы. Выглядит это так -- нельзя создать синглтон 3, у которого есть метод red?, в то время как у 5 его не будет. Но можно создать Fixnum.red?, который появится у всех экземпляров Fixnum (3 и 5 в том числе). То есть, immediate типы в этом плане не отличаются от других -- теперь мы сможем определять, какие из чисел красные, а какие -- нет, но не сможем сделать так, чтобы некоторые числа откликались на сообщение red?, а для некоторых интерпретатор бы возмущался, что такого метода нет.
From:[info]lqp
Date:January 17th, 2007 - 06:35 am
(Link)
Это все слова. На практике мы имеем почти исключительно методы типа

cp1251.convert_from(codepage from, string s)

являющиеся уродской записью функции

convert_string(string s, codepage from, codepage to)
From:[info]abbra.livejournal.com
Date:January 19th, 2007 - 08:20 pm
(Link)
В моем коде такого нет, :-) а макароны можно писать на любом языке.
From:[info]lqp
Date:January 19th, 2007 - 09:32 pm
(Link)
Это как? Вы не пользуетесь стандартными библиотеками?
[User Picture]
From:[info]kouzdra
Date:January 16th, 2007 - 12:15 am
(Link)
Я тоже не понимаю - ну сделали Int классом. Никакого глубокого смысла в том нет, а оверхед есть (натуральнае числа - все-таки достаточно критический в смысле эффективности тип) - почему идея и не идет в массы.
From:[info]max630.livejournal.com
Date:January 16th, 2007 - 06:57 am
(Link)
да нет, почему suxx. без "уродской" записи пришлось бы выдумывать головокружительные правила для перегрузки этой times, чтобы она и для чисел и для массивов и для всех прочих типов работала. А тут всё более-менее просто получается.

К ОО дизайну программ это действительно никакого отношения не имеет, это просто такой приём кодирования.
From:[info]lqp
Date:January 17th, 2007 - 06:31 am
(Link)
пришлось бы выдумывать головокружительные правила

Строгая типизация рулит. Причем везде, а не только в данном случае.
From:[info]max630.livejournal.com
Date:January 17th, 2007 - 08:22 am
(Link)
Ну это очевидно. перегрузка без типизации - это должен быть совсем хардкор.

но:
1) тогда перлы с питонами на помойку.
2) типизация это ещё не всё. в функциональных языках такой номер вообще не проходит.
[User Picture]
From:[info]vitus-wagner.livejournal.com
Date:January 16th, 2007 - 10:23 am
(Link)
Просто эта конструкция безумно похожа на фразу на естественном русском языке (на английскую, кстати, меньше)

Три раза сделай то-то.
From:[info]lqp
Date:January 17th, 2007 - 06:48 am
(Link)
Мо моему, в перле такое было, и безо всяких точек.
Powered by LJ.Rossia.org