이름 바인딩
Name binding프로그래밍 언어에서 이름 바인딩은 엔티티(데이터 및/또는 코드)와 [1]식별자를 연결하는 것입니다.오브젝트에 바인드된 식별자는 그 오브젝트를 참조한다고 한다.기계어에는 식별자에 대한 기본 개념은 없지만 프로그래밍 언어에 의해 이름-객체 바인딩이 서비스 및 프로그래머용 표기법으로서 구현됩니다.바인딩은 범위 지정과 밀접하게 연결되어 있습니다.이것에 의해, 어느 이름이 어느 오브젝트에 바인드 되는지가 결정됩니다.프로그램 코드의 어느 장소(전형적으로)와 가능한 실행 패스(일시적으로) 중 어느 것이냐가 결정됩니다.
식별자 사용id
에 대한 결합을 확립하는 상황에서id
는 바인딩(또는 정의) 오카렌스라고 불립니다.기타 모든 발생(식, 할당 및 서브프로그램 호출 등)에서 식별자는 바인딩된 항목을 나타냅니다. 이러한 발생을 적용된 발생이라고 합니다.
바인딩 시간
- 정적 바인딩(또는 초기 바인딩)은 프로그램이 [2]실행되기 전에 수행되는 이름 바인딩입니다.
- 다이내믹 바인딩(또는 레이트바인딩 또는 가상바인딩)은 프로그램 [2]실행 중에 실행되는 이름 바인딩입니다.
스태틱 바인딩의 예로는 직접 C 함수 호출이 있습니다.ID에서 참조하는 함수는 실행 시 변경할 수 없습니다.
단, 다이내믹바인딩의 예로는 C++ 가상 메서드콜과 같이 다이내믹디스패치가 있습니다(일반적으로) 런타임 전에는 다형 객체의 특정 유형을 알 수 없기 때문에 실행되는 함수는 동적으로 바인딩됩니다.예를 들어 다음 Java 코드를 예로 들어 보겠습니다.
일반의 무효 후우(자바.이용하다.목록.< >스트링> 목록.) { 목록..더하다('바'); }
List
인터페이스이기 때문에list
는 그 서브유형을 참조해야 합니다.에 대한 언급입니까?LinkedList
, anArrayList
또는 기타 서브타입의List
에 의해 참조된 실제 메서드add
는 런타임까지 알 수 없습니다.C에서 이러한 동적 바인딩 인스턴스는 런타임에 실제로 평가될 때까지 값을 알 수 없는 변수 또는 함수 포인터 유형의 식에 의해 지시되는 함수에 대한 호출일 수 있습니다.
리바인딩 및 변환
재바인딩은 변환과 혼동해서는 안 됩니다.
- 재바인딩은 참조 식별자에 대한 변경입니다.
- 변환은 참조된 엔티티에 대한 변경입니다.
다음 Java 코드를 고려합니다.
링크 리스트< >스트링> 목록.; 목록. = 신규 링크 리스트< >스트링>(); 목록..더하다("푸"); 목록. = 무효;
식별자list
는 처음에 아무것도 참조하지 않습니다(초기화되지 않았습니다).그 후 오브젝트(스트링의 링크 리스트)를 참조하기 위해 리바운드합니다.에 의해 참조되는 링크 리스트list
그런 다음 변환되어 목록에 문자열을 추가합니다.마지막으로...list
로 반등하고 있다null
.
레이트 스태틱
레이트 스태틱바인딩은 스태틱바인딩과 다이내믹바인딩 사이의 바인딩의 변형입니다.다음 PHP의 예를 생각해 보겠습니다.
학급 A { 일반의 정적인 $word = "안녕하세요"; 일반의 정적인 기능. 안녕() { 인쇄물 자신::$word; } } 학급 B 확장 A { 일반의 정적인 $word = "안녕"; } B::안녕();
이 예에서는 PHP 인터프리터가 키워드를 바인드하고 있습니다.self
안에서.A::hello()
수업하다A
에의 문의가 있습니다.B::hello()
는 문자열 "hello"를 생성합니다.의 의미론self::$word
지연 정적 바인딩에 기반하고 있었으므로 결과는 "안녕"이 되었을 것입니다.
PHP 버전 5.3부터는 레이트 스태틱바인딩이 지원됩니다.[3]특히, 만약self::$word
상기의 경우 로 변경되었다.static::$word
다음 블록에 나타나듯이 키워드는static
실행 시에만 바인드 됩니다.그 후, 콜의 결과는,B::hello()
"안녕"이 될 것이다.
학급 A { 일반의 정적인 $word = "안녕하세요"; 일반의 정적인 기능. 안녕() { 인쇄물 정적인::$word; } } 학급 B 확장 A { 일반의 정적인 $word = "안녕"; } B::안녕();
「 」를 참조해 주세요.
레퍼런스
- ^ Microsoft (May 11, 2007), Using early binding and late binding in Automation, Microsoft, retrieved May 11, 2009
- ^ a b Systems and software engineering — Vocabulary ISO/IEC/IEEE 24765:2010(E), IEEE, Dec 15, 2010
- ^ "Late Static Bindings". Retrieved July 3, 2013.