OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 19 Март, 2024 06:10

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Семантика расширения записей
СообщениеДобавлено: Вторник, 05 Февраль, 2013 18:42 

Зарегистрирован: Суббота, 02 Февраль, 2013 16:19
Сообщения: 17
(На Оберонах я не программировал, только читал сообщения о языках.)

В сообщениях о языках Оберон и Оберон-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/Компонентном Паскале поля записей перекрывать одноимённые закрытые поля базовых записей. Если не могут, то это нарушение инкапсуляции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Семантика расширения записей
СообщениеДобавлено: Вторник, 05 Февраль, 2013 19:13 

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


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Семантика расширения записей
СообщениеДобавлено: Вторник, 05 Февраль, 2013 19:40 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
В Обероне-2 в реализации XDS нарушение инкапсуляции имеется: потомок не может иметь поля, одноимённого со скрытым полем предка.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Семантика расширения записей
СообщениеДобавлено: Вторник, 05 Февраль, 2013 19:49 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Товарищи, а где об этом говорится? В сообщении о языке не нашел.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Семантика расширения записей
СообщениеДобавлено: Вторник, 05 Февраль, 2013 19:53 

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Семантика расширения записей
СообщениеДобавлено: Вторник, 05 Февраль, 2013 20:37 

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


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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Семантика расширения записей
СообщениеДобавлено: Среда, 06 Февраль, 2013 16:16 

Зарегистрирован: Суббота, 02 Февраль, 2013 16:19
Сообщения: 17
Иван Кузьмицкий писал(а):
В КП ситуация такая - если родительская запись в одном модуле с потомком, то не могут, а если родитель и потомок в разных, то могут. Но если родитель экспортирует поле, то наследник из другого модуля не сможет перекрыть.

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Семантика расширения записей
СообщениеДобавлено: Среда, 06 Февраль, 2013 18:57 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Маздайщик писал(а):
принципу наименьшего удивления.
Спасибо за педагогически ценное напоминание.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB