«liskov-substitution» 태그된 질문

객체 지향 설계에서 Liskov 대체 원리에 대한 질문입니다.

10
이것이 Liskov 대체 원칙을 위반합니까?
Task 엔터티 목록과 ProjectTask하위 유형 이 있다고 가정 해보십시오 . ProjectTasks상태가 시작됨 인 경우 닫을 수없는 경우 를 제외하고 작업은 언제든지 닫을 수 있습니다 . UI는 시작을 닫는 옵션을 ProjectTask사용할 수 없도록해야 하지만 도메인에는 다음과 같은 보호 조치가 있습니다. public class Task { public Status Status { get; set; } …

8
LSP vs OCP / Liskov 교체 VS Open Close
나는 OOP의 SOLID 원칙을 이해하려고 노력하고 있으며 LSP와 OCP는 비슷한 점이 더 많다는 결론에 도달했습니다. 개방 / 폐쇄 원칙은 "소프트웨어 엔티티 (클래스, 모듈, 기능 등)는 확장을 위해 개방되어야하지만 수정을 위해 폐쇄되어야한다"고 명시하고 있습니다. 간단히 말해서 LSP는 Foo모든 인스턴스 Bar가 파생 된 인스턴스로 대체 될 수 있으며 Foo프로그램은 동일한 방식으로 작동 …

3
하위 클래스와 하위 유형의 차이점은 무엇입니까?
Liskov 대체 원리에 대한 이 질문 에 대한 최고 등급의 답변 은 하위 유형 과 하위 클래스 라는 용어를 구별하기 위해 고통을받습니다 . 또한 일부 언어는 두 언어를 혼동하는 반면 다른 언어는 그렇지 않다는 점을 지적합니다. 내가 가장 친숙한 객체 지향 언어 (Python, C ++)에서 "유형"과 "클래스"는 동의어 개념입니다. C …

14
클래스 계층 구조에서 객체 동작 또는 속성의 * 제거 *를 허용하는 언어 또는 디자인 패턴이 있습니까?
전통적인 클래스 계층 구조의 잘 알려진 단점은 실제 세계를 모델링 할 때 나쁘다는 것입니다. 예를 들어, 클래스로 동물의 종을 표현하려고합니다. 실제로 그렇게 할 때 몇 가지 문제가 있지만 해결책을 찾지 못한 것은 하위 클래스가 펭귄이 날 수없는 것처럼 수퍼 클래스에 정의 된 동작이나 속성을 "손실"할 때입니다. 아마도 더 좋은 예 …

9
Liskov 대체 원칙을 위반하면 무엇이 잘못 될 수 있습니까?
나는 Liskov 대체 원칙에 대한 위반 가능성에 대해이 매우 투표가 많은 질문 을 따랐습니다. 나는 Liskov 대체 원칙이 무엇인지 알고 있지만, 여전히 내 마음에 분명하지 않은 것은 개발자가 객체 지향 코드를 작성하는 동안 원칙에 대해 생각하지 않으면 잘못 될 수 있다는 것입니다.

5
폴 백이있는 특수 사례가 Liskov 대체 원칙을 위반합니까?
FooInterface다음과 같은 서명을 가진 인터페이스 가 있다고 가정 해 봅시다 . interface FooInterface { public function doSomething(SomethingInterface something); } 그리고 ConcreteFoo그 인터페이스를 구현 하는 구체적인 클래스 : class ConcreteFoo implements FooInterface { public function doSomething(SomethingInterface something) { } } ConcreteFoo::doSomething()특별한 유형의 SomethingInterface객체 가 전달되면 고유 한 작업을 수행 하고 싶습니다 …

3
전제 조건 강화와 후 조건 약화는 Liskov 대체 원칙을 어떻게 위반합니까?
나는 Liskov의 대체 원칙 이 다음과 같은 경우에 위반 된다는 것을 읽었습니다 . 전제 조건이 강화되거나 사후 조건이 약화 그러나 나는이 두 가지 점이 Liskov 대체 원칙을 어떻게 위반하는지 아직 완전히 알지 못합니다. 예를 들어 설명해 주시겠습니까? 구체적으로, 위의 조건 중 하나가 어떻게 서브 클래스 객체를 수퍼 클래스 객체로 대체 …

3
"사각이 사각형에서 상 속됨"역설에 대한 특정 이름이 있습니까?
OOP의 특정 실패는 Rectangle에서 상속되는 Square 클래스와 함께 표시됩니다. 여기서 논리적으로 Square는 Rectangle의 특수화이므로 Rectangle에서 상속해야하지만 Square의 길이나 너비를 변경하려고하면 모든 것이 분리됩니다. 그 사건에 무슨 문제가 있는지 설명하는 구체적인 용어가 있습니까?

3
국가 패턴이 Liskov 대체 원칙을 위반합니까?
이 이미지는 도메인 기반 디자인 및 패턴 적용 : C # 및 .NET의 예제 포함 이는 대한 클래스 다이어그램 주 패턴 A가 SalesOrder수명 시간 동안 여러 가지 상태를 가질 수 있습니다. 다른 상태 사이에는 특정 전환 만 허용됩니다. 이제 OrderState클래스는 abstract클래스이고 모든 메소드는 서브 클래스로 상속됩니다. Cancelled다른 상태로의 전이를 허용하지 …

1
Liskov 대체 원칙은 인터페이스를 구현하는 클래스에도 적용됩니까?
LSP는 클래스가 기본 클래스를 대체 할 수 있어야하는데 파생 클래스와 기본 클래스는 의미 적으로 동일해야합니다. 그러나 LSP는 인터페이스를 구현하는 클래스에도 적용됩니까? 다시 말해서, 클래스에 의해 구현 된 인터페이스 메소드 가 사용자가 예상 한 것과 의미 적으로 다른 경우, 이것이 LSP의 위반으로 간주됩니까?

2
실제 세계-Liskov 대체 원리
배경 : 메시징 프레임 워크를 개발 중입니다. 이 프레임 워크는 다음을 허용합니다. 서비스 버스를 통한 메시지 전송 메시지 버스의 대기열에 가입 메시지 버스의 주제 구독 현재 RabbitMQ를 사용하고 있지만 가까운 시일 내에 Microsoft Service Bus (Premise)로 전환 할 것입니다. ServiceBus로 이동할 때 클라이언트 코드 (예 : 게시자 또는 구독자)를 수정하지 …


1
상속 계층에서 Liskov 대체 원칙을 확인하는 방법은 무엇입니까?
이 답변에서 영감을 얻었습니다 . 리스 코프 치환 원칙은 필요 있음 하위 유형에서는 전제 조건을 강화할 수 없습니다. 하위 유형에서는 사후 조건을 약화시킬 수 없습니다. 상위 유형의 변형은 하위 유형으로 유지되어야합니다. 히스토리 제한 사항 ( "히스토리 규칙"). 객체는 그 방법 (캡슐화)을 통해서만 수정 가능한 것으로 간주됩니다. 서브 타입은 수퍼 타입에 …

2
LinkedList를 확장하는 스택. Liskov 대체 원칙 위반?
add_first (), add_last (), add_after (), remove_first (), remove_last () 및 remove ()와 같은 함수가있는 LinkedList 클래스가 있습니다. 이제 push (), pop (), peek () 또는 top ()과 같은 기능을 제공하는 클래스 스택이 있으며 이러한 메소드를 구현하기 위해 LinkedList 클래스 메소드를 확장합니다. 이것이 Liskov 대체 원칙을 위반합니까? 예를 들어, 링크 …

6
관계를 반대로해서 타원 문제를 해결할 수 있습니까?
갖는 Circle확장Ellipse 휴식에게 Liskov Substition 원리 즉, 당신은 X와 Y는 독립적으로 타원을 그리는 설정할 수 있지만 X는 항상 원 대한 Y와 동일해야합니다 : 그것은 사후 조건을 수정하기 때문에. 그러나 Circle이 타원의 하위 유형이 됨으로써 발생하는 문제가 아닌가? 우리는 관계를 되돌릴 수 없었습니까? 따라서 Circle은 수퍼 타입 setRadius입니다. 단일 방법이 있습니다. …

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.