Изменение интерфейса в C ++ - PullRequest
0 голосов
/ 09 декабря 2011

Я читаю статью о расширении интерфейса по следующей ссылке.

http://wiki.hsr.ch/APF/files/ExtensionInterface.pdf

Это было упомянуто здесь на странице 142

Со временем добавление этих запросов может привести к переполнению интерфейса функциональность не предусмотрена в первоначальном дизайне. Если новый методы добавляются в интерфейс "universalComponent" напрямую, все код клиента должен быть обновлен и перекомпилирован. Это утомительно и подверженные ошибки.

У меня вопрос (предположим, мы используем C ++ для разработки)

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

Спасибо!

Ответы [ 2 ]

2 голосов
/ 09 декабря 2011

Я не читал статью, но для начала я бы посоветовал прекратить акцентировать внимание на терминах «метод» и «интерфейс» в C ++. Эти термины популярны в строгих ОО-языках, таких как Java, но C ++ является более широким языком с несколькими парадигмами.

С учетом сказанного «добавление методов к интерфейсам» на самом деле просто добавляет больше виртуальных функций-членов в базовый класс. Изменение базового класса изменяет определение всех производных классов, и, следовательно, весь код, который требует полного типа любого производного класса или базового класса, должен быть перекомпилирован.

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

1 голос
/ 09 декабря 2011

Добавление метода к классу, участвующему в полиморфизме (означает, что у него есть хотя бы одна виртуальная функция-член), потенциально может изменить двоичное расположение объектов этого класса и его подклассов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...