Поиск публикаций
Объектно-ориентированное программирование в WDSP
Язык WDSP поддерживает полноценное объектно-ориентированное программирование. Вы можете создавать классы, описывать поля и методы, использовать наследование, вызывать родительские конструкторы и методы. Все ключевые слова — на русском языке для удобства чтения и написания.
₽, а имена классов и методов — без него. Это помогает различать переменные экземпляра и локальные переменные.Определение класса
Класс объявляется с помощью ключевого слова класс, за которым следует имя класса и тело в фигурных скобках.
класс ИмяКласса { … }
класс Точка { ₽x; ₽y; // методы и конструктор }
Поля класса
Поля — это переменные, принадлежащие каждому объекту. Они объявляются внутри класса с префиксом ₽. Поля могут быть проинициализированы сразу или в конструкторе.
₽имяПоля;
класс Человек { ₽имя; ₽возраст = 0; // можно сразу задать значение }
Методы
Методы — это функции, определённые внутри класса. Они имеют доступ к полям объекта через ключевое слово это.
имяМетода(₽параметр1, ₽параметр2) { … }
класс Человек { ₽имя; представиться() { возврат "Меня зовут " + это.₽имя; } }
Конструктор
Конструктор — это специальный метод, который автоматически вызывается при создании объекта. Он задаётся с помощью ключевого слова конструктор. В нём обычно инициализируют поля объекта.
конструктор(₽параметр1, ₽параметр2) { … }
класс Человек { ₽имя; ₽возраст; конструктор(₽новоеИмя, ₽новыйВозраст) { это.₽имя = ₽новоеИмя; это.₽возраст = ₽новыйВозраст; } }
Создание объекта
Для создания экземпляра класса используется ключевое слово новый, после которого указывается имя класса и аргументы для конструктора в круглых скобках.
новый ИмяКласса(аргументы)
₽человек = новый Человек("Алексей", 30);
Доступ к полям и методам
После создания объекта к его полям и методам обращаются через точку: объект.₽поле или объект.метод().
вывести(₽человек.₽имя); // чтение поля ₽человек.₽возраст = 31; // изменение поля вывести(₽человек.представиться()); // вызов метода
Наследование
Класс может наследовать поля и методы другого класса. Для этого используется ключевое слово расширяет.
класс Дочерний расширяет Родительский { … }
класс Животное { ₽имя; говорить() { возврат это.₽имя + " издаёт звук"; } } класс Собака расширяет Животное { ₽порода; говорить() { возврат супер.говорить() + " — Гав!"; } }
Вызов родительского конструктора
В конструкторе дочернего класса можно вызвать конструктор родителя с помощью ключевого слова супер (без точки). Это должно быть сделано до обращения к полям дочернего класса.
супер(аргументы)
конструктор(₽новоеИмя, ₽новыйВозраст, ₽новаяПорода) { супер(₽новоеИмя, ₽новыйВозраст); // вызов конструктора Животное это.₽порода = ₽новаяПорода; }
Вызов метода родителя
В методах дочернего класса можно вызвать одноимённый метод родителя через супер.имяМетода(…).
супер.имяМетода(аргументы)
говорить() { возврат супер.говорить() + " — Гав!"; }
Ключевое слово «это»
Внутри методов и конструкторов это ссылается на текущий объект. Используется для доступа к полям и методам объекта, особенно когда имена параметров совпадают с именами полей.
конструктор(₽имя) { это.₽имя = ₽имя; // параметр ₽имя присваивается полю ₽имя }
Полный пример
Ниже показан рабочий скрипт, демонстрирующий все основные возможности ООП в WDSP:
класс Животное { ₽имя; ₽возраст; конструктор(₽новоеИмя, ₽новыйВозраст) { это.₽имя = ₽новоеИмя; это.₽возраст = ₽новыйВозраст; вывести("[Животное] Создан " + это.₽имя); } говорить() { возврат это.₽имя + " издаёт звук"; } } класс Собака расширяет Животное { ₽порода; конструктор(₽новоеИмя, ₽новыйВозраст, ₽новаяПорода) { супер(₽новоеИмя, ₽новыйВозраст); это.₽порода = ₽новаяПорода; вывести("[Собака] Порода " + это.₽порода); } говорить() { возврат супер.говорить() + " — Гав!"; } } вывести("=== Тест классов ==="); ₽собака = новый Собака("Шарик", 3, "Овчарка"); вывести(₽собака.говорить()); вывести("Имя: " + ₽собака.₽имя); вывести("Возраст: " + строка(₽собака.₽возраст)); вывести("Порода: " + ₽собака.₽порода); ₽животное = новый Животное("Бобик", 5); вывести(₽животное.говорить()); вывести("=== Тест пройден ===");