sicp.io
2.1.1 · Барьеры абстракции

Интерфейс вместо представления данных

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

Вопрос для размышления

От каких изменений защищает барьер абстракции?

  • Отделение абстрактного значения от его представления
  • Использование конструкторов и селекторов как единственной границы
  • Распознавание кода, проникающего за барьер абстракции

make-rat создает значение рационального числа. numer и denom выбирают его части. add-rat зависит от этих трех операций, а не от car, cdr или порядка хранения полей в паре.

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

Код SICP346 из 1,048,576 байт UTF-8
Примеры
Результат
Вывод
Значение
Диагностика
Трасса выполнения0 / 0 событий
    Запуски происходят внутри браузера с отображением результата программы и трассы выполнения.
    Ожидаемый результат

    Первая программа возвращает точное значение рационального числа 5/6.

    На что обратить внимание в трассе

    Проследите за вызовами make-rat, numer и denom. add-rat не требует прямых операций над парами, поэтому процесс вычисления не раскрывает порядок хранения. Трасса выполнения точно фиксирует прохождение барьера абстракции в выбранном запуске.

    Попробуйте сами

    Измените программу и сравните результат.

    Сохраните знаменатель первым в make-rat. Измените только numer и denom, затем убедитесь, что add-rat по-прежнему возвращает 5/6.

    Показать подсказку

    Если приходится изменять add-rat, значит, знание о представлении вышло за пределы установленной границы.

    Завершить этот урок

    В этой главе пройдено 0 из 20 уроков0%