Я не читал статью, но для начала я бы посоветовал прекратить акцентировать внимание на терминах «метод» и «интерфейс» в C ++. Эти термины популярны в строгих ОО-языках, таких как Java, но C ++ является более широким языком с несколькими парадигмами.
С учетом сказанного «добавление методов к интерфейсам» на самом деле просто добавляет больше виртуальных функций-членов в базовый класс. Изменение базового класса изменяет определение всех производных классов, и, следовательно, весь код, который требует полного типа любого производного класса или базового класса, должен быть перекомпилирован.
Типы C ++ не функция времени выполнения. Типы существуют только во время компиляции, и компилятор должен иметь полный доступ к определениям типов. (Опять же, в отличие от других языков!) Отношения интерфейс-реализация существуют исключительно во время компиляции и не могут быть «предварительно скомпилированы». Так что на самом деле не существует такой вещи, как «изменение интерфейса», которая бы вырабатывала модульность во время выполнения. Концепция «интерфейса» - это просто аккуратная мнемоника, которую вы можете использовать при разработке приложения, но она не спасает вас от перекомпиляции. Изменение определения класса изменяет внутреннее представление класса, и вы не можете (в общем) создать правильную программу на C ++, если все части программы не видят одинаковые определения класса.