이름 바인딩

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::안녕(); 

「 」를 참조해 주세요.

레퍼런스

  1. ^ Microsoft (May 11, 2007), Using early binding and late binding in Automation, Microsoft, retrieved May 11, 2009
  2. ^ a b Systems and software engineering — Vocabulary ISO/IEC/IEEE 24765:2010(E), IEEE, Dec 15, 2010
  3. ^ "Late Static Bindings". Retrieved July 3, 2013.