OOP의 특정 실패는 Rectangle에서 상속되는 Square 클래스와 함께 표시됩니다. 여기서 논리적으로 Square는 Rectangle의 특수화이므로 Rectangle에서 상속해야하지만 Square의 길이나 너비를 변경하려고하면 모든 것이 분리됩니다.
그 사건에 무슨 문제가 있는지 설명하는 구체적인 용어가 있습니까?
OOP의 특정 실패는 Rectangle에서 상속되는 Square 클래스와 함께 표시됩니다. 여기서 논리적으로 Square는 Rectangle의 특수화이므로 Rectangle에서 상속해야하지만 Square의 길이나 너비를 변경하려고하면 모든 것이 분리됩니다.
그 사건에 무슨 문제가 있는지 설명하는 구체적인 용어가 있습니까?
답변:
Wikipedia는 단순히 그것을 원 타원 문제 라고 말합니다.
원 - 타원 문제 (때로는라는 소프트웨어 개발에 사각형 직사각형 문제 ) 객체 모델링에서 서브 타입 다형성을 사용할 때 발생할 수있는 함정의 숫자를 보여줍니다. 이 문제는 객체 지향 프로그래밍을 사용할 때 가장 일반적으로 발생합니다.
이것은 약어 SOLID 의 L로 Liskov 대체 원리 로 알려져 있습니다. 이 문제는 해당 원칙을 위반하여 발생합니다.
문제는 원과 타원을 나타내는 클래스 (또는 유사하게 사각형과 사각형) 사이에 어떤 하위 유형 또는 상속 관계가 있어야하는지에 관한 것입니다. 더 일반적으로, 문제는 기본 클래스에 파생 클래스에서 발견 된 (더 강한) 불변을 무효화하여 Liskov 대체 원칙을 위반하는 방식으로 객체를 변경하는 메소드를 포함 할 때 발생할 수있는 어려움을 보여줍니다.
나는 그것이 Liskov 대체 원칙을 위반한다고 생각할 것입니다 - Square
하위 클래스는 길이와 너비가 독립적이라는 불변성을 위반합니다.
Liskov 대체 원칙보다 더 근본적인 수준에서 이는 범주 오류 또는 범주 실수입니다.
모델링 동작 의 맥락 에서 사각형은 단순히 사각형의 유형이 아닙니다.
이것을 인식하면 초기 가정 (사각형은 사각형의 한 유형)이 재생에서 제거되므로 문제가 증발합니다.
이 답변의 문제는 학교 이후에 사각형이 사각형 유형이라는 기하학을 수행하는 모든 사람에게 드릴된다는 것입니다. 그러나 이것은 매우 구체적인 상황 (내부 각도의 특성에 따라 기하학적 모양의 분류) 내에서만 사실이라는 것을 이해하는 것이 중요합니다. 동작 측면에서 사각형은 사각형이 아닙니다. 잘못된 컨텍스트에서 분류 세트를 보는 것은 카테고리 실수입니다.