WarCraft 3: 6. Модули

WurstScript
Примечание: Концепция модулей будет изменена в более поздних версиях языка. Если вы хотите себя обезопасить — не создавайте модули, которые используют другие модули. Обычные модули скорее всего не претерпят изменений.
Модуль, это небольшая конструкция поддерживающая некоторую функциональность классов. Классы могут использовать модули и наследовать их функционал.
Вы можете использовать функцию модуля внутри класса так, словно класс определяет эту функцию. Вы так же можете переопределить функцию модуля для контроля его поведения.
Модули подобны абстрактным классам, а использование модуля подобно наследованию от абстрактного класса, однако, без подтипа.
В следующем примере мы определили класс, который использует модуль A. В результате, программа ведет себя так, словно код модуля A был вставлен в класс C
module A
    public function foo()
        ...


class C
    use A
Модули, это не просто механизм копирования кода. Классы и модули могут переопределять функции, определенные в используемом модуле.
// Модуль содержит целочисленный атрибут x
module IntContainer
    int x

    public function getX() returns int
        return int

    public function setX(int x)
        this.x = x

// Контейнер, содержащий только положительные целочисленные значения
module PositiveIntContainer
    use IntContainer

    // Переопределение функции модуля, для коллекционирования только положительных значений
    override function setX(int x)
        if x >= 0
            IntContainer.setX(x)
Модули так же могут объявлять абстрактные функции. Аналогично классам, абстрактные функции модуля должны быть определены в использующем модуле/классе.

Просмотров: 118

Комментарии пока отсутcтвуют