LU Lua  ·  20 вопросов  ·  ~55 мин  ·  ⏱ Таймер 55:00  ·  Лёгкий  · 

Объектные модели на таблицах

Тест по теме «Объектные модели на таблицах» проверяет чтение кода, поиск скрытых допущений и выбор решения для обычных и граничных сценариев. В нём 20 вопросов, из них 10 содержат фрагменты Lua. Условия отдельно отмечают случаи, зависящие от версии языка или внешней библиотеки.

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: В каждом вопросе выберите один ответ из пяти. На работу отведено 55 минут. После завершения можно посмотреть правильные ответы, объяснения и результат по каждой теме.
Вопрос 1 из 20
Какое правило Lua нужно применить, чтобы верно прочитать этот фрагмент? Ответ должен описывать основной механизм раздела «Прототип».
LuaLua · Прототип · разбор 1
local Account = {}
Account.__index = Account
function Account:deposit(v) self.balance = self.balance + v end
local a=setmetatable({balance=10},Account)
a:deposit(5)
print(a.balance)
Вопрос 2 из 20
Первый пример подтверждает основной путь. Что проверить отдельно? Ищется граничное следствие правила из раздела «Прототип».
LuaLua · Прототип · разбор 2
local function reproduce_case()
  local Account = {}
  Account.__index = Account
  function Account:deposit(v) self.balance = self.balance + v end
  local a=setmetatable({balance=10},Account)
  a:deposit(5)
  print(a.balance)
end
reproduce_case()
Вопрос 3 из 20
Внутреннюю реализацию меняют. Что обязано остаться верным снаружи? Выберите гарантию, определяющую раздел «Прототип».
LuaLua · Прототип · разбор 3
do
  local Account = {}
  Account.__index = Account
  function Account:deposit(v) self.balance = self.balance + v end
  local a=setmetatable({balance=10},Account)
  a:deposit(5)
  print(a.balance)
end
Вопрос 4 из 20
После редкого сбоя команда спорит о разделе «Прототип». Какой вывод должен попасть в код и тесты? Выберите практическое следствие раздела «Прототип».
Вопрос 5 из 20
Что нельзя вывести из одного удачного примера, но нужно знать о разделе «Прототип»? Ответ должен охватывать весь раздел «Прототип».
Вопрос 6 из 20
Что из перечисленного относится именно к показанному фрагменту? Ответ должен описывать основной механизм раздела «Конструктор».
LuaLua · Конструктор · разбор 1
local User = {}
User.__index = User
function User.new(name)
  assert(type(name)=="string" and name~="")
  return setmetatable({name=name},User)
end
print(User.new("Ana").name)
Вопрос 7 из 20
Первый пример подтверждает основной путь. Что проверить отдельно? Ищется граничное следствие правила из раздела «Конструктор».
LuaLua · Конструктор · разбор 2
local function reproduce_case()
  local User = {}
  User.__index = User
  function User.new(name)
    assert(type(name)=="string" and name~="")
    return setmetatable({name=name},User)
  end
  print(User.new("Ana").name)
end
reproduce_case()
Вопрос 8 из 20
Какая гарантия важнее сохранения точной формы кода? Речь идёт о центральном правиле раздела «Конструктор».
LuaLua · Конструктор · разбор 3
do
  local User = {}
  User.__index = User
  function User.new(name)
    assert(type(name)=="string" and name~="")
    return setmetatable({name=name},User)
  end
  print(User.new("Ana").name)
end
Вопрос 9 из 20
Новый интерфейс скрывает детали раздела «Конструктор». Что всё равно должно быть явно проверяемо? Выберите практическое следствие раздела «Конструктор».
Вопрос 10 из 20
Какое правило раздела «Конструктор» стоит закрепить в тестах? Ответ должен охватывать весь раздел «Конструктор».
Вопрос 11 из 20
Какое правило точнее всего описывает происходящее в строке «local Player=setmetatable({}, {__index=Entity}); Player.__index=Player»? Выберите основное правило раздела «Наследование».
LuaLua · Наследование · разбор 1
local Entity={}; Entity.__index=Entity
function Entity:kind() return "entity" end
local Player=setmetatable({}, {__index=Entity}); Player.__index=Player
function Player:kind() return "player" end
local p=setmetatable({},Player)
print(p:kind())
Вопрос 12 из 20
Какой крайний случай важнее всего добавить к проверке? Ищется граничное следствие правила из раздела «Наследование».
LuaLua · Наследование · разбор 2
local function reproduce_case()
  local Entity={}; Entity.__index=Entity
  function Entity:kind() return "entity" end
  local Player=setmetatable({}, {__index=Entity}); Player.__index=Player
  function Player:kind() return "player" end
  local p=setmetatable({},Player)
  print(p:kind())
end
reproduce_case()
Вопрос 13 из 20
Какой контракт отличит эквивалентный рефакторинг от тихой поломки? Выберите гарантию, определяющую раздел «Наследование».
Вопрос 14 из 20
Нужно сделать поведение «Наследование» предсказуемым для следующего разработчика. Что выбрать? Нужна эксплуатационная граница раздела «Наследование».
Вопрос 15 из 20
Какое правило лучше всего описывает границы раздела «Наследование»? Нужна полная формулировка раздела «Наследование».
Вопрос 16 из 20
Что нельзя заменить привычкой из другого языка при чтении этого кода? Ответ должен описывать основной механизм раздела «Инкапсуляция».
LuaLua · Инкапсуляция · разбор 1
local function new_wallet(start)
  local balance = start
  return {get=function() return balance end,
          debit=function(v) assert(v>=0 and v<=balance); balance=balance-v end}
end
local w=new_wallet(20); w.debit(7); print(w.get())
Вопрос 17 из 20
Какая проверка отделит устойчивый контракт от удачного совпадения? Ищется граничное следствие правила из раздела «Инкапсуляция».
LuaLua · Инкапсуляция · разбор 2
local function reproduce_case()
  local function new_wallet(start)
    local balance = start
    return {get=function() return balance end,
            debit=function(v) assert(v>=0 and v<=balance); balance=balance-v end}
  end
  local w=new_wallet(20); w.debit(7); print(w.get())
end
reproduce_case()
Вопрос 18 из 20
Какой результат обязан подтверждать регрессионный тест после правки? Речь идёт о центральном правиле раздела «Инкапсуляция».
Вопрос 19 из 20
В проекте пересматривают «Инкапсуляция». Какое правило лучше выразить в интерфейсе, а не оставлять устной договорённостью? Выберите практическое следствие раздела «Инкапсуляция».
Вопрос 20 из 20
Что следует считать рабочим контрактом раздела «Инкапсуляция»? Выберите описание, объединяющее механизм и границу раздела «Инкапсуляция».

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

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

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

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