Как избежать дублирования свойства во вложенной структуре классов? - PullRequest
1 голос
/ 22 апреля 2020

Например, у меня есть следующая структура класса:

Animal
---Cat
------property: CatCollar (boolean)
---Dog
------BigDog
------TinyDog
---------property: CatCollar (boolean)

У меня есть одно и то же свойство CatCollar в классе Cat и в классе TinyDog, но это свойство не должно быть в классе BigDog. Мой рецензент говорит мне, что это плохая структура, поскольку она приводит к дублированию. Я не могу изменить структуру классов, но я могу только изменить это свойство (местоположение и другие манипуляции). Может быть, есть некоторые OOP инструменты, которые позволяют вам это сделать? Можно ли как-то избежать дублирования свойства? Если да, то как?

1 Ответ

1 голос
/ 22 апреля 2020

В объектной ориентации не имеет значения, какие «данные» (то есть частное состояние) есть у каждого объекта. Имеет значение только то, какое поведение они предоставляют, даже в дереве наследования.

Итак, если под "свойством" вы подразумеваете состояние c публикации или частное состояние, доступное через публикацию c getter, вы уже в определенной степени оставили объектную ориентацию. Обсуждая, что правильно с точки зрения oop уже спорно.

1006 * Если вы имеете в виду, что в качестве частного государства, с некоторым потенциалом поведения совместно, то вам, возможно, потребуется делегация . То есть и Cat, и TinyDog реализуют некоторый интерфейс, описывающий желаемое поведение, а затем реализуют его в некотором классе, который оба делегируют (то есть содержат). К сожалению, это не поддерживается изначально в Java (например, в Kotlin), поэтому ему нужен некоторый шаблон.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...