OberonCore
https://forum.oberoncore.ru/

Семантика расширения записей
https://forum.oberoncore.ru/viewtopic.php?f=29&t=4247
Страница 1 из 1

Автор:  Маздайщик [ Вторник, 05 Февраль, 2013 18:42 ]
Заголовок сообщения:  Семантика расширения записей

(На Оберонах я не программировал, только читал сообщения о языках.)

В сообщениях о языках Оберон и Оберон-07 написано, что область действия записи является определением записи, но видна также в селекторе записи:
Цитата:
The scope of these field identifiers is the record definition itself, but they are also visible within field designators.

Если тип записи экспортируется, то идентификаторы полей, которые должны быть видимы вне определяющего модуля, должны быть помечены:
Цитата:
If a record type is exported, field identifiers that are to be visible outside the declaring module must be marked.

Про расширение записей сказано лишь то, что типы записей расширяемы:
Цитата:
Record types are extensible, i.e. a record type can be defined as an extension of another record type.

Однако, точного определения слова «расширение» не даётся.

В Обероне-2 и Компонентном Паскале есть дополнительное уточнение, что идентификаторы расширения не должны конфликтовать с идентификаторами базовой записи:
Цитата:
All identifiers declared in the extended record must be different from the identifiers declared in its basse type record(s).


Возникли вопросы:
1. Могут ли в Обероне/Обероне-07 поля производных записей перекрывать одноимённые поля в базовых записях?
2. Могут ли в Обероне-2/Компонентном Паскале поля записей перекрывать одноимённые закрытые поля базовых записей. Если не могут, то это нарушение инкапсуляции.

Автор:  Иван Кузьмицкий [ Вторник, 05 Февраль, 2013 19:13 ]
Заголовок сообщения:  Re: Семантика расширения записей

Маздайщик писал(а):
2. Могут ли в Обероне-2/Компонентном Паскале поля записей перекрывать одноимённые закрытые поля базовых записей. Если не могут, то это нарушение инкапсуляции.


В КП ситуация такая - если родительская запись в одном модуле с потомком, то не могут, а если родитель и потомок в разных, то могут. Но если родитель экспортирует поле, то наследник из другого модуля не сможет перекрыть.

Автор:  Александр Ильин [ Вторник, 05 Февраль, 2013 19:40 ]
Заголовок сообщения:  Re: Семантика расширения записей

В Обероне-2 в реализации XDS нарушение инкапсуляции имеется: потомок не может иметь поля, одноимённого со скрытым полем предка.

Скорее всего, то же самое будет и в компиляторе ОС Оберон (например, OPCL), но это я не проверял.

Автор:  ilovb [ Вторник, 05 Февраль, 2013 19:49 ]
Заголовок сообщения:  Re: Семантика расширения записей

Товарищи, а где об этом говорится? В сообщении о языке не нашел.

Автор:  Kemet [ Вторник, 05 Февраль, 2013 19:53 ]
Заголовок сообщения:  Re: Семантика расширения записей

Все компиляторы, основанные на OP2, включая компилятор BlackBox, POW!, и выдранный из ОС Оберон OPCL, по понятным причинам ведут себя одинаково - так, как описал Иван Кузьмицкий.
Компиляторы Активного Оберона ведут себя так же.

Автор:  Валерий Лаптев [ Вторник, 05 Февраль, 2013 20:37 ]
Заголовок сообщения:  Re: Семантика расширения записей

Иван Кузьмицкий писал(а):
Маздайщик писал(а):
2. Могут ли в Обероне-2/Компонентном Паскале поля записей перекрывать одноимённые закрытые поля базовых записей. Если не могут, то это нарушение инкапсуляции.


В КП ситуация такая - если родительская запись в одном модуле с потомком, то не могут, а если родитель и потомок в разных, то могут. Но если родитель экспортирует поле, то наследник из другого модуля не сможет перекрыть.

Спасибо. Важное уточнение!

Автор:  Маздайщик [ Среда, 06 Февраль, 2013 16:16 ]
Заголовок сообщения:  Re: Семантика расширения записей

Иван Кузьмицкий писал(а):
В КП ситуация такая - если родительская запись в одном модуле с потомком, то не могут, а если родитель и потомок в разных, то могут. Но если родитель экспортирует поле, то наследник из другого модуля не сможет перекрыть.

Что соответствует принципу наименьшего удивления. Напротив, поведение XDS странно.

Спасибо за ответы.

Автор:  Info21 [ Среда, 06 Февраль, 2013 18:57 ]
Заголовок сообщения:  Re: Семантика расширения записей

Маздайщик писал(а):
принципу наименьшего удивления.
Спасибо за педагогически ценное напоминание.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/