소프트웨어 엔티티(클래스, 모듈, 함수 등)은 확장에 대해서는 열려 있어야 하지만 변경에 대해서는 닫혀 있어야 한다.
위의 그림처럼 창문과 기어가 수동이던 마티즈에서 창문과 기어가 자동인 쏘나타로 차종을 바꾸니 운전자의 행동에도 변화가 온다. 마티즈를 운전할 때 운전자는 마티즈 인스턴스의 기어수동조작() 메서드를 사용했는데 차종을 변경하자마자 쏘나타 인스턴스의 기어자동조작() 메서드를 사용하게 된다.
물론 현실세계에서는 어느 정도 자동차 조작법을 바꾸어야 되는게 사실이지만 객체 지향 세계에서는 운전자의 운전방법을 영향을 끼치지 않는 방법이 있다. (개방 패쇄 원칙)
JDBC가 대표적으로 개방패쇄 원칙의 예이다.
위의 그림을 보면서 알 수 있듯이 JDBC를 사용하는 클라이언트는 데이터베이스가 오라클에서 MYSQL로 바뀌더라도 connection을 설정하는 부분 외에는 별도의 수정이 필요없다.