поэтому в соответствующих подпрограммах следует использовать
Форма операций клонирования и эквивалентности
Форма вызова подпрограмм
clone (x)
equal (x, y)
выглядит не слишком объектно-ориентированной. Догматичное следование принципу 'ОО-стиля вычислений' из предыдущей лекции предполагает другую форму (См. 'Объектно-ориентированный стиль вычислений', лекция 7):
x.twin -- twin это двойник - клон.
x.is_equal (y)
В первой версии нотации так и делалось, однако возникла проблема пустых ссылок. Вызов компонента вида
if x = Void then
z := Void
else
z := x.twin
end
Соответственно, реализация вызова
if
((x = Void) and (y = Void)) or
((x /= Void) and then x.is_equal (y))
then
...
Излишне говорить, что не следует придерживаться этих соглашений. Нам быстро надоест писать подобные витиеватые фрагменты, а когда мы забудем это сделать, то результатом будет ошибка времени выполнения. Окончательный вариант соглашений, сформулированный в данной лекции, замечателен еще и тем, что дает ожидаемые результаты для
Вызов процедуры
Отметим, что введенная выше функция
Когда есть функция
Статус универсальных операций
Последние комментарии частично прояснили вопрос о статусе универсальных операций
Эти операции не являются языковыми конструкциями, невзирая на их фундаментальную значимость для практики. Они поставляются классом ANY основной библиотеки Kernel. Этот класс имеет то специальное свойство, что каждый класс, созданный разработчиком, автоматически становится наследником (прямым или косвенным) класса
Сейчас нет необходимости в деталях, поскольку мы еще вернемся к этой проблеме при изучении наследования. Но уже теперь полезно знать, что благодаря механизму наследования, мы можем полагаться на библиотечные классы, поддерживающие свойства, доступные всем классам, - и каждый класс может изменить их, приспосабливая к своим, специфическим целям.
Ключевые концепции
[x]. ОО-вычисления характеризуются высоко динамичной структурой времени выполнения, в которой объекты создаются только по запросу.
[x]. Некоторые объекты, используемые ПО, являются моделями внешних объектов (обычно косвенными). Другие объекты служат только для целей проектирования и реализации.
[x]. Объект состоит из ряда значений, называемых полями. Каждое поле
