Информация об изменениях

Сообщение Re[3]: Builder от 25.08.2023 7:49

Изменено 25.08.2023 8:07 zelenprog

Re[3]: Builder
Отвечаю на все вопросы в этой ветке.

Q>Как я понял, есть ограничение, что все конструкторы без параметров.


Да, именно так. Это ограничение скриптового языка, которым я пользуюсь.
В нем реализовано урезанное ООП.

Q>Тогда непонятно как реализовывать порождающий метод в билдере...


Кстати, да, как это сделать?

Q>Судя по формулировке, у топик-стартера Дотнет. Там вместо френдов — или обращение к internal членам при необходимости, или сам билдер делается вложенным (nested) классом. Пример из стандартной библиотеки — ImmutableDictionary<TKey,TValue>.Builder.


Нет, у меня не Дотнет.
Скриптовый язык, называть его не хочу, стесняюсь

Q>Если топик-стартер придумал себе такое условие «конструктор без параметров», то он с тем же успехом может заменить его условием «фабричный метод без параметров», или «конструктор билдера/фабрики без параметров» (в зависимости от того, где у него это ограничение всплывает).


Я не придумал. Это ограничение "моего" скриптового языка.

Q>

Есть известный шаблон IDisposable, который предназначен для освобождения ресурсов.
Q>Он нужен по той причине, что деструктор (финализатор) не всегда корректно справляется со своей "работой".
Q>...аналогичный по схеме IDisposable, но противоположный по значению.

Q>IDisposable, финализатор и корректность его работы (вероятно, имеется в виду недетерминированность) — это Дотнет-специфичное.

В этом скриптовом языке работа с памятью очень похожа на Дотнет.
За освобождением следит некий сборщик мусора. Когда ссылка на объект становится "свободной" — память освобождается.
Но назначение Dispose — освобождать ресурсы тогда, когда нужно разработчику, не дожидаясь сборщика мусора.
По моему такой подход сейчас есть во многих современных языках. Ну и я его применяю на "моем" скриптовом языке.

Так что актуальным остается вопрос: как формировать в билдере объект, если у этого объекта есть только один конструктор без параметров?
Re[3]: Builder
Отвечаю на все вопросы в этой ветке.

Q>Как я понял, есть ограничение, что все конструкторы без параметров.


Да, именно так. Это ограничение скриптового языка, которым я пользуюсь.
В нем реализовано урезанное ООП.

Q>Тогда непонятно как реализовывать порождающий метод в билдере...


Кстати, да, как это сделать?

Q>Судя по формулировке, у топик-стартера Дотнет. Там вместо френдов — или обращение к internal членам при необходимости, или сам билдер делается вложенным (nested) классом. Пример из стандартной библиотеки — ImmutableDictionary<TKey,TValue>.Builder.


Нет, у меня не Дотнет.
Скриптовый язык, называть его не хочу, стесняюсь

Q>Если топик-стартер придумал себе такое условие «конструктор без параметров», то он с тем же успехом может заменить его условием «фабричный метод без параметров», или «конструктор билдера/фабрики без параметров» (в зависимости от того, где у него это ограничение всплывает).


Я не придумал. Это ограничение "моего" скриптового языка.

Q>

Есть известный шаблон IDisposable, который предназначен для освобождения ресурсов.
Q>Он нужен по той причине, что деструктор (финализатор) не всегда корректно справляется со своей "работой".
Q>...аналогичный по схеме IDisposable, но противоположный по значению.

Q>IDisposable, финализатор и корректность его работы (вероятно, имеется в виду недетерминированность) — это Дотнет-специфичное.

В этом скриптовом языке работа с памятью очень похожа на Дотнет.
За освобождением следит некий сборщик мусора. Когда ссылка на объект становится "свободной" — память освобождается.
Но назначение Dispose — освобождать ресурсы тогда, когда нужно разработчику, не дожидаясь сборщика мусора.
По моему такой подход сейчас есть во многих современных языках. Ну и я его применяю на "моем" скриптовом языке.

Так что актуальным остается вопрос: как формировать в билдере объект, если у этого объекта есть только один конструктор без параметров?

По сути мне надо сделать примерно следующее:
class Test
{
   string mFileName;
   File mFile;

   void Set_FileName (pFileName)
   {
      mFileName = pFileName;
   }

   void Init ()
   {
      mFile = FileOpen(mFileName);
   }
};

lTest = new Test;
lTest.Set_FileName("c:\test_file.txt")
lTest.Init();