Наследование или композиция в объектно-ориентированном дизайне

Я видел много диаграмм классов на популярных веб-сайтах и ​​курсах дизайна, определяющих отношения с помощью композиции, например: у администратора есть экземпляр человека У судьи есть экземпляр человека

По моему мнению, разве это не должно быть в случае наследования, поскольку админ «является» человеком, а судья - «человеком». Администратор продлевает человека. Судья продлевает человека.

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


person Shilpi Gupta    schedule 02.03.2021    source источник


Ответы (1)


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

Я считаю, что этому есть две причины.

  • Вы можете использовать только один класс для расширения, поэтому у вас будет больше возможностей для использования в композиции позже.

  • Принцип инкапсуляции. Вы хотите как можно больше инкапсулировать данные. Вы не хотите, чтобы класс Umpire наследовал от Person только ради доступа к атрибутам Person. Наследование обычно подразумевает, что вы хотите переопределить метод для использования полиморфизма и различного поведения для разных подклассов. Если вы хотите получить доступ к данным класса, вы обычно делаете это с помощью ассоциации или, если вам нужны постоянные данные, вы используете композицию.

Вот почему вы используете композицию, когда говорите о классах Umpire и Admin, поскольку они не меняют поведения класса Person, даже если существует заметная связь «есть-а».

person Arya Parvizi    schedule 03.03.2021