OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 26 Апрель, 2024 06:07

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




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Аналог конструктора для записи
СообщениеДобавлено: Четверг, 03 Август, 2023 07:16 

Зарегистрирован: Суббота, 30 Июль, 2022 12:02
Сообщения: 68
Задача стояла следующим образом - сделать так, чтобы запись нельзя было создать никак иначе, кроме как через конструктор.
Для Оберона был сделан следующий простой пример.
Код:
MODULE Export;
TYPE
  a=RECORD
    b-:INTEGER;
  END;
VAR
  p-:POINTER TO a;
PROCEDURE Init*();
BEGIN
  NEW(p);
  p^.b:=100;
END Init;
BEGIN
END Export.

Код:
<*+MAIN*>
MODULE Import;
IMPORT STextIO,SWholeIO,Export;
VAR
  c:CHAR;
BEGIN
  Export.Init;
  SWholeIO.WriteInt(Export.p^.b,4);
  STextIO.WriteLn;
  STextIO.ReadChar(c);
END Import.

Иван Денисов сделал аналогичный пример на Компонентном Паскале
Код:
MODULE TestExport;
TYPE
  Item*=POINTER TO LIMITED RECORD
        b-:INTEGER;
  END;
PROCEDURE Init*():Item;
VAR
  temp:Item;
BEGIN
  NEW(temp);
  temp^.b:=100;
  RETURN temp;
END Init;
BEGIN
END TestExport.

Код:
MODULE TestImport;
IMPORT Log,TestExport;
VAR
  Item:TestExport.Item;
PROCEDURE Do*;
BEGIN
  Item:=TestExport.Init();
  Log.Int(Item^.b);
  Log.Ln;
END Do;
END TestImport.
TestImport.Do

P.S. Прошу извинить, если данная тема уже поднималась на форуме - не нашёл.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Аналог конструктора для записи
СообщениеДобавлено: Четверг, 03 Август, 2023 08:59 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1167
вообще, в BBCB для производства объектов чаше используют фабрики. см. любой модуль, где есть `dir` — это фабрика (почему-то омики называют их Directory).

это не в смысле, что код неправильный, а в смысле что обычно подобные штуки нужны для расширяемых типов, и тогда базовый объявляется как ABSTRACT, и рядом с ним фабрика, тоже как абстракт. потом конкретные модули реализации подставляют фабрику, которая штампует нужное. в среде так сделаны платформо-независимые интерфейсы, куда хост-реализации подставляют своё.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Аналог конструктора для записи
СообщениеДобавлено: Четверг, 03 Август, 2023 11:58 

Зарегистрирован: Суббота, 30 Июль, 2022 12:02
Сообщения: 68
arisu писал(а):
вообще, в BBCB для производства объектов чаше используют фабрики. см. любой модуль, где есть `dir` — это фабрика (почему-то омики называют их Directory).

это не в смысле, что код неправильный, а в смысле что обычно подобные штуки нужны для расширяемых типов, и тогда базовый объявляется как ABSTRACT, и рядом с ним фабрика, тоже как абстракт. потом конкретные модули реализации подставляют фабрику, которая штампует нужное. в среде так сделаны платформо-независимые интерфейсы, куда хост-реализации подставляют своё.

Да, я вас понимаю, но реализовать абстрактный тип можно и без фабрики. Тут задача ставилась по-другому - реализация только через конструктор, без возможности использования оператора NEW в импортирующем модуле. Своего рода аналог классов в Delphi с обязательным Create.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Аналог конструктора для записи
СообщениеДобавлено: Четверг, 03 Август, 2023 12:47 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1167
я так, для полноты картины. вдруг кто в тему нечаянно забредёт — пусть имеет информацию для размышления. ;-)


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

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


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

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


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

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