더블 챈스 함수

Double-chance function

소프트웨어 엔지니어링에서 더블 챈스(double chance) 기능은 교차 플랫폼과 확장 가능한 개발에서 강력한 응용을 가진 소프트웨어 설계 패턴이다.

컴퓨터 그래픽스

다음 기능이 포함된 그래픽 API를 고려하십시오. DrawPoint, DrawLine그리고 DrawSquare는 것을 쉽게 알 수 있다. DrawLine 에 의해서만 실행될 수 있다. DrawPoint그리고 DrawSquare 에 대한 네 번의 호출을 통해 차례로 실행될 수 있다. DrawLine. 이 API를 새로운 아키텍처에 포팅하는 경우 세 가지 기능을 기본적으로 구현( 구현하는 데 시간이 더 걸리지만 결과적으로 코드가 더 빨라질 수 있음)하거나 쓰기를 선택할 수 있음 DrawPoint 위에서 설명한 다른 사항들을 공통의 교차 플랫폼 코드를 사용하여 기본적으로 구현하고 구현한다. 이 접근방식의 중요한 예는 X11 그래픽 시스템으로, 매우 적은 수의 장치 의존적 원시 요소들을 제공함으로써 새로운 그래픽 하드웨어에 포팅될 수 있으며, 하드웨어 독립 계층에 더 높은 수준의 기능을 남겨둘 수 있다.[1][2]

더블 챈스 함수는 그러한 구현을 만드는 최적의 방법이며, 포트의 초안에 의해 공통의 "빠른 시장 출시, 느리게 실행" 버전을 사용할 수 있다. DrawPoint 반면, 이후 버전은 "시장 출시 기간 단축, 실행 시간 단축"으로 수정될 수 있다. 더블 챈스 패턴 점수가 높은 경우, 기본 API에는 null 드라이버의 일부로 제공된 자체 지원 구현이 포함되며, 다른 모든 구현은 이를 확장한 것이다. 결과적으로, 첫 번째 포트는 실제로 사용 가능한 첫 번째 구현이다.

C++의 대표적인 구현은 다음과 같다.

 계급 CBaseGfxAPI {      가상의 공허하게 하다 드로포인트(인트로 x, 인트로 y) = 0; /* null 드라이버에 대한 추상 개념 */      가상의 공허하게 하다 그리기선(인트로 x1, 인트로 y1, 인트로 x2, 인트로 y2) { /* DrawPoint() 반복 */}      가상의 공허하게 하다 그리기제곱(인트로 x1, 인트로 y1, 인트로 x2, 인트로 y2) { /* 그리기선() 반복 */}  };   계급 COriginalGfxAPI : 공중의 CBaseGfxAPI {      가상의 공허하게 하다 드로포인트(인트로 x, 인트로 y) { /* 필요한 유일한 네이티브 호출 */ }      가상의 공허하게 하다 그리기선(인트로 x1, 인트로 y1, 인트로 x2, 인트로 y2) { /* 이 기능이 있는 경우 기본 그리기선                                                                 루틴이 사용될 것이다. 그렇지 않으면 베이스                                                                 구현 실행. */}  };   계급 CNewGfxAPI : 공중의 CBaseGfxAPI {      가상의 공허하게 하다 드로포인트(인트로 x, 인트로 y) { /* 네이티브 호출에 필요한 유일한 */ }  }; 

참고: CBaseGfxAPI::DrawPoint 어떤 그래픽 호출이 그것의 파생된 클래스들 중 하나를 거치기 때문에 함수는 절대로 사용되지 않는다. 그래서 에 대한 전화. CNewGfxAPI::DrawSquare 첫 번째 기회가 있을 겁니다 CNewGfxAPI class. 기본 구현이 없는 경우 기본 클래스가 호출되며, 이 때 가상화는 다음을 대신한다. CNewGfxAPI::DrawLine 라고 불린다. 이것은 더 좋은 것이다. CNewGfxAPI 사용 가능한 경우 기본 코드를 사용할 "두 번째 기회"를 분류하십시오.

이 방법을 사용하면 이론적으로는 드로포인트 형태의 하나의 고유 기능만을 사용하여 전체 3D 엔진(소프트웨어 래스터화 적용)을 구축할 수 있으며, 다른 기능은 시간이 허락하는 대로, 그리고 시간에 따라 구현된다. 실제로 이것은 절망적일 정도로 느릴 수 있지만, 이중 챈스 기능의 가능성을 보여준다.

참조

  1. ^ Susan Angelbrandt, Raymond Drery, Philip Karlton, Todd Newman, MIT, "X v11 Sample Server용 포팅 레이어의 정의"
  2. ^ 수잔 안젤란트, 레이몬드 드루리, 필립 칼튼, 토드 뉴먼, "X v11 샘플 서버 포팅 전략", Mit 1988.
  • Goodwin, Steven (2005). Cross-Platform Game Programming. Charles River Media. ISBN 1-58450-379-3.