Menu
Coddy logo textTech

Итоги: Система животных

Часть раздела Объектно-ориентированное программирование путешествия по Dart на Coddy — урок 56 из 110.

challenge icon

Задание

Легко

Давайте создадим полноценную систему животных, которая объединит все, что вы узнали о примесях (mixins)! Вы создадите базовый класс Animal, примеси поведения, использующие ключевое слово on, и конкретные классы животных, которые по-разному комбинируют эти возможности.

Вы организуете свой код в три файла:

  • animal.dart: Определите базовый класс, от которого будут наследоваться все животные:
    • Класс Animal со свойством String name и конструктором
    • Метод describe(), который выводит [name] is an animal
  • behaviors.dart: Импортируйте файл animal и создайте три примеси поведения, каждая из которых ограничена классом Animal с помощью ключевого слова on:
    • Примесь Swimming с методом swim(), который выводит [name] is swimming
    • Примесь Flying с методом fly(), который выводит [name] is flying
    • Примесь Walking с методом walk(), который выводит [name] is walking
  • main.dart: Импортируйте оба файла и создайте три класса животных, которые сочетают наследование с различными комбинациями примесей:
    • Класс Duck, который расширяет Animal и использует все три примеси (Swimming, Flying, Walking)
    • Класс Fish, который расширяет Animal и использует только примесь Swimming
    • Класс Bird, который расширяет Animal и использует примеси Flying и Walking
    Затем продемонстрируйте возможности каждого животного:
    • Создайте Duck с именем 'Donald', вызовите describe(), затем swim(), fly() и walk()
    • Выведите пустую строку
    • Создайте Fish с именем 'Nemo', вызовите describe(), затем swim()
    • Выведите пустую строку
    • Создайте Bird с именем 'Tweety', вызовите describe(), затем fly() и walk()

Каждая примесь может получить доступ к свойству name благодаря ограничению on Animal, что обеспечивает типизацию и гибкую композицию поведения.

Ожидаемый результат:

Donald is an animal
Donald is swimming
Donald is flying
Donald is walking

Nemo is an animal
Nemo is swimming

Tweety is an animal
Tweety is flying
Tweety is walking

Попробуйте сами

import 'animal.dart';
import 'behaviors.dart';

// TODO: Создайте класс Duck, который расширяет Animal и использует миксины Swimming, Flying, Walking
class Duck {
  // TODO: Реализуйте класс Duck
}

// TODO: Создайте класс Fish, который расширяет Animal и использует только миксин Swimming
class Fish {
  // TODO: Реализуйте класс Fish
}

// TODO: Создайте класс Bird, который расширяет Animal и использует миксины Flying и Walking
class Bird {
  // TODO: Реализуйте класс Bird
}

void main() {
  // TODO: Создайте объект Duck с именем 'Donald'
  // Вызовите методы describe(), swim(), fly(), walk()
  
  // TODO: Выведите пустую строку
  
  // TODO: Создайте объект Fish с именем 'Nemo'
  // Вызовите методы describe(), swim()
  
  // TODO: Выведите пустую строку
  
  // TODO: Создайте объект Bird с именем 'Tweety'
  // Вызовите методы describe(), fly(), walk()
}

Все уроки раздела Объектно-ориентированное программирование