문제

개방/폐쇄적 원리 소프트웨어 엔(클래스 모듈,etc.) 에 대해 열려 있어야 하 확장,하지만 닫을 위해 수정할 수 있습니다.이것은 무엇을 의미,그리고 왜 그것의 중요한 원칙은 좋은 객체 지향적 디자인은?

도움이 되었습니까?

해결책

특히,그것은"성배"의 디자인에서 OOP 의 엔티티 확장 가능한 충분한(을 통해 개인 디자인이나 참여를 통해서 아키텍처)을 지원하는 미래를 예상치 못한 변경없이 다시 쓰기 코드(그리고 때로는 심지 않고 다시 컴파일**).

이렇게 하기 위한 몇 가지 방법을 포함한 다형성/상속 구성,(Inversion of Control 니다.k.니다.DIP),측면을 지향 프로그래밍 패턴이 이러한 전략으로,방문자,템플릿 방법,그리고 많은 다른 원리,패턴,그리고 기술의 OOAD.

**볼 6"패키지 원칙", 담당자,CCP,CRP,ADP,SDP,SAP

다른 팁

그것이 의미하는 새로운드에 새로운 클래스 모듈이 있습니다.기존해야 하는 코드만 수정 버그 수정.새로운 클래스가 다시 사용할 수 있는 기존 코드를 통해 상속입니다.

개방/폐쇄 원칙적 위험을 완화할 때 새로운 기능이 있습니다.지 않기 때문에 기존 코드를 수정할 수 있으므로 안심하지 않을 깨진 것입니다.그것은 유지 보수 비용 절감하고 제품 안정성을 증가시킨다.

그 대답을 취약한 기본 클래스에 문제가 말하는 겉으로는 죄를 수정하는 기본 클래스할 수 있습하면 예기치 않은 결과가 발생하는 상속에 의존 이전 행동입니다.그래서 당신은 조심해야를 캡슐화하고 당신이 무엇을 원하지 않 의존도록 파생된 클래스에 순종하는 계약에 의해 정의된 기본 클래스입니다.면 상속자가 존재하는,당신 무엇을 조심에 변화를 기본 클래스입니다.

더 구체적으로 보다 ダベック,그것은 일반적으로 의미하기를 원하는 경우 추가 기능을 추가,변경 기능 클래스의 서브 클래스를 이용해서 만들어진을 변경하는 대신 원본입니다.이 방법을 사용하는 사람이 부모를 추가할 수 있습니다.에 대해 걱정할 필요가 없이 그것을 변경하다.기본적으로,그것은 모든 이전 버전 호환성.

다른 정말 중요한 원칙의 객체 지향적 디자인은 느슨한 연결 방법을 통해 인터페이스입니다.는 경우는 변경하고 싶으신에 영향을 미치지 않는 기존 인터페이스,그것은 정말이 매우 안전한 변경합니다.예를 들어 알고리즘을 더 효율적입니다.객체지향적 원리를 필요로 부드럽게 하여 일반적인 감각도)

소프트웨어 엔티티가 열려 있어야에 대한 확장자만 수정을 위해 폐쇄

는 것을 의미 클래스 또는 모듈을 작성해야하는 방식으로 사용할 수 있는,확장할 수 있지만,네정

나쁜 예에서 Javascript

var juiceTypes = ['Mango','Apple','Lemon'];
function juiceMaker(type){
    if(juiceTypes.indexOf(type)!=-1)
        console.log('Here is your juice, Have a nice day');
    else
        console.log('sorry, Error happned');
}

exports.makeJuice = juiceMaker;

지금 추가하려면 다른 주스 유형,당신은 모듈을 편집 자체에 의해 이 방법으로,우리는 깨 OCP.

좋은 예를 들어에서 Javascript

var juiceTypes = [];
function juiceMaker(type){
    if(juiceTypes.indexOf(type)!=-1)
        console.log('Here is your juice, Have a nice day');
    else
        console.log('sorry, Error happned');
}
function addType(typeName){
    if(juiceTypes.indexOf(typeName)==-1)
        juiceTypes.push(typeName);
}
function removeType(typeName){
  let index = juiceTypes.indexOf(typeName)
    if(index!==-1)
        juiceTypes.splice(index,1);
}

exports.makeJuice = juiceMaker;
exports.addType = addType;
exports.removeType = removeType;

