Каков наилучший способ поделиться общими свойствами в нескольких классах? - PullRequest
0 голосов
/ 14 января 2020

Каков наилучший способ совместного использования общих свойств в нескольких классах?

Например:

Class A
{
int a;
int b;
int c;
}

Class B
{
int a;
int b;
int d;
}

Поскольку свойства a и b в этом примере дублируются, Какой будет лучший способ поделиться этими свойствами?

Цель состоит в том, чтобы максимально использовать код. Правильно ли использовать наследование для простого обмена данными?

1 Ответ

2 голосов
/ 15 января 2020

Обычный способ обмена свойствами и поведением (методами / операциями) между классами заключается в использовании наследования :

Class X {    // Common base
   int a; 
   int b;
}
Class A:X {  // One specialization 
   int c; 
}
Class B:X {  // Another specialization
   int d; 
}

Это облегчает повторное использование, поскольку вы можете повторно использовать реализацию X в разных контекстах.

Но использование наследования - это не просто совместное использование некоторых элементов: наследование также определяет отношение генарализации / специализации: A - это особый вид X. Это означает, что можно надеяться, что при использовании X A может быть использованы также. Кроме того, это определенное отношение: A ВСЕГДА X.

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

Class X {    // Some elements to be shared
   int a; 
   int b;
}
Class A  {  // Independent class  
   X x; 
   int c; 
}
Class B:X {  // Another independent class
   X x; 
   int d; 
}

Каждый A и B будет иметь свойство x, которое содержит общие a и b. Преимущество состоит в том, что A и B не ограничивают интерфейс X импелмента. Кроме того, отношение является динамическим c (например, вы не можете определить x, или x может измениться). Кроме того, в зависимости от языка вы можете даже использовать один и тот же объект x между несколькими объектами A и B.

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