приведенный выше код эквивалентен следующему
do
Current.translate (a, b)
Current.scale (factor)
Можно переписать любой вызов как квалифицированный, указав
Приведенные неквалифицированные вызовы являются вызовами процедур. Аналогичные соображения можно распространить и на атрибуты, хотя наличие вызовов в этом случае возможно менее очевидно. Ранее было отмечено, что в теле процедуры
В общем случае любые инструкции или выражения вида:
f
или:
f (u, v, ...)
фактически являются неквалифицированными вызовами и могут быть переписаны в форме квалифицированных вызовов:
Current.f
Current.f (u, v, ...)
хотя неквалифицированная форма является более удобной. Если подобная нотация используется как инструкция, то
Компоненты-операции
Рассмотрение выражения:
x + a
приводит к важному понятию компонента-операции (operator feature). Это понятие может восприниматься как чисто косметическое, имеющее только синтаксическую значимость, и реально не вносящее ничего нового в ОО-метод. Но именно такие синтаксические свойства способны существенно облегчить жизнь разработчика, если они существуют, и сделать ее убогой, если их нет. Компоненты-операции являются хорошим примером успешного использования ОО-парадигмы в давно известных областях.
Для реализации этой идеи нужно догадаться, что выражение
Для лучшего понимания необходимо обсудить определение типа
indexing
description: 'Действительные числа (не окончательная версия!)'
class REAL feature
plus (other: REAL): REAL is
-- Сумма текущего значения и other
do
...
end
minus (other: REAL) REAL is
-- Разность между текущим значением и other
do
...
end
negated: REAL is
-- Текущее значение, взятое с противоположным знаком
do
...
end
less_than (other: REAL): BOOLEAN is
-- Текущее значение меньше чем other?
do
...
end
... Другие компоненты ...
end
При использовании такого описания класса уже нельзя более записывать арифметическое выражение в виде:
x.plus (a)
По аналогии, вместо привычного
Можно попытаться оправдать такой отход от привычной математической нотации стремлением к
