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

Наследование, интерфейсы и mixin

Тест по теме «Наследование, интерфейсы и mixin» охватывает «extends и implements», «Переопределение», «Mixin-композиция» и «Контракты типов». В 20 вопросах нужно читать код, различать граничные случаи, выбирать место исправления, формулировать внешний договор и проектировать регрессионную проверку. Заданий с фрагментами кода — 12; в каждом вопросе один правильный ответ из пяти.

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На работу отведено 55 минут. В заданиях с кодом опирайтесь на показанный фрагмент и наблюдаемое поведение; в ситуационных — на публичный договор и последствия решения.
Вопрос 1 из 20
Какое изменение показанного кода исправляет правило «extends и implements», а не маскирует один его симптом?
DartDart · extends и implements · исправление
abstract class Store { Future<String?> read(String key); }
class MemoryStore extends Store {
  final _data = <String, String>{};
  @override Future<String?> read(String key) async => _data[key];
}

// Контекст задания: выбор места исправления.
Вопрос 2 из 20
Для показанного решения написали один тест на успех. Какой набор граничных сценариев по теме «extends и implements» должен появиться рядом?
DartDart · extends и implements · границы
abstract class Store { Future<String?> read(String key); }
class MemoryStore extends Store {
  final _data = <String, String>{};
  @override Future<String?> read(String key) async => _data[key];
}

// Контекст задания: анализ граничных входов.
Вопрос 3 из 20
Какой тезис о коде «extends и implements» можно защитить без ссылки на удачный тестовый запуск?
DartDart · extends и implements · семантика
abstract class Store { Future<String?> read(String key); }
class MemoryStore extends Store {
  final _data = <String, String>{};
  @override Future<String?> read(String key) async => _data[key];
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 4 из 20
Какой договор позволяет тестировать «extends и implements» через результат, а не через приватные детали?
Вопрос 5 из 20
После исправления темы «extends и implements» нужен тест, который переживёт рефакторинг. Что следует закрепить?
Вопрос 6 из 20
Фрагмент допускает частный обход спорного случая. Как перенести ответственность туда, где определяется правило «Переопределение»?
DartDart · Переопределение · исправление
class Base { num convert(num x) => x; }
class Rounded extends Base {
  @override int convert(num x) => x.round();
}
void main() => print(Rounded().convert(2.6));

// Контекст задания: выбор места исправления.
Вопрос 7 из 20
Какое описание семантики показанного решения по теме «Переопределение» является точным?
DartDart · Переопределение · семантика
class Base { num convert(num x) => x; }
class Rounded extends Base {
  @override int convert(num x) => x.round();
}
void main() => print(Rounded().convert(2.6));

// Контекст задания: проверка семантики фрагмента.
Вопрос 8 из 20
Для показанного решения написали один тест на успех. Какой набор граничных сценариев по теме «Переопределение» должен появиться рядом?
DartDart · Переопределение · границы
class Base { num convert(num x) => x; }
class Rounded extends Base {
  @override int convert(num x) => x.round();
}
void main() => print(Rounded().convert(2.6));

// Контекст задания: анализ граничных входов.
Вопрос 9 из 20
Что добавить в набор тестов, чтобы ошибка по теме «Переопределение» не вернулась незаметно?
Вопрос 10 из 20
Какой договор позволяет тестировать «Переопределение» через результат, а не через приватные детали?
Вопрос 11 из 20
На ревью спорят, достаточно ли одного сквозного теста для «Mixin-композиция». Какой набор действительно раскрывает границы поведения?
DartDart · Mixin-композиция · границы
mixin Audited on Repository {
  void saveWithAudit(String value) {
    save(value);
    log('saved:$value');
  }
}
abstract class Repository { void save(String value); void log(String event); }

// Контекст задания: анализ граничных входов.
Вопрос 12 из 20
Фрагмент допускает частный обход спорного случая. Как перенести ответственность туда, где определяется правило «Mixin-композиция»?
DartDart · Mixin-композиция · исправление
mixin Audited on Repository {
  void saveWithAudit(String value) {
    save(value);
    log('saved:$value');
  }
}
abstract class Repository { void save(String value); void log(String event); }

// Контекст задания: выбор места исправления.
Вопрос 13 из 20
Какое описание семантики показанного решения по теме «Mixin-композиция» является точным?
DartDart · Mixin-композиция · семантика
mixin Audited on Repository {
  void saveWithAudit(String value) {
    save(value);
    log('saved:$value');
  }
}
abstract class Repository { void save(String value); void log(String event); }

// Контекст задания: проверка семантики фрагмента.
Вопрос 14 из 20
Команда хочет свободно менять устройство решения «Mixin-композиция». Какое требование нельзя нарушить?
Вопрос 15 из 20
Что добавить в набор тестов, чтобы ошибка по теме «Mixin-композиция» не вернулась незаметно?
Вопрос 16 из 20
После одного успешного запуска фрагмент признали готовым. Какой набор случаев по теме «Контракты типов» всё ещё нужно проверить раздельно?
DartDart · Контракты типов · границы
abstract interface class Clock { DateTime now(); }
class ExpiringToken {
  ExpiringToken(this.clock, this.expiresAt);
  final Clock clock;
  final DateTime expiresAt;
  bool get expired => !clock.now().isBefore(expiresAt);
}

// Контекст задания: анализ граничных входов.
Вопрос 17 из 20
Какой вывод о фрагменте «Контракты типов» останется верным после безопасного рефакторинга?
DartDart · Контракты типов · семантика
abstract interface class Clock { DateTime now(); }
class ExpiringToken {
  ExpiringToken(this.clock, this.expiresAt);
  final Clock clock;
  final DateTime expiresAt;
  bool get expired => !clock.now().isBefore(expiresAt);
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 18 из 20
Фрагмент допускает частный обход спорного случая. Как перенести ответственность туда, где определяется правило «Контракты типов»?
DartDart · Контракты типов · исправление
abstract interface class Clock { DateTime now(); }
class ExpiringToken {
  ExpiringToken(this.clock, this.expiresAt);
  final Clock clock;
  final DateTime expiresAt;
  bool get expired => !clock.now().isBefore(expiresAt);
}

// Контекст задания: выбор места исправления.
Вопрос 19 из 20
Как проверить тему «Контракты типов» через публичный результат, не цепляясь за устройство реализации?
Вопрос 20 из 20
Команда хочет свободно менять устройство решения «Контракты типов». Какое требование нельзя нарушить?

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

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

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

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