2017-11-24 4 views
3

의 전제 조건/사후 조건에 대한 규칙, 삼촌 밥 언급 : 서브 타입의 인스턴스 객체의 메소드의 전제 조건/사후 조건이보다 강한/각각 약한 경우그의 <a href="http://www.labri.fr/perso/clement/enseignements/ao/LSP.pdf" rel="nofollow noreferrer">paper</a> LSP에 대한 파생 상품

Now the rule for the preconditions and postconditions for derivatives, as stated by Meyer, is: 
...when redefining a routine [in a derivative], you may only replace its 
precondition by a weaker one, and its postcondition by a stronger one. 

어떻게 내가 말할 수있는 수퍼 타입의 메소드 중?

답변

1

엄격한 정의하지 않고 그것을 공식화하려면 : 부모 클래스 뭔가를 필요로하는 경우

, 아이가 같은 기능을 제공해야한다 - 적어도. 루틴이 0보다 큰 모든 입력을 처리 할 것을 약속하면 파생 된 루틴은 모든 입력 또는 더 많은 입력을 받아 들여야합니다. 즉, 전제 조건이 약할 수 있음을 의미합니다.

마찬가지로, 사후 조건은 더 강해야합니다. 즉 원래 루틴이 항상 양수를 반환한다고 약속하면 파생 루틴에서 음수를 반환 할 수 없습니다.

부모님이 요구하는 것보다 많은 것을 요구한다면 (즉, 전제 조건이 더 강한 경우) 그 루틴을 항상 호출 할 수 있는지 확신 할 수 없습니다. B와 C가 A의 서브 클래스라고 가정 해 봅시다. A 타입의 Object를 가질 수도 있습니다. 실제로 B 나 C가 될 수도 있습니다. C보다 A의 전제 조건이 강하면 루틴 호출시 문제가 발생할 수 있습니다 그 개체에.

일반적인 용어를 사용하지 않으면 죄송합니다. 실제로 그 사실을 기억할 수 없으므로 나에게 의미가있는 부분을 고집하려고했습니다. (버틀 랜드 마이어 (Bertrand Meyer) 강의 마지막 강연 이후 2 년이 지났음)

관련 문제