지금 추가 할 수 있습니다,새로운 주스 형태에서 외부 모듈없이 편집 동일한 모듈이다.

원칙 의미는 그것을 쉽게 새로운 추가 기능을 변경하지 않고도 기존,안정적이고,테스트 기능,시간과 비용을 모두 절감하도록 지원.

주,polymorhism,예를 들어 인터페이스를 사용하여,도구는 이를 달성하기 위해.

추가에 대한 엄지손가락의 규칙을 따르는 OCP 은 기본 클래스에 추상적으로 존경하는 기능을 제공하여 파생됩니다.또는 스코트 마이어스'라고 비프 클래스 추상'.

이 갖는 의미하지 않은 채 방법에서는 기본 클래스고만 이러한 방법을 구현 클래스에서는 자신이 없 서브 클래스입니다.클라이언트의 기본 클래스에 의지할 수 없는 특정 구현을 기본 클래스에 이후가 존재하지 않는다는 사실입니다.

고 싶다는 것을 강조한"개방/폐쇄"도는 물론에서 유용한 객체 지향 프로그래밍,건강 방법을 사용의 모든 측면에서 개발.예를 들어,내 자신의 경험에서 그것은 좋은 진통제를 사용하여"개방/폐쇄"가능한 한 많이 일할 때 일반 C.

/로버트

이 의미는 OO 소프트웨어에 내장되어야에,하지만 변하지 않는 본질적으로.기 때문에 이것은 좋은 신뢰성 보장,예측 가능한 성능을 기본 클래스입니다.

나는 최근에 주어 추가적인 아이디어의 것 이 원리를 수반한다:는 오픈 폐쇄 원칙에 대해 설명합에서 한 번의 방법을 쓰는 코드뿐만 아니라,최종 결과를 쓰는 코드에서 탄력있는 방법입니다.

제가 생각하는 개방/폐쇄에 분할 두 밀접하게 관련부품:

  • 코드 오픈 을 변경할 수 있습을 변경하거나 그 동작을 올바르게 핸들이 그 입력하거나,필요 최소한 수정을 제공하는 새로운 시나리오에서 사용할 수 있습니다.
  • 코드 에 대한 수정이 필요하지 않지만 많은 경우 모든 인간의 개입을 처리하는 새로운 시나리오에서 사용할 수 있습니다.필요 단순히 존재하지 않습니다.

따라서,코드는 전시를 열기/닫히 동작(또는,당신이 선호하는 경우,을 충족하고 열기/닫 원칙)에 필요한 최소한의 없거나 수정에 응하여 사용 시나리오를 넘어 무엇이었습니다.

로 구현하는가?내가 찾는 일반적으로 명시된 해석,"개방/폐쇄를 참조 코드는 다형성!"야에서 최고 불완전한 문입니다.다형성 코드에서 하나의 도구가 이를 달성하기 위해 일종의 행동;기업 구현에 정말 모든 객체 지향적 디자인 원칙은 필요한 코드를 작성하는 탄력에서 방법을 암시하여 이 원칙으로 합니다.

에서 설계 원리,SOLID–"O"에서"솔리드는"약한 열기/닫히 원칙으로 합니다.

을 열고 닫히는 원칙은 디자인 원칙을 말한다 클래스 모듈 및 기능 확장을위한 열려 있어야 하지만 닫을 위해 수정할 수 있습니다.

이 원리는 디자인과 작가들의 코드가 수행되어야에서는 새로운 기능을 추가해야 최소한의 변화에서 기존의 코드(테스트 코드).디자인해야에서 수행을 허용하는 방식으로 추가하는 새로운 기능의 새로운 클래스가 유지,가능한 한 많은 기존의 코드 변경되지 않습니다.

의 혜택을 열고 닫히는 디자인 원리:

  1. 응용 프로그램이 될 것입니다 더 강력하기 때문에 우리는 변하지 않고 이미 테스트 클래스입니다.
  2. 유기 때문에 우리가 쉽게 적용할 수 있습니다 새로운 요구 사항입니다.
  3. 을 테스트하기 쉽고 덜 오류가 발생하기 쉽습니다.

내 블로그 포스팅에 이:

http://javaexplorer03.blogspot.in/2016/12/open-closed-design-principle.html

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top