Должен ли я использовать API / ABC при разработке класса, используемого несколькими в C ++? - PullRequest
1 голос
/ 26 июля 2010

Я собираюсь добавить класс X, который будет использоваться моими тремя ранее спроектированными классами (A, B и C).

Новый класс X будет содержать данные и функции для новых функций, а также предоставлять услуги классам, которые используют его для скрытия нижних уровней.Проблема в том, что A, B и C будут использовать класс X совершенно по-разному, то есть использовать разные его функции.

Мой вопрос заключается в том, должен ли я предоставить API (или абстрактный базовый класс в C ++) для нового класса X или нет.Если я должен, должен ли этот API быть для класса X или для классов A, B и C?Я где-то читал, что API иногда более тесно связан с этим вызывающим, чем класс, который его реализует.Если я предоставлю один API для каждого абонента, API будет содержать только те функции, которые необходимы конкретному абоненту.

Или я должен просто создать нормальный класс C ++ и позволить вызывающим использовать подмножество открытых функций X в каждом из A, B и C, хотя они «технически» могут использовать их все?Функции класса X вряд ли изменятся, как и необходимость создания класса, аналогичного X.

Если я не совсем потерялся в объектно-ориентированном программировании, одна из причин предоставления интерфейса / API длякласс - это тот код, который использует интерфейс / API, не нужно изменять, если вы добавляете другой подкласс, так как вызывающая сторона работает с именем интерфейса и использует динамическое связывание для разрешения правильного типа подкласса.

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

Спасибо,

Томас

Ответы [ 2 ]

1 голос
/ 26 июля 2010

Вы уверены, что все эти функции принадлежат одному и тому же классу X?Подумайте о разделении разных функций на разные классы: http://en.wikipedia.org/wiki/Low-Coupling_/_High-Cohesion_pattern

Но, не зная, что такое функции X, трудно помочь дальше.

0 голосов
/ 26 июля 2010

Если что-то вряд ли изменится, то, вероятно, это не стоит дополнительных усилий.

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

...