> -- Илья Ермаков писал(а):
> Экземпляр типа записи = объект
тогда озвучу оставшиеся вопросы:
1
http://zeus.sai.msu.ru:7000/programming/bp70_ug/bp70ug_09.shtml
"Ответом заключается  в  том,  что при всякой возможности для доступа к полям данных должны использоваться методы объекта"
но так и не поясняется почему нежелательно обращаться к к полям напрямую...

все остальные вопросы по разделу "Особенности ООП в Оберонах"
хотя некоторые из них покажутся наивными я понимаю, что статья расчитана на более подготовленного читателя
2
"2) возможность связывания поведения с объектом данных, при этом каждый экземпляр данных сам «знает» свое поведение."
""Для связывания процедур с объектами использовались поля процедурного типа, то есть,никакой специальной синтаксической поддержки методов не вводилось.
Первым достоинством такого подхода является более сильная виртуализация — связывание вызова может варьироваться не только в зависимости от типа, но и от конкретного экземпляра объекта."
т.е. у двух объектов одного класса могут быть разные методы?
3
TYPE
Figure = RECORD
color: INTEGER
Square: PROCEDURE (VAR f: Figure): REAL
END;
Rectangle = RECORD (Figure)
x0, y0, x1, y1: REAL
END;
в этом примере непонятно почему строка:
Square: PROCEDURE (VAR f: Figure): REAL
описывается метод класса, где входной параметр сам класс?
4
TYPE
Figure = RECORD
color: INTEGER
END;
Rectangle = RECORD (Figure)
x0, y0, x1, y1: REAL
END;
PROCEDURE (VAR f: Figure) Square (): REAL
BEGIN
RETURN 0
END Square;
PROCEDURE (VAR r: Rectangle) Square (): REAL;
BEGIN
RETURN ABS(r.x1 - r.x0) * ABS(r.y1 - r.y0)
END Square;
т.е. когда мы создаем класс мы не указываем какие у него есть методы?
и если например не создавать PROCEDURE (VAR f: Figure) Square (): REAL то у класса Rectangle будут новыми не только поля x0, y0, x1, y1, но и метод Square?
5
"ABSTRACT — аналог EXTENSIBLE, запрещающий создание экземпляров типа, либо объявляющий сигнатуру связанной процедуры без тела"
зачем нам класс из которого мы не можем создать объект?
т.е. как мы можем использовать сам класс не создавая из него объект?
6
"NEW — маркирует процедуру, первый раз введенную в иерархии расширения, позволяет избежать опасной ошибки, когда в одном из базовых типов вводится связанная процедура, совпадающая с уже существовавшей процедурой в расширенном типе."
т.е. классу предку добавляют процедуру с именем которое уже используется у класса потомка?
почему это будет ошибкой?

дальше к сожалению очень многое становится непонятным, т.к. в голове еще толком не улеглись ABSTRACT, EXTENSIBLE, EMPTY, LIMITED, NEW

---------------------------------------------------------------------------------
так же нашел опечатку:
"Такаяпозднее связывание еще называют виртуализацией кода."