Писать для других - PullRequest
7 голосов
/ 11 июня 2010

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

Ответы [ 4 ]

11 голосов
/ 11 июня 2010

Основное правило: Сделать интерфейсы простыми в использовании, правильными и трудными для неправильного использования . Это из третьего издания превосходной книги Скотта Мейерса Эффективный C ++ .

Здесь - несколько более хороших рекомендаций для дизайна класса.

7 голосов
/ 11 июня 2010

Правила:

  1. Не.По возможности избегайте использования наследования.

  2. В классе должна быть хотя бы одна виртуальная функция.в частности, деструктор должен быть виртуальным.

  3. Класс, вероятно, должен быть абстрактным.

2 голосов
/ 11 июня 2010

SOLID ...

S    SRP    Single responsibility principle, the notion that an object
            should have only a single responsibility.
O    OCP    Open/closed principle, the notion that “software … should
            be open for extension, but closed for modification”.
L    LSP    Liskov substitution principle, see also design by contract.
I    ISP    Interface segregation principle, the notion that “many client
            specific interfaces are better than one general purpose interface.”
D    DIP    Dependency inversion principle, the notion that one should
            “Depend upon Abstractions. Do not depend upon concretions.”
            Dependency injection is one method of following this principle.

взято из http://en.wikipedia.org/wiki/Solid_%28object-oriented_design%29

(или какова аббревиатура вашего вкуса месяца;)

НТН

Andy

1 голос
/ 11 июня 2010

Я пришел из Java, поэтому правила наследования немного отличаются, но вот моя точка зрения:

  1. Не бойся наследства. Большинство языков имеют его в той или иной форме, это очень мощная парадигма, и она остается трудной, если вы ее не используете.
  2. Не думайте, что вы знаете, как будущие разработчики будут использовать ваши классы позже. Я не могу начать считать, сколько раз мне приходилось копировать весь класс только потому, что какой-то метод или член был закрытым. Это «О» в ответе Энди выше - и это ОГРОМНОЕ замечание.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...