Yuri Gendelman писал(а):
По-моему в языках, где нет иерархии метаклассов, набор статических членов и методов, вместе с конструкторами и деструкторами, и представляет (ну, скажем, в некотором смысле) метакомпоненту класса.
Можно считать и так. Я не уверен, однако, что производитель -- необходимо часть метакласса. И, сообственно говоря, производитель -- это пример. "Брак" есть операция над парой объектов "женщина" и "мужчина" (если Вы не живете в Массачусетсе, конечно). Запихивать его ни в "женщину", ни в "мужчину" не логично. Если Вам кажется, что "брак" порождает новый объект "семья", к классу которого "брак" и должен принадлежать, замените "брак" на "соитие", ничего не порождающее. Я готов согласится, что мы всегда можем расширить понятийно-классовую систему до охватывающей нужноые нам объекты и операции, но мне, ничтожному, кажется, что это размножение классов без надобности. Во славу ОО принципа.
Видите ли, я не против Java per se. Я уважаю этот язык, и пользуюсь им с удовольствием, когда подворачивается работа. Я против обожествеления принципа, принципов ради принципов. Я очень сомневаюсь, что эта идея "все -- в классе" эволюционно победит. Я не вижу преимуществ, ни концептуальных, ни реализационных, и вижу концептуальные недостатки. Я не люблю языковой снобизм, как я уже говорил. Излишняя ориентация на любую парадигму, будь то функциональное программирование, или "объектное программировние" мне претит. Я предпочитаю свободу
грамотно писать программу.
Yuri Gendelman писал(а):
незванный гость писал(а):
...кто-нибудь может мне объяснить высокий смысл определения в объекте бинарных операций типа "+" (в С++)? Я по простоте душевной считал плюс унарной операцией, применяемой к упорядоченной паре (что вполне соответствует математической трактовке).
Только не говорите, что не слышали в курсе высшей алгебры про бинарные операции.
Не буду. Поскольку бинарная операция (de jure) определяется как
. Что есть функция на множестве упорядоченных пар (сие есть определение декартова произведения, коли я не ошибаюсь). Бинарная операция -- удобная свертка длинной формулы. На самом деле,
4.plus(3) a la Smalltalk создает немалые трудности и в определении объектов, и в написании програм (замечу, ядовито, что читается это как "к четырем прибавить три", то есть
слабо подразумевая изменение объекта четыре). Я бы сказал,
(4, 3).plus() в гораздо большей степени соответсвует семантике групповой операции (что встречается в языках типа Forth и в языках, не претендующих на чистый ОО. Читается, естественно, как "сумма четырех и трех"). Но это дело вкуса (быть может).