좋은 상속 모델이 내리막 길에 코드가 있는데 왜 그리고 어떻게 수정 해야하는지 이해하려고합니다. 기본적으로 다음과 같은 Zoo 계층 구조가 있다고 가정하십시오.
class Animal
class Parrot : Animal
class Elephant : Animal
class Cow : Animal
기타
eat (), run () 등의 메소드가 있으며 모두 좋습니다. 언젠가 누군가가 와서 말하기를-우리의 CageBuilder 클래스는 너무 강력하고 벽을 산산조각 낼 수있는 새로운 아프리카 들소를 제외하고는 잘 작동하고 animal.weight () 및 animal.height ()를 사용합니다. Animal 클래스에 대한 하나 이상의 속성 인 isAfricanBizon ()을 선택하고 재료를 선택할 때이를 사용하고 AfricanBizon 클래스에 대해서만 재정의하십시오. 다음 사람이 와서 비슷한 일을하고 다음으로 당신은 기본 클래스에 대한 계층의 일부 하위 집합에 대해 이러한 모든 속성을 가지고 있음을 알고 있습니다.
그러한 코드를 개선 / 리팩터링하는 좋은 방법은 무엇입니까? 여기서 한 가지 대안은 dynamic_casts를 사용하여 유형을 확인하는 것이지만 발신자를 혼란스럽게 만들고 다른 곳에 if-then-else를 추가합니다. 여기에 더 구체적인 인터페이스를 가질 수는 있지만 기본 클래스 참조 만 있으면 도움이되지 않습니다. 다른 제안? 예?
감사!