Контракты: Кот и Собака

Одна функция работает с любым объектом, который умеет «напечатать».

Код

// Пример: контракты и настоящий полиморфизм (динамический диспетчинг).
// Одна и та же функция работает с любой структурой, реализующей контракт.
контракт Печатаемый
    функция напечатать(): текст;
конец

структура Кот : Печатаемый
    функция напечатать(): текст
        вернуть "Мяу";
    конец
конец

структура Собака : Печатаемый
    функция напечатать(): текст
        вернуть "Гав";
    конец
конец

функция озвучить(Печатаемый существо): целое
    вывести(существо.напечатать());
    вернуть 0;
конец

функция главная(): целое
    Кот кот = Кот();
    Собака пёс = Собака();

    озвучить(кот);   // выведет "Мяу"
    озвучить(пёс);   // выведет "Гав" — та же функция, другая реализация

    вернуть 0;
конец

Как запустить

Сохраните код в файл, например полиморфизм.код, и выполните:

запустить полиморфизм.код

Как это работает

  • контракт описывает, что должна уметь структура, но не как.
  • структура Кот : Печатаемый обещает выполнить контракт, и компилятор проверяет это.
  • Функция озвучить принимает любой Печатаемый: вызов существо.напечатать() выбирает нужную реализацию во время работы программы.

Исходник лежит в репозитории: examples/полиморфизм.код.