Контракты: Кот и Собака
Одна функция работает с любым объектом, который умеет «напечатать».
Код
// Пример: контракты и настоящий полиморфизм (динамический диспетчинг).
// Одна и та же функция работает с любой структурой, реализующей контракт.
контракт Печатаемый
функция напечатать(): текст;
конец
структура Кот : Печатаемый
функция напечатать(): текст
вернуть "Мяу";
конец
конец
структура Собака : Печатаемый
функция напечатать(): текст
вернуть "Гав";
конец
конец
функция озвучить(Печатаемый существо): целое
вывести(существо.напечатать());
вернуть 0;
конец
функция главная(): целое
Кот кот = Кот();
Собака пёс = Собака();
озвучить(кот); // выведет "Мяу"
озвучить(пёс); // выведет "Гав" — та же функция, другая реализация
вернуть 0;
конец
Как запустить
Сохраните код в файл, например полиморфизм.код, и выполните:
запустить полиморфизм.код
Как это работает
контрактописывает, что должна уметь структура, но не как.структура Кот : Печатаемыйобещает выполнить контракт, и компилятор проверяет это.- Функция
озвучитьпринимает любойПечатаемый: вызовсущество.напечатать()выбирает нужную реализацию во время работы программы.
Исходник лежит в репозитории: examples/полиморфизм.код.