Rich의 교체 원칙 인 OCP는 OO의 높은 원칙 인 OCP는 설계의 정적 구조를 동적 구조로 변경하여 설계의 인클로저를 유지하기 위해 "추상화"및 "다형성"의 사용을 옹호합니다. "Abstract"는 언어가 제공하는 기능입니다. "다형성"은 상속 된 의미론에 의해 구현됩니다.
Richter 교체 원칙에는 다음 4 가지 의미가 포함됩니다.
이제 우리는 위의 네 가지 의미를 설명 할 수 있습니다.
서브 클래스는 상위 클래스의 추상적 인 방법을 구현할 수 있지만 부모 클래스의 비 임금 방법을 무시할 수는 없습니다.
시스템을 설계 할 때는 종종 인터페이스 또는 추상 클래스를 설계 한 다음 하위 클래스가 추상 방법을 구현합니다. Richter 교체 원리는 실제로 여기에 사용됩니다. 서브 클래스가 상위 클래스의 추상 방법을 구현할 수 있다는 것을 이해하기 쉽습니다. 실제로, 서브 클래스는 빈 메소드를 작성하더라도 상위 클래스의 추상 방법을 완전히 구현해야합니다. 그렇지 않으면 오류를 컴파일하고보고합니다.
Richter 대체 원칙의 핵심 요점은 부모 클래스의 비 임금 방법을 다룰 수 없다는 것입니다. 부모 클래스에서 잘 구현 된 모든 방법은 실제로 일련의 사양 및 계약을 설정하고 있습니다. 모든 서브 클래스가 이러한 사양을 준수하도록 강요하지는 않지만, 서브 클래스가 이러한 비 교정 방법을 임의로 수정하면 전체 상속 시스템을 손상시킵니다. Lizur 교체의 원리는이 의미를 표현합니다.
객체 지향 디자인 아이디어 에서이 기능을 상속하면 시스템 설계에 큰 편리함이 있지만 그로 인한 위험도 있습니다. 다음 예제는 상속의 위험을 설명하는 데 사용됩니다. 우리는 두 숫자를 빼는 기능을 완료해야하며 클래스 A가 책임을집니다.
클래스 A {public int func1 (int a, int b) {return ab; }} public class client {public static void main (String [] args) {a a = new a (); System.out.println ( "100-50 ="+a.func1 (100, 50)); System.out.println ( "100-80 ="+A.Func1 (100, 80)); }} 실행 결과 :
100-50 = 50100-80 = 20
나중에 새로운 기능을 추가해야합니다. 두 숫자를 추가 한 다음 100으로 합산하면 클래스 B가 책임을집니다. 즉, 클래스 B는 두 가지 기능을 완료해야합니다.
두 숫자는 빼냅니다.
두 개의 숫자를 추가 한 다음 100을 추가하십시오.
클래스 A가 첫 번째 함수를 구현 했으므로 클래스 B가 클래스 A를 상속 한 후 두 번째 함수 만 완료하면됩니다. 코드는 다음과 같습니다.
클래스 B는 {public int func1 (int a, int b) {return a+b; } public int func2 (int a, int b) {return func1 (a, b) +100; }} public class client {public static void main (String [] args) {b b = new b (); System.out.println ( "100-50 ="+B.func1 (100, 50)); System.out.println ( "100-80 ="+B.func1 (100, 80)); System.out.println ( "100+20+100 ="+B.func2 (100, 20)); }} 클래스 B가 완료되면 실행 결과가 있습니다.
100-50 = 150100-80 = 180100+20+100 = 220
우리는 원래 실행중인 뺄셈 함수가 정상적으로 오류가 있음을 발견했습니다. 그 이유는 클래스 B가 메소드를 지명 할 때 실수로 상위 클래스의 메소드를 다시 작성하여 뺄셈 함수를 실행하는 모든 코드가 클래스 B의 재 작성 방법을 호출하여 원래 정상 함수에서 오류를 유발하기 때문입니다. 이 예에서, 기본 클래스 A에 의해 완료되고 서브 클래스 B로 변경된 함수를 참조한 후, 예외가 발생했습니다. 실제 프로그래밍에서는 종종 상위 클래스 방법을 다시 작성하여 새로운 기능을 완료합니다. 쓰기는 간단하지만, 전체 상속 시스템의 재사용 성은 특히 다형성이 더 자주 사용될 때 프로그램 작동 오류의 확률이 매우 높습니다. 부모 클래스 방법을 다시 작성 해야하는 경우, 더 일반적인 접근 방식은 다음과 같습니다. 원래의 부모 클래스와 아동 클래스는보다 인기있는 기본 클래스를 상속하고 원래 상속 관계를 제거하며 의존성, 집계, 조합 및 기타 관계를 사용합니다.