lsp 예제

항상 수행하는 것이 가능하거나 그렇지 않을 수도 있지만 하위 클래스가 중요한 코드 경로를 망치고 있지 않은지 확인하기 위해 내부 시스템 상태 확인의 의미에서 사후 상태 검사를 수행하는 것이 좋습니다. 나는 당신에게 예를 줄 수 있도록 하지만 실제로이 아이디어를 본 적이 없다. 나는 영어가 „비행”의 반대를 의미하는 단어를 가지고 있다고 생각하지 않지만, 셰익스피어가되어 위치를 채우기 위해 „비행”이라는 단어를 발명합시다. 위의 솔루션에서 새 기본 클래스는 비행 기능을 포함하지 않으며 FlightfulBird 하위 클래스는 해당 기능을 추가합니다. 이렇게 하면 일부 기능을 새 및 플라이풀버드 오브젝트에 적용할 수 있습니다. 예를 들어 드로잉을 예로 들 수 있습니다. 그러나 비행이 없는 새 오브젝트는 FlightfulBird 오브젝트를 가져가는 함수에 밀어넣을 수 없습니다. 이 문서에서는 Java의 몇 가지 예와 함께 리스코프 대체 원칙을 설명합니다. 내가 몇 가지 중요한 점을 놓친 경우 의견 / 제안을 주시기 바랍니다. 아래 코드는 사각형이 있는 함수를 인수로 나타냅니다. 원칙에 따라 기본 클래스에 대한 참조를 사용하는 함수는 이를 알지 못해도 파생 클래스의 개체를 사용할 수 있어야 합니다. 따라서 아래 표시된 예제에서 함수 calculateArea는 „사각형”의 참조를 사용하여 Square와 같은 파생 클래스의 개체를 사용하고 사각형 정의에 의해 제기된 요구 사항을 충족할 수 있어야 합니다. Liskov 대체 원리에 이 논문을 살펴, 그것에 대 한 세부 정보를 많이 제공 하는.

LSP에 따라 기본 클래스에 대한 참조를 사용하는 함수는 이를 알지 못하고 파생 클래스의 개체를 사용할 수 있어야 합니다. 간단하게 말해 파생 클래스는 기본 클래스에 대한 대체 가능해야 합니다. LSP를 설명하기 위해 사각형과 사각형을 예로 들어 보겠습니다. 하나는 ISA 관계를 설정하는 경향이있다, 따라서, 당신은 사각형 사각형이라고 말할 수 있습니다. 그러나 다음 코드 샘플에서 설명해야 하는 문제(따라서 LSP 위반)가 발생합니다. LSP를 자세히 이해하려면 아래 코드 그림을 살펴보십시오. 이것은 SOLID 원칙에 대한 세 번째 게시물입니다 – 당신이 그것을 놓친 경우 오픈 폐쇄 원칙을 확인하십시오. 여기서는 이 개념이 어떻게 형성되었는지에 대한 짧은 소개로 시작하여 설명적인 예제를 보여 줍니다 (사각형과 직사각형 없음, 약속합니다!). 이러한 문제에 대한 해결책은 올바른 상속 계층 구조이며, 우리의 경우 엔진이 있는 지 않고 운송 장치의 클래스를 차별화하여 문제를 해결할 것입니다.

자전거는 운송 장치이지만 엔진이 없습니다. 이 예에서 운송 장치에 대한 정의가 잘못되었습니다. 엔진이 없어야 합니다. LSP는 정사각형 및 사각형 예제를 사용하여 널리 설명됩니다. 스퀘어와 사각형 사이의 ISA 관계를 설정하려고 한다고 가정해 보겠습니다. 따라서 우리는 „사각형은 사각형입니다.”라고 부릅니다. 아래 코드는 관계를 나타냅니다. 문제를 일으키는 „is a” 기술의 전형적인 예는 원-elipse 문제(일명 사각형 사각형 문제)입니다. 그러나, 나는 펭귄을 사용할거야.

이 미묘한 위반은 종종 사용되는 콘크리트 객체의 차이를 구별 할 수있는 능력을 클라이언트를 부과한다. 예를 들어 첫 번째 계정의 계약을 감안할 때 상속은 이해하기 매우 간단한 개념입니다. 개체 또는 클래스가 다른 개체 또는 클래스를 기반으로 하는 경우입니다. 클래스가 다른 클래스에서 „상속”되는 경우 상속된 클래스(하위 클래스 또는 자식 클래스라고도 함)에는 수퍼 클래스(상위 클래스)의 모든 특성이 포함되지만 새 속성도 포함될 수 있음을 의미합니다.