DP Delphi / Pascal  ·  20 вопросов  ·  ~55 мин  ·  ⏱ Таймер 55:00  ·  Лёгкий  · 

Интерфейсы и подсчёт ссылок

Вопросы имитируют чтение и сопровождение рабочего Delphi/Pascal-кода. Нужно отделять факт от правдоподобного мифа, учитывать граничные случаи и явно формулировать договор. В тесте 20 вопросов и 12 примеров с кодом; рассматриваются «Контракт IInterface», «Запрос интерфейсов», «Подсчёт ссылок» и «Смешанное владение».

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: В каждом вопросе выберите один ответ из пяти. На весь тест отведено 55 минут. Код лучше сначала разобрать вручную: правильный вариант должен объяснять механизм, а не только совпадать с одним запуском.
Вопрос 1 из 20
В `InterfaceContract` сначала встречается `C := TClock.Create;`, а затем `Writeln(C.NowText);`. Какой вывод можно сделать только после чтения обеих строк?
PascalDelphi / Pascal · Контракт IInterface
// Отделите правило языка от удачного запуска InterfaceContract.
program InterfaceContract;
{$APPTYPE CONSOLE}
type
  IClock = interface
    ['{B7F27D1A-8778-4DCA-9EAB-1A4215AA0011}']
    function NowText: string;
  end;
  TClock = class(TInterfacedObject, IClock)
    function NowText: string;
  end;
function TClock.NowText: string;
begin Result := '12:00'; end;
var
  C: IClock;
begin
  C := TClock.Create;
  Writeln(C.NowText);
end.
Вопрос 2 из 20
Правка по теме «Запрос интерфейсов» должна сохранить полезное поведение и убрать риск на соседнем сценарии. Какое требование она обязана выполнить?
Вопрос 3 из 20
Какой сценарий по теме «Подсчёт ссылок» отличит исправную реализацию от версии со скрытым дефектом?
Вопрос 4 из 20
Правка по теме «Смешанное владение» должна сохранить полезное поведение и убрать риск на соседнем сценарии. Какое требование она обязана выполнить?
Вопрос 5 из 20
Модуль, использующий тему «Контракт IInterface», передают другой команде. Какую ответственность нужно закрепить во внешнем договоре?
Вопрос 6 из 20
Какое свойство темы «Запрос интерфейсов» становится решающим на граничном входе или при другом порядке действий?
Вопрос 7 из 20
Модуль, использующий тему «Подсчёт ссылок», передают другой команде. Какую ответственность нужно закрепить во внешнем договоре?
Вопрос 8 из 20
В теме «Смешанное владение» есть две независимые границы поведения. Какой внешний договор не смешивает их в одно расплывчатое правило?
Вопрос 9 из 20
В практическом сценарии по теме «Контракт IInterface» меняются входные данные и порядок действий. Какой вывод остаётся корректным?
Вопрос 10 из 20
Две реализации темы «Запрос интерфейсов» совпадают на обычном примере. Какое различие всё же меняет их договор?
Вопрос 11 из 20
В теме «Подсчёт ссылок» есть две независимые границы поведения. Какой внешний договор не смешивает их в одно расплывчатое правило?
Вопрос 12 из 20
Две версии `MixedOwnership` сохраняют порядок `Obj := TService.Create;` → `Intf := nil;`. Какое свойство останется общим для обеих?
PascalDelphi / Pascal · Смешанное владение
// Определите реальную гарантию в MixedOwnership.
program MixedOwnership;
{$APPTYPE CONSOLE}
type
  IService = interface
    ['{B7F27D1A-8778-4DCA-9EAB-1A4215AA0014}']
    procedure Work;
  end;
  TService = class(TInterfacedObject, IService)
    procedure Work;
  end;
procedure TService.Work;
begin Writeln('work'); end;
var
  Obj: TService;
  Intf: IService;
begin
  Obj := TService.Create;
  Intf := Obj;
  Intf := nil;
  Obj.Free;
end.
Вопрос 13 из 20
Обычный пример по теме «Контракт IInterface» проходит, но после изменения состояния возникает дефект. Какое условие объясняет его источник?
Вопрос 14 из 20
В теме «Запрос интерфейсов» есть две независимые границы поведения. Какой внешний договор не смешивает их в одно расплывчатое правило?
Вопрос 15 из 20
Какой граничный результат следует ожидать в `RefCountMoment`, когда после `begin Writeln('destroy'); inherited; end;` выполняется `Execute(TJob.Create);`?
PascalDelphi / Pascal · Подсчёт ссылок
// Проследите фактическое поведение RefCountMoment.
program RefCountMoment;
{$APPTYPE CONSOLE}
type
  IJob = interface
    ['{B7F27D1A-8778-4DCA-9EAB-1A4215AA0013}']
    procedure Run;
  end;
  TJob = class(TInterfacedObject, IJob)
    destructor Destroy; override;
    procedure Run;
  end;
destructor TJob.Destroy;
begin Writeln('destroy'); inherited; end;
procedure TJob.Run;
begin Writeln('run'); end;
procedure Execute(const J: IJob);
begin J.Run; end;
begin
  Execute(TJob.Create);
  Writeln('after');
end.
Вопрос 16 из 20
В практическом сценарии по теме «Смешанное владение» меняются входные данные и порядок действий. Какой вывод остаётся корректным?
Вопрос 17 из 20
Для темы «Контракт IInterface» обычный путь и граничный путь дают разные риски. Какой вывод учитывает оба, не подменяя один другим?
Вопрос 18 из 20
Какое наблюдение должен зафиксировать тест именно для последовательности `IReadable = interface` → `if Supports(Obj, IReadable, R) then` в `SupportsDemo`?
PascalDelphi / Pascal · Запрос интерфейсов
// Отделите правило языка от удачного запуска SupportsDemo.
program SupportsDemo;
{$APPTYPE CONSOLE}
uses System.SysUtils;
type
  IReadable = interface
    ['{B7F27D1A-8778-4DCA-9EAB-1A4215AA0012}']
    function ReadText: string;
  end;
var
  Obj: TObject;
  R: IReadable;
begin
  Obj := TObject.Create;
  try
    if Supports(Obj, IReadable, R) then
      Writeln(R.ReadText)
    else
      Writeln('not supported');
  finally
    Obj.Free;
  end;
end.
Вопрос 19 из 20
Реализацию темы «Подсчёт ссылок» заменяют без изменения интерфейса. Какое наблюдаемое свойство обязано сохраниться?
Вопрос 20 из 20
Обычный пример по теме «Смешанное владение» проходит, но после изменения состояния возникает дефект. Какое условие объясняет его источник?

Ответьте на все 20 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу