하사

Has-a

데이터베이스 설계에서 객체 지향 프로그래밍설계(객체 지향 프로그램 아키텍처 참조), has-a(또는 has_a 또는 has)는 하나의 객체(종종 구성된 객체 또는 부분/구성 요소/구성 요소)가 다른 객체(복합 유형)에 속하며 그에 따라 동작하는 구성 관계이다.소유권 규칙간단히 말하면, 객체의 has-a 관계를 객체의 멤버 필드라고 합니다.여러 has-a 관계가 결합되어 소유권 계층이 형성됩니다.

이는 분류학적 계층(하위 유형)을 구성하는 is-a(is_a 또는 is a) 관계와 대조되어야 한다.

어떤 물체와 그 종속물에 대한 가장 논리적인 관계가 항상 명확한-a인지-a인지-a인지를 결정하는 것은 아닙니다.그러한 결정에 대한 혼란으로 인해 이러한 메타언어학적 용어들이 생성되어야만 했다.has-a 관계의 좋은 예는 C++ STL 내의 컨테이너입니다.

그 관계를 요약하자면, 우리는

  • 분류학적 계층을 정의하는 유형(유형) 사이의 hypernym-supertype-subtype(supertype-subtype) 관계
    • 유전관계의 경우: 하이포옴(아형, 서브클래스)은 그 하이퍼님(슈퍼타입, 슈퍼클래스)과 유형(is-a) 관계가 있다.
  • 소유권 계층을 정의하는 유형(유형) 간의 전체명-명사(유형/유형/유형-부분/일치성/구성원) 관계.
    • 통합(즉, 소유권 없음) 관계의 경우:
      • 전체명(가칭)은 그 자칭(부분)과 관계가 있다.
    • 구성(즉 소유권 포함) 관계의 경우:
      • meronym(가칭)은 그 전체(가칭)와 일부 관계가 있다.
    • 격납[1] 관계의 경우:
      • meronym(회원)은 그 전체회원(회원)과 회원관계를 갖는다.
  • 유형(유형)과 객체(유형) 간의 개념-개체(유형-유형(유형)과 객체(유형)의 관계.
    • 토큰(개체)은 유형(클래스)과 인스턴스 오브 관계가 있습니다.

엔티티-관계 모델

데이터베이스에서 관계는 일반적으로 엔티티-관계 모형으로 표현된다.오른쪽 그림에서 볼 수 있듯이 계정에 여러 문자를 사용할 수 있습니다.이는 계정이 캐릭터와 "해당" 관계가 있음을 보여줍니다.

UML 클래스 다이어그램

UML 클래스 다이어그램
구성 및 집계 오용

객체 지향 프로그래밍에서는 이 관계를 통합 모델링 언어 클래스 다이어그램으로 나타낼 수 있습니다.이런 관계를 구성이라고도 합니다.오른쪽의 클래스 다이어그램에서 볼 수 있듯이 카뷰레터를 가진 자동차 또는 카뷰레터로 구성된 자동차입니다.다이아몬드가 검은색으로 칠해진 경우, 이는 조성을 의미한다. 즉, 다이아몬드에 가장 가까운 쪽의 물체는 다른 물체로 구성되어 있거나 다른 물체로 구성되어 있다.흰색 다이아몬드는 집계를 나타내며, 이는 다이아몬드에 가장 가까운 개체가 다른 개체를 소유할 수 있음을 의미합니다.

C++

실제 세계를 모델링할 때 구성집계를 구별하는 또 다른 방법은 포함된 객체의 상대적 수명을 고려하는 것입니다.예를 들어, Car 객체에 Chassis 객체가 포함되어 있는 경우, 대부분의 경우 Car 수명 동안 섀시는 교체되지 않습니다.그것은 자동차 자체와 같은 수명을 가질 것이다. 그래서 그 관계는 구성 의 하나이다.한편, Car 객체에 일련의 타이어 객체가 포함된 경우 이러한 타이어 객체가 마모되고 여러 번 교체될 수 있습니다.또는 차량을 사용할 수 없게 된 경우 일부 타이어를 회수하여 다른 차량에 배정할 수 있습니다.어쨌든 타이어 객체의 수명은 Car 객체와 다르므로 이러한 관계는 집계 중 하나입니다.

위에서 설명한 관계를 구현하기 위해 C++ 소프트웨어 클래스를 만드는 경우 Car 개체는 완전한 섀시 개체를 데이터 멤버에 포함합니다.이 Chassis 객체는 Car 클래스의 컨스트럭터에서 인스턴스화됩니다(또는 컨스트럭터에 할당된 데이터 멤버 및 해당 속성의 데이터 유형으로 정의됩니다).또한 완전히 포함된 Car 클래스의 데이터 구성원이므로 Car 클래스 개체를 삭제하면 Chassis 개체가 더 이상 존재하지 않습니다.

한편, Tire 객체를 가리키는 Car 클래스 데이터 멤버는 C++ 포인터일 가능성이 높습니다.타이어 객체는 외부에서 인스턴스화 및 삭제되거나 다른 Car 객체의 데이터 구성원에 할당될 수 있습니다.타이어 객체는 Car 객체가 삭제되었을 때와는 별도로 독립된 수명을 가집니다.

「 」를 참조해 주세요.

메모들

  1. ^ Containment(컴퓨터 프로그래밍)참조하십시오.