리스크소프 대체 원리
Liskov substitution principle![]() |
솔리드 |
---|
원칙 |
리스크노프 대체 원리(LSP)는 바바라 리스크노프가 1988년 회의 기조연설에서 데이터 추상화와 계층구조라는 제목으로 처음 소개한 강력한 행동 하위태핑이라고 불리는 서브타이핑 관계의 특별한 정의다.그것은 "대체 가능성"의 개념 – 객체(클래스 등)와 하위 객체(일등 클래스를 확장하는 클래스 등)는 프로그램을 깨지 않고 상호 교환할 수 있어야 한다는 객체 지향 프로그래밍의 원리에 기초한다.그것은 단순히 통사적 관계라기 보다는 의미론적 관계인데, 왜냐하면 그것은 계층 구조, 특히 객체 유형의 의미론적 상호운용성을 보장하고자 하기 때문이다.바바라 리스크노프와 장넷 윙은 1994년 논문에서 그 원리를 간결하게 다음과 같이 설명했다.[1]
하위 유형 요구 사항: ( ) 을(를) 유형 T의 x 에 대해 증명할 수 있는 속성이 되도록 하십시오.그런 다음 S 유형의 개체 에 대해 () 이(가) 참이어야 하며, 여기서 S는 T의 하위 유형이다.
같은 논문에서 리스크노프와 윙은 호아레 논리의 연장선에서 그들의 행동 하위 유형화에 대한 개념을 상세하게 설명했는데, 이는 하위 유형화와 전제조건, 위치 조건, 불변제와의 상호작용을 고려한다는 점에서 계약에 의한 베르트랑 마이어의 설계와 일정한 유사성을 지니고 있다.
원리
리스크노프의 행동적 하위타입의 개념은 객체에 대한 대체성의 개념을 정의한다. 즉, S가 T의 하위타입인 경우 프로그램의 바람직한 특성(예: 정확성)을 변경하지 않고 프로그램 내 T타입의 객체를 S타입의 객체로 대체할 수 있다.
행동 하위타입은 형식 이론에서 정의한 함수의 전형적인 하위타입보다 강한 개념으로, 매개변수 유형의 왜곡성과 반환 유형의 공분산에만 의존한다.행동 하위 타이핑은 일반적으로 이해할 수 없다: 만약 q가 "x항상 종료되는 방법"의 속성이라면, 프로그램(예: 컴파일러)이 T의 일부 하위 타입 S에 대해 그것이 참인지 확인하는 것은 불가능하다.그럼에도 불구하고, 이 원칙은 계급 계층 구조 설계에 대한 추론에 유용하다.
Liskov 대체 원칙은 새로운 객체 지향 프로그래밍 언어로 채택된 서명에 대해 몇 가지 표준 요건을 부과한다(일반적으로 유형이 아닌 클래스 수준에서, 구별은 명목 대 구조 하위 유형 참조).
- 하위 유형에서 메서드 매개 변수 유형의 편차.
- 하위 유형에서 메서드 반환 유형의 공분산.
- 새로운 예외는 슈퍼타입의 방법에 의해 던져지는 예외의 하위 유형인 경우를 제외하고, 서브타입의 메서드에 의해 제기될 수 없다.
서명 요건 외에, 하위 유형은 여러 행동 조건을 충족해야 한다.이러한 사항은 계약 방법론에 의한 설계와 유사한 용어로 상세하게 설명되어 있어 계약이 상속에 어떻게 상호작용할 수 있는지에 대한 일부 제약이 따른다.
- 하위 유형에서는 전제 조건을 강화할 수 없다.
- 아형에서 자세는 약화될 수 없다.
- 불변성은 반드시 서브타입에 보존해야 한다.
- 역사의 제약("역사 법칙")사물은 그 방법(삽입)을 통해서만 수정이 가능한 것으로 간주된다.서브타입은 슈퍼타입에 존재하지 않는 방법을 도입할 수 있기 때문에, 이러한 방법을 도입하면 슈퍼타입에서는 허용되지 않는 서브타입의 상태변화를 허용할 수 있다.역사상의 제약은 이것을 금지한다.리스크노프와 윙이 소개한 소설적 요소였다.이 제약조건의 위반은 변이 가능한 점을 불변한 점의 하위 유형으로 정의함으로써 예시할 수 있다.이것은 역사 제약의 위반으로, 불변의 점의 역사에서 국가는 창조 후 항상 같기 때문에 일반적으로 변이 가능한 점의 역사를 포함할 수 없기 때문이다.그러나 하위유형에 추가된 필드는 슈퍼유형 방법을 통해 관측할 수 없기 때문에 안전하게 수정할 수 있다.따라서 불변의 중심과 변이 가능한 반지름을 가진 원을 역사의 제약을 위반하지 않고 불변의 점의 하위 유형으로 정의할 수 있다.
오리진스
사전 조건과 사후 조건에 관한 규칙은 베르트랑 마이어가 1988년 저서 '객체 지향 소프트웨어 건설'에서 소개한 규칙과 동일하다.Meyer와 후에 행동 하위 타이핑이라는 용어를 처음 사용한 Pierre America는 어떤 행동 하위 타이핑 개념에 대한 증명-이론적 정의를 내렸지만, 그들의 정의는 참조나 포인터를 지원하는 프로그래밍 언어에서 일어날 수 있는 앨리어싱을 고려하지 않았다.앨리어싱을 고려한 것은 리스크노프와 윙(1994년)이 만든 주요 개선사항이었으며, 그 핵심요소는 역사 제약이다.마이어와 미국의 정의에 따르면, 변이 가능한 지점은 불변한 지점의 행동적 하위 유형인 반면, 리스크노프 대체 원칙은 이것을 금지한다.
비판
널리 사용되나, 초유형 객체에 아유형 객체를 대체할 수 있는 능력으로서의 행동적 서브타이핑의 특성화에 결함이[citation needed] 있다고 한다.사양에 대해서는 언급하지 않기 때문에, 슈퍼타입의 구현을 서브타입의 구현과 비교하는 잘못된 판독을 유도한다.이것은 여러 가지 이유로 문제가 있는데, 하나는 슈퍼타입이 추상적이고 실행이 없는 일반적인 경우를 지원하지 않기 때문이다.또한, 보다 미묘하게, 객체 지향 명령 프로그래밍의 맥락에서, 주어진 유형의 물체에 대해 보편적으로 또는 실존적으로 수량화하거나, 한 물체를 다른 물체로 대체하는 것이 무엇을 의미하는지를 정확하게 정의하기는 어렵다.[2]서브타이핑을 적용할 때 일반적으로 우리는 슈퍼타입 객체에 서브타입 객체를 대체하지 않고 단순히 슈퍼타입 객체로 서브타입 객체를 사용하고 있다.즉, 같은 물체, 즉 서브타입 물체로서 역시 슈퍼타입 물체라는 것이다.
리스크노프 자신은 2016년 인터뷰에서 기조연설에서 제시했던 것이 '비공식 규칙'이었고, 이후 제넷 윙이 '이것이 무엇을 의미하는지를 정확히 파악하려고 노력하라'고 제안해 '행동적 서브타이핑'에 대한 공동출판을[1] 이끌어냈고, 실제로 '기술적으로 '행동적 서브타이핑'이라고 불린다'[3]고 설명했다.인터뷰 동안, 그녀는 개념을 논하기 위해 대체 용어를 사용하지 않는다.
참고 항목
참조
- ^ a b Liskov, Barbara; Wing, Jeannette (1994-11-01). "A behavioral notion of subtyping". ACM Transactions on Programming Languages and Systems. 16 (6): 1811–41. doi:10.1145/197320.197383. S2CID 999172.
- ^ Leavens, Gary T.; Naumann, David A. (August 2015). "Behavioral subtyping, specification inheritance, and modular reasoning". ACM Transactions on Programming Languages and Systems. 37 (4): 1–88. doi:10.1145/2766446. S2CID 1379166.
- ^ van Vleck, Tom (April 20, 2016). Interview with Barbara Liskov. ACM. Archived from the original on 2021-12-12.
참고 문헌 목록
특정 참조
- Liskov, B. (May 1988). "Keynote address — data abstraction and hierarchy". ACM SIGPLAN Notices. 23 (5): 17–34. doi:10.1145/62139.62141. 리스크노프가 처음으로 원칙을 공식화한 기조 연설.
- Meyer, B. (1988). Object-oriented Software Construction. Prentice Hall. ISBN 0-13-629031-0.
일반참조
- 리벤스, 게리 T.;Dhara, 크리슈나 K.(2000년)."행동 Subtyping의 개념과 그들의 확장의 Component-Bases 시스템에 Sketch".리벤스, 게리 T.;Sitaraman, 무라리(eds.)에서.컴포넌트 기반 시스템의 기초.캠브리지 대학 출판부.아이 에스비엔 0-521-77164-1.이 종이 조사 행동 subtyping의 Liskov과 Wing's을 포함한 다양한 개념.
- Liskov, B. H.; Wing, J. M. (November 1994). A behavioral notion of subtyping. ACM Trans. Program. Lang. Syst. Vol. 16, no. 6. pp. 1811–41. doi:10.1145/197320.197383.
다음과 같은 업데이트된 버전이 나타났다.Liskov, Barbara; Wing, Jeannette (July 1999). Behavioral Subtyping Using Invariants and Constraints (Technical report). Carnegie Mellon University. CMU-CS-99-156. 그 원칙의 저자에 의한 공식화. - Plösch, Reinhold (2004). Contracts, scenarios and prototypes: an integrated approach to high quality software. Springer. ISBN 3-540-43486-0. 제2장에서 다양한 형태의 행동 하위 유형에 대한 보다 온화한 소개를 포함한다.
- Martin, Robert C. (March 1996). "The Liskov Substitution Principle" (PDF). C++ Report. Archived from the original (PDF) on 2015-11-28. LSP 위반의 여러 예를 보여주는 객체 지향 프로그래밍 커뮤니티에서 인기 있는 기사.
- Majorinc, 카지미르."Ellipse-Circle 딜레마와 인버스 상속".전 장관 98,20국제 회의 정보 기술의 인터페이스, 풀라, 1998년의 논문집.정보 기술 인터페이스, 2009년.Iti 2009년.그 Iti 2009년31St 국제 회의에 논문집.를 대신하여 서명함. 627–632.ISSN 1330-1012.온라인 컴퓨터 도서관 센터 894960131.이 논문은 언급한 맥락에서 신경을 덜 쓰는 사람에 대해 논한다.
외부 링크
- Norvell, T.S. (2003). "The Liskov Substitution Principle" (PDF).
- 리스코프 대체 원리 설명
- 솔리드 클래스 설계:리스코프 대체 원리
- LSP: 리스코프 대체 원리