Поиск публикаций
Муниципальные услуги

Получите услугу онлайн

Перейти

Объектно-ориентированное программирование в WDSP

Классы, наследование, конструкторы и многое другое в WDSP

Язык WDSP поддерживает полноценное объектно-ориентированное программирование. Вы можете создавать классы, описывать поля и методы, использовать наследование, вызывать родительские конструкторы и методы. Все ключевые слова — на русском языке для удобства чтения и написания.

💡 Особенность: поля класса всегда должны начинаться с символа , а имена классов и методов — без него. Это помогает различать переменные экземпляра и локальные переменные.

 Определение класса

Класс объявляется с помощью ключевого слова класс, за которым следует имя класса и тело в фигурных скобках.

класс ИмяКласса { … }

Результат: объявление класса (глобальная сущность)
Пример:
класс Точка {
    ₽x;
    ₽y;
    // методы и конструктор
}

 Поля класса

Поля — это переменные, принадлежащие каждому объекту. Они объявляются внутри класса с префиксом . Поля могут быть проинициализированы сразу или в конструкторе.

₽имяПоля;

Пример:
класс Человек {
    ₽имя;
    ₽возраст = 0;  // можно сразу задать значение
}

 Методы

Методы — это функции, определённые внутри класса. Они имеют доступ к полям объекта через ключевое слово это.

имяМетода(₽параметр1, ₽параметр2) { … }

Возвращает: значение (может быть любым типом)
Пример:
класс Человек {
    ₽имя;
    представиться() {
        возврат "Меня зовут " + это.₽имя;
    }
}

 Конструктор

Конструктор — это специальный метод, который автоматически вызывается при создании объекта. Он задаётся с помощью ключевого слова конструктор. В нём обычно инициализируют поля объекта.

конструктор(₽параметр1, ₽параметр2) { … }

Возвращает: ничего (неявно создаёт объект)
Пример:
класс Человек {
    ₽имя;
    ₽возраст;

    конструктор(₽новоеИмя, ₽новыйВозраст) {
        это.₽имя = ₽новоеИмя;
        это.₽возраст = ₽новыйВозраст;
    }
}

 Создание объекта

Для создания экземпляра класса используется ключевое слово новый, после которого указывается имя класса и аргументы для конструктора в круглых скобках.

новый ИмяКласса(аргументы)

Результат: объект (экземпляр класса)
Пример:
₽человек = новый Человек("Алексей", 30);

 Доступ к полям и методам

После создания объекта к его полям и методам обращаются через точку: объект.₽поле или объект.метод().

Пример:
вывести(₽человек.₽имя);                // чтение поля
₽человек.₽возраст = 31;                  // изменение поля
вывести(₽человек.представиться());       // вызов метода

 Наследование

Класс может наследовать поля и методы другого класса. Для этого используется ключевое слово расширяет.

класс Дочерний расширяет Родительский { … }

Результат: дочерний класс, содержащий все поля и методы родителя
Пример:
класс Животное {
    ₽имя;
    говорить() { возврат это.₽имя + " издаёт звук"; }
}

класс Собака расширяет Животное {
    ₽порода;
    говорить() {
        возврат супер.говорить() + " — Гав!";
    }
}

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

В конструкторе дочернего класса можно вызвать конструктор родителя с помощью ключевого слова супер (без точки). Это должно быть сделано до обращения к полям дочернего класса.

супер(аргументы)

Пример:
конструктор(₽новоеИмя, ₽новыйВозраст, ₽новаяПорода) {
    супер(₽новоеИмя, ₽новыйВозраст);   // вызов конструктора Животное
    это.₽порода = ₽новаяПорода;
}

 Вызов метода родителя

В методах дочернего класса можно вызвать одноимённый метод родителя через супер.имяМетода(…).

супер.имяМетода(аргументы)

Пример:
говорить() {
    возврат супер.говорить() + " — Гав!";
}

 Ключевое слово «это»

Внутри методов и конструкторов это ссылается на текущий объект. Используется для доступа к полям и методам объекта, особенно когда имена параметров совпадают с именами полей.

Пример:
конструктор(₽имя) {
    это.₽имя = ₽имя;   // параметр ₽имя присваивается полю ₽имя
}

 Полный пример

Ниже показан рабочий скрипт, демонстрирующий все основные возможности ООП в WDSP:

класс Животное {
    ₽имя;
    ₽возраст;

    конструктор(₽новоеИмя, ₽новыйВозраст) {
        это.₽имя = ₽новоеИмя;
        это.₽возраст = ₽новыйВозраст;
        вывести("[Животное] Создан " + это.₽имя);
    }

    говорить() {
        возврат это.₽имя + " издаёт звук";
    }
}

класс Собака расширяет Животное {
    ₽порода;

    конструктор(₽новоеИмя, ₽новыйВозраст, ₽новаяПорода) {
        супер(₽новоеИмя, ₽новыйВозраст);
        это.₽порода = ₽новаяПорода;
        вывести("[Собака] Порода " + это.₽порода);
    }

    говорить() {
        возврат супер.говорить() + " — Гав!";
    }
}

вывести("=== Тест классов ===");
₽собака = новый Собака("Шарик", 3, "Овчарка");
вывести(₽собака.говорить());
вывести("Имя: " + ₽собака.₽имя);
вывести("Возраст: " + строка(₽собака.₽возраст));
вывести("Порода: " + ₽собака.₽порода);
₽животное = новый Животное("Бобик", 5);
вывести(₽животное.говорить());
вывести("=== Тест пройден ===");

 Ключевые слова ООП

Ключевое словоОписание
классОбъявление нового класса
конструкторСпециальный метод для инициализации объекта
этоСсылка на текущий объект
новыйСоздание экземпляра класса
расширяетНаследование от родительского класса
суперВызов конструктора или метода родителя