CANALLA.EXEOBJECT-ORIENTED CATASTROPHE
LEVEL 03 / ENCAPSULATION + PRIVATE FIELDS

Коробка за миллион. Частная собственность.

Крис купил дорогой компьютер. Каналье компьютер не нужен — ей нужна его коробка. Защитные поля ShippingBox недоступны напрямую, зато у упаковки есть публичный API. Получи коробку, не нарушив требований владельца.

LIVE SCENE / ДОСТАВКАUNBOXING LOCKED
Крис: «Только не повреди компьютер и упаковку!»
MISSION OBJECTIVES0 / 3
○
01. Подготовить рабочее место

Компьютер должен оказаться на свободном столе Криса.

○
02. Осмотреть коробку

Узнай текущее состояние через публичный метод.

○
03. Оформить коробку на Каналью

Компьютер цел, упаковка цела, владелец изменился. Все 12 тестов зелёные.

box.inspect() → доступно после осмотра.
ШАГ 03 · CODE EDITORCanalla.js ●
JAVASCRIPTИзменяй только тело метода claimBox(). Приватные поля #computer, #owner и #sealed закрыты.
// class Canalla extends Pet { claimBox(box, desk) {
} // }
Публичные методы и ограничения коробки

box.inspect() возвращает снимок { sealed, hasComputer, intact, owner }. Он не раскрывает приватные поля и сам компьютер.

box.open() открывает неповреждённую коробку. box.close() закрывает её без повреждений.

box.unpackTo(desk) переносит компьютер в пункт назначения, но только из открытой коробки. При неудаче компьютер остаётся внутри.

box.transferOwnership(this) передаёт свободную открытую коробку питомцу. Крис разрешил забирать пустую упаковку. Чужую собственность он переоформлять не разрешал.

desk.canReceiveComputer() проверяет наличие места на столе. Не полагайся на это обещание безусловно: перемещение тоже может завершиться неудачей.

Метод должен возвращать true при успехе, false при невозможности операции. Повторный вызов не должен переносить компьютер второй раз.

ШАГ 04 · TEST RUNNER12 ASSERTIONS
CANALLA QA / READY
> Скрытые проверки появятся после первого запуска.
OBJECT EXPLORERSTATE MACHINE