Open Closed Principle은 Java 세계에서 가장 기본적인 디자인 원칙입니다. 안정적이고 유연한 시스템을 구축하는 방법을 안내합니다.
정의:
클래스, 모듈 및 기능과 같은 소프트웨어 엔티티는 확장에 개방되어야하며 수정으로 닫아야합니다.
클래스, 모듈 및 기능과 같은 소프트웨어 엔티티는 확장을 위해 열려 있어야하지만 수정을 위해 닫아야합니다.
개방 및 폐쇄 원칙의 의미는 소프트웨어 엔티티가 기존 코드를 수정하는 것이 아니라 확장을 통해 변경 사항을 달성해야한다는 것입니다.
소프트웨어 엔티티에는 다음 부분이 포함되어 있습니다.
개방 및 폐쇄의 원리는 소프트웨어 엔티티의 미래의 것들을 위해 공식화 된 현재 개발 설계에 대한 제약의 원칙입니다.
참고 : 개방 및 마감의 원리는 확장에 개방되어 있으며 폐쇄 수정은 수정이 없음을 의미하지는 않습니다. 저수준 모듈의 변경 사항은 높은 수준의 모듈과 결합되어야합니다. 그렇지 않으면 격리되고 의미없는 코드 스 니펫이됩니다.
변화의 유형 :
프로젝트의 기본 경로는 프로젝트 개발, 재구성, 테스트, 생산, 운영 및 유지 보수입니다. 재구성은 원래 설계 및 코드를 수정할 수 있으며 운영 및 유지 보수는 원래 코드의 수정을 최소화하고, 과거 코드의 순도를 유지하며, 시스템의 안정성을 향상시킬 수 있습니다.
개방 및 마감의 원리의 중요성 :
1. 개방 및 마감 원리가 테스트에 미치는 영향. 오프닝 및 마감 원리는 원래 테스트 코드를 여전히 정상적으로 실행하는 것입니다. 확장 코드 만 테스트하면됩니다.
2. 개방 및 폐쇄의 원리는 재사용 성을 향상시킬 수 있습니다. 객체 지향 설계에서 모든 논리는 클래스에서 독립적으로 비즈니스 논리를 구현하기보다는 원자 논리로 구성됩니다. 이런 식으로 만 코드를 재사용 할 수 있습니다. 세분성이 작을수록 재사용 가능성이 커집니다.
3. 개방 및 폐쇄 원칙은 유지 관리 가능성 객체 지향 개발의 요구 사항을 향상시킬 수 있습니다.
개방 및 마감 원리를 사용하는 방법 :
1. 추상 제약 조건을 먼저, 인터페이스 또는 추상 클래스 제약 조건을 통해 확장을 확장하고 인터페이스 또는 초록 클래스에 존재하지 않는 공개 메소드를 허용하지 않습니다.
둘째, 구현 클래스가 아닌 매개 변수 유형 및 참조 객체에 인터페이스 또는 초록 클래스를 사용하십시오.
셋째, 가능한 한 안정적으로 유지하려고 노력하면 결정되면 수정은 허용되지 않습니다.
2. 메타 데이터 제어 모듈 행동 메타 데이터는 환경과 데이터를 설명하는 데 사용되는 데이터입니다. 평신도의 용어로는 구성 매개 변수입니다. 파라미터는 파일 또는 데이터베이스에서 얻을 수 있습니다.
스프링 용기
3. 프로젝트 헌장 공식. 팀에서는 헌장이 모든 직원이 준수 해야하는 계약을 지정하기 때문에 프로젝트 헌장을 설립하는 것이 매우 중요합니다. 프로젝트의 경우 계약이 구성보다 낫습니다.
4. 포장 변경에는 두 가지 의미가 있습니다.
먼저 동일한 변경 사항을 인터페이스 또는 추상 클래스로 캡슐화합니다.
둘째, 다른 변화를 서로 다른 인터페이스 나 추상 클래스로 캡슐화하고 동일한 인터페이스 나 추상 클래스에 두 가지 다른 변경 사항이 없어야합니다.
예
예를 들어, 무엇보다도 나쁜 예입니다.
클래스 그래 핑디 도티 {public void drawshape (shape s) {if (s.m_type == 1) drawRectAngle (s); else if (s.m_type == 2) DrawCircle (S); } public void drawCircle (Circle R) {....} public void drawRectangle (사각형 R) {....}} 클래스 모양 {int m_type; } class Rectangle 확장 모양 {사각형 () {super.m_type = 1; }} Class Circle은 모양 {circle () {super.m_type = 2; }}모양을 확장하려면 먼저 그래 컬티 클래스를 이해 한 다음 DrawShape에 새 유형을 추가 한 다음 함수를 추가해야합니다. 개선 된 코드는 다음과 같습니다.
클래스 그래픽 {public void drawshape (shape s) {s.draw (); }} 클래스 모양 {Abstract void draw (); } class Rectangle Extends Shape {public void draw () {// 사각형 그리기}}}
드로잉 로직을 이해할 필요가없고 특정 구현을 서브 클래스에 넣습니다.
요약 :
1. 개방 및 마감 원리를 준수하면 소프트웨어의 확장 성과 유지가 향상 될 수 있습니다.
2. 대부분의 디자인 패턴과 디자인 원칙은 오프닝 및 마감 원리를 실현하는 것입니다.