OberonCore
https://forum.oberoncore.ru/

Расширение LIMITED
https://forum.oberoncore.ru/viewtopic.php?f=29&t=5944
Страница 1 из 1

Автор:  Илья Ермаков [ Четверг, 03 Ноябрь, 2016 23:18 ]
Заголовок сообщения:  Расширение LIMITED

Открыл для себя, что LIMITED-типы могут расширяться, в рамках одного модуля.
Это правильно.

В Сообщении о языке этого не вижу:

Цитата:
Переменные записевого типа, имеющего атрибут LIMITED, могут размещаться [allocated] только внутри того модуля, где описан данный тип. Ограничение применимо как к стати­ческому размещению посредством описания переменных (гл. 7), так и к динамическому размещению с помощью стандартной процедуры NEW (10.3).
Записевый тип, помеченный как ABSTRACT или EXTENSIBLE, допускает расширенное переопределение, т.е. можно определить новый записевый тип как расширение такого типа.


Это указано в документах "Что нового в Компонентном Паскале?" в табличке этих новых атрибутов, под сноской-звёздочккой.
И в "3 Приёмы проектирования в Блэкбоксе".

Цитата:
Компонентный Паскаль превосходит Java в нескольких других языковых конструктах. Один является ограниченными [limited] записями. Это записи, которые могут быть расширены и размещены только внутри описывающего их модуля.

Автор:  Trurl [ Суббота, 05 Ноябрь, 2016 21:38 ]
Заголовок сообщения:  Re: Расширение LIMITED

Я это применял в интерфейсах к GTK.
Код:
GtkRange* = POINTER TO LIMITED RECORD (GtkWidget) END;
GtkScrollbar* = POINTER TO LIMITED RECORD (GtkRange) END;
GtkHScrollbar* = POINTER TO LIMITED RECORD (GtkScrollbar) END;
GtkVScrollbar* = POINTER TO LIMITED RECORD (GtkScrollbar) END;


Еще интересная штука:
Код:
POINTER TO LIMITED RECORD [untagged] END

Можно, например, выстроить иерархию HANDLE -> HGDIOBJ -> HBITMAP.
Или сделать перечисления, почти как настоящие.

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