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

Классы и жизненный цикл объектов

Задания проверяют практическое понимание темы «Классы и жизненный цикл объектов»: что гарантирует язык, где начинается ответственность проекта и какой тест отличит исправление от маскировки. Всего 20 вопросов, среди них 12 кодовых. Оценка разбита по разделам: «Конструкторы», «Деструктор Destroy», «Безопасное освобождение через Free» и «Владение объектом».

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: В каждом вопросе выберите один ответ из пяти. На весь тест отведено 55 минут. Код лучше сначала разобрать вручную: правильный вариант должен объяснять механизм, а не только совпадать с одним запуском.
Вопрос 1 из 20
В `ConstructorExceptionTrace` сначала встречается `constructor TProbe.Create(AFail: Boolean);`, а затем `destructor TPair.Destroy;`. Какой вывод можно сделать только после чтения обеих строк?
PascalDelphi / Pascal · Исключение из конструктора
// Исключение возникает во втором создаваемом объекте.
program ConstructorExceptionTrace;
{$APPTYPE CONSOLE}
uses System.SysUtils;

type
  TProbe = class
  public
    class var Alive: Integer;
    constructor Create(AFail: Boolean);
    destructor Destroy; override;
  end;

  TPair = class
  private
    FFirst: TProbe;
    FSecond: TProbe;
  public
    constructor Create;
    destructor Destroy; override;
  end;

constructor TProbe.Create(AFail: Boolean);
begin
  inherited Create;
  Inc(Alive);
  if AFail then
    raise Exception.Create('Сбой');
end;

destructor TProbe.Destroy;
begin
  Dec(Alive);
  inherited;
end;

constructor TPair.Create;
begin
  inherited Create;
  FFirst := TProbe.Create(False);
  FSecond := TProbe.Create(True);
end;

destructor TPair.Destroy;
begin
  FSecond.Free;
  FFirst.Free;
  inherited;
end;

begin
  try
    TPair.Create;
  except
    on E: Exception do
      Writeln(TProbe.Alive);
  end;
end.
Вопрос 2 из 20
В практическом сценарии по теме «Деструктор Destroy» меняются входные данные и порядок действий. Какой вывод остаётся корректным?
Вопрос 3 из 20
Две реализации темы «Безопасное освобождение через Free» совпадают на обычном примере. Какое различие всё же меняет их договор?
Вопрос 4 из 20
В практическом сценарии по теме «Владение объектом» меняются входные данные и порядок действий. Какой вывод остаётся корректным?
Вопрос 5 из 20
Обычный пример по теме «Конструкторы» проходит, но после изменения состояния возникает дефект. Какое условие объясняет его источник?
Вопрос 6 из 20
Обычный пример по теме «Деструктор Destroy» проходит, но после изменения состояния возникает дефект. Какое условие объясняет его источник?
Вопрос 7 из 20
Реализацию темы «Безопасное освобождение через Free» заменяют без изменения интерфейса. Какое наблюдаемое свойство обязано сохраниться?
Вопрос 8 из 20
В теме «Владение объектом» есть две независимые границы поведения. Какой внешний договор не смешивает их в одно расплывчатое правило?
Вопрос 9 из 20
Какой сценарий по теме «Конструкторы» отличит исправную реализацию от версии со скрытым дефектом?
Вопрос 10 из 20
Правка по теме «Деструктор Destroy» должна сохранить полезное поведение и убрать риск на соседнем сценарии. Какое требование она обязана выполнить?
Вопрос 11 из 20
В теме «Безопасное освобождение через Free» есть две независимые границы поведения. Какой внешний договор не смешивает их в одно расплывчатое правило?
Вопрос 12 из 20
В `Ownership` сначала встречается `Names := TStringList.Create;`, а затем `Names.Free;`. Какое наблюдаемое следствие относится именно к сценарию Ownership?
PascalDelphi / Pascal · Владение объектом
// Определите реальную гарантию в Ownership.
program Ownership;
{$APPTYPE CONSOLE}
uses System.Classes;
procedure LoadNames(const FileName: string);
var
  Names: TStringList;
begin
  Names := TStringList.Create;
  try
    Names.LoadFromFile(FileName);
    Writeln(Names.Count);
  finally
    Names.Free;
  end;
end;
begin end.
Вопрос 13 из 20
Правка по теме «Конструкторы» должна сохранить полезное поведение и убрать риск на соседнем сценарии. Какое требование она обязана выполнить?
Вопрос 14 из 20
Для темы «Деструктор Destroy» готовят регрессионный набор из двух разных сценариев. Какой набор действительно закрывает обе границы?
Вопрос 15 из 20
Две версии `FreeNil` сохраняют порядок `Obj := TObject.Create;` → `FreeAndNil(Obj);`. Какое свойство останется общим для обеих?
PascalDelphi / Pascal · Безопасное освобождение через Free
// Отделите правило языка от удачного запуска FreeNil.
program FreeNil;
{$APPTYPE CONSOLE}
uses System.SysUtils;
var
  Obj: TObject;
begin
  Obj := nil;
  Obj.Free;
  Obj := TObject.Create;
  try
    Writeln(Obj.ClassName);
  finally
    FreeAndNil(Obj);
  end;
end.
Вопрос 16 из 20
Какой сценарий по теме «Владение объектом» отличит исправную реализацию от версии со скрытым дефектом?
Вопрос 17 из 20
Для темы «Конструкторы» обычный путь и граничный путь дают разные риски. Какой вывод учитывает оба, не подменяя один другим?
Вопрос 18 из 20
Какой граничный результат следует ожидать в `DestructorOrder`, когда после `destructor Destroy; override;` выполняется `FData.Free;`?
PascalDelphi / Pascal · Деструктор Destroy
// Определите реальную гарантию в DestructorOrder.
program DestructorOrder;
{$APPTYPE CONSOLE}
type
  TBase = class
    destructor Destroy; override;
  end;
  TChild = class(TBase)
  private
    FData: TObject;
  public
    destructor Destroy; override;
  end;
destructor TBase.Destroy;
begin
  Writeln('base');
  inherited;
end;
destructor TChild.Destroy;
begin
  FData.Free;
  Writeln('child');
  inherited;
end;
begin end.
Вопрос 19 из 20
Какое свойство темы «Безопасное освобождение через Free» становится решающим на граничном входе или при другом порядке действий?
Вопрос 20 из 20
Модуль, использующий тему «Владение объектом», передают другой команде. Какую ответственность нужно закрепить во внешнем договоре?

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

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

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

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