Program Tip

객체 지향 언어의 HAS-A, IS-A 용어

programtip 2020. 12. 9. 21:36
반응형

객체 지향 언어의 HAS-A, IS-A 용어


방금 책을 읽고 있었는데 "HAS-A"와 "IS-A"라는 용어가 들어있었습니다. 구체적으로 무슨 뜻인지 아는 사람 있나요? 책에서 검색을 시도했지만 책의 길이는 600 페이지입니다.


이것은 Java 전용이 아닌 객체 지향 프로그래밍 및 UML 용어입니다. 실제로 알아야 할 세 가지 경우가 있습니다.

  1. 건물 (상속)입니다.
  2. 에는 방이 있습니다.
  3. 에는 점유자 (집계)가 있습니다.

(2)와 (3)의 차이는 미묘하지만 구별하는 데 중요합니다. 함께 그들은 연합의 형태입니다 . 차이점이 뭐야? 구성은 자식 객체가 부모의 맥락에서 살 수 없음을 의미하는 반면 (집을 파괴하고 방이 사라짐) 집계는 자식이 자체적으로 존재할 수 있음을 의미합니다 (집을 파괴하고 점유자가 다른 곳으로 이동).


A는 Car이-A Wheel.

A Sparrowis-a Bird.

학문적으로 용어는 구성과 상속 사이를 결정하는 데 사용됩니다.


Has-a 는 해당 클래스에 유형의 필드가 '가 있음'을 의미합니다.

Is-a 는 클래스가 수퍼 클래스에서 확장되거나 인터페이스를 구현 함을 의미합니다. 이 경우instanceof연산자는true클래스에 대해 테스트되면 반환됩니다.


이것은 자바 특정이 아니라 OO 특정입니다.

IS-A는 "무언가"인 클래스를 가질 수 있음을 의미합니다. 학생 "IS-A"사람처럼. 이것은 한 객체가 다른 객체의 하위 클래스임을 설명하는 데 사용됩니다.

때로는 두 클래스간에 IS-A 관계가 없지만 "HAS-A"가 더 적절합니다. 예를 들어 의자 "HAS-A"다리. 또는 여러. 이를 상속이 아니라 집계라고합니다.

각 클래스를 사용하는 방법에 따라 다르며 고려할 사항이 너무 많더라도 특정 사례에 대한 새로운 질문이 더 적절할 것이기 때문에 각각을 언제 사용해야하는지는 자세히 설명하지 않겠습니다.


Is a = 특별한 종류의 예. Car는 특별한 종류의 Vehicle입니다.

있음 = 물리적으로 무언가를 가지고 있습니다. 예를 들어 자동차에는 엔진이 있습니다.


이름은 거의 모든 것을 의미합니다.

IS-A 클래스 는 모든 속성을 상속하는 다른 클래스의 인스턴스에 대한 특수 참조로 생각할 수 있습니다 .

Vehicle 이라는 클래스 가 존재하는 경우. 그러면 모든 유형 의 차량이이 수퍼 클래스의 속성을 상속 할 수 있습니다. 예를 들어, 경찰차 는 후자의 전문화이기 때문에 Vehicle의 모든 속성을 상속합니다 .

여기에 이미지 설명 입력

반면에 HAS-A 클래스 에는 다른 클래스 또는 다른 클래스의 인스턴스에 대한 참조가 있습니다. 즉, 다른 클래스와 연결공유합니다 . HAS-A 클래스 에는 클래스가 독립적으로 존재할 수 있음을 의미하는 집계연관을 공유하는 클래스와 함께 만 존재할 수 있음을 의미하는 구성 의 두 가지 유형이 있습니다.

객체를 컴포지션 클래스 또는 단순히 다른 클래스의 속성으로 분류 할 때를 아는 것이 중요합니다 .

Vehicle 클래스를 다시 취하면 , Driver 클래스는 Vehicle 클래스가 더 이상 존재하지 않더라도 독립적 인 엔티티로 존재할 수 있기 때문에 Driver 클래스가 집계로 간주 됩니다.

반면 엔진 경우에 클래스 존재할 수 없습니다 차량 때문에 클래스는, 존재하지 않는 엔진 의 범위 밖에 존재할 수 없다 차량 .

여기에 이미지 설명 입력


" IS A ": 관련 개체 간의 관계를 설정합니다. 상속사용 하여 관계를 설정할 수 있습니다 .

"HAS A" : 관련없는 개체에 대한 기능을 정의합니다. 인터페이스 를 사용하여 기능을 정의 할 수 있습니다 .

예:

동물입니다. 그것은 갖고 배울 수있는 능력을.

사람은 동물이 아닙니다 . 그는 배우고, 생각하고, 올라가고, 적용 할 수 있는 능력이 있습니다.


IS-A, HAS-A 등은 정말 OO가 아닙니다. 대신 Liskov 대체 원칙 은 OO입니다.

Bob 아저씨가 http://www.hanselminutes.com/default.aspx?showID=163 에서 IS-A의 역사에 대해 설명합니다 .

로버트 C. 마틴 : "ISA"라는 단어가 우리 어휘에 스며 들어 ISA라는 단어가 순환 경로를 통해 우리 어휘에 스며 들어 객체 지향 서클에서 매우 중요해졌지만 그렇게 시작하지는 않았습니다. . 이 놀라운 지식 망을 만든 인공 지능 군중을 통해 80 년대에 들어갔고, 여러분은 이것을 기억할 것입니다. 80 년대 후반, 90 년대 초의 인공 지능에 대한 모든 과대 광고를 기억할 것입니다. 그런 다음 이러한 추론 엔진을 지식 망에 걸을 수있는 구조를 만들었습니다. 엔터티와 지식 망 사이의 관계는 다음과 같습니다. a와 같은 맛, ISA와 같은 냄새,이 모든 것 – 관계는 a, a와 같은, a가 있고 AI 군중이 자금을 잃었을 때 그리고 그 모든 자금 조달을 위해 그들은 일종의 조사를하고 말했습니다. 이 다른 것들은 일종의 멋지다. 이봐 요, has on과 on과 같은 관계가 있습니다. 진짜 비슷합니다. 우리는 그냥 들어가야합니다. "그리고 그것들은 일종의 그랬고 어휘가 바뀌 었습니다. 흥미 롭습니다. 그것은 또한 상속이 ISA가 아니기 때문에 약간 불행합니다. 상속 , 매우 지친 눈으로 보면 상속은 하위 범위에서 메서드와 변수의 선언이며 ISA와는 아무 관련이 없으며 ISA의 개념은 매우 혼란 스러울 수 있습니다. 간단한 예에서 정수는 실수와 실수는 복소수입니다. UML에 모든 상속을 포함하여 매우 간단하게 그릴 수 있지만 컴파일을 시도해보십시오. 우리가 바라는 정수는 16 또는 64 비트 일 수도 있지만 실수에서 파생 된 경우 실수에는 가수와 특성, 지수와 그들이 사용하는 두 개의 정수가 있습니다. 그들은 부동 소수점 수를 만들기 위해 내부에 이진 점을 암시합니다. 부동 소수점 숫자 인 실수는 복소수에서 파생되지만 복소수에는 허수 부분과 실수 부분이라는 두 개의 실수가 있습니다. C ++ 나 Java로 작성하는 것에 대해 생각한다면 무한한 생각을 가지고있어 컴파일 할 수없는 구조를 작성할 것입니다. 영어로 완벽한 의미가 소프트웨어에서는 전혀 의미가 없습니다. C ++ 나 Java로 작성하는 것에 대해 생각한다면 무한한 생각을 가지고있어 컴파일 할 수없는 구조를 작성할 것입니다. 영어로 완벽한 의미가 소프트웨어에서는 전혀 의미가 없습니다. C ++ 나 Java로 작성하는 것에 대해 생각한다면 무한한 생각을 가지고있어 컴파일 할 수없는 구조를 작성할 것입니다. 영어로 완벽한 의미가 소프트웨어에서는 전혀 의미가 없습니다.


as cletus points out, is-a is different. but be careful with has-a. this can mean composition (lifetime responsbility), aggregation (part-of something), or simply uses-a (has a reference to, knows how to build one or find one). the latter is just an association.


If you develop a Collection Class called "School". You would have "teachers" and "students" in the school. You develop a "person" class and both "student" and "teacher" would inherit from the "Person" class since both are --"is a" person. Both the Student and Teacher each have a birthday. You would create a "Date Class" since both the teacher and student "have" or "has a" birthday inside the "Person Class". This is "containership" In summary "is a person" uses inheritance "has a" uses containership

참고URL : https://stackoverflow.com/questions/2218937/has-a-is-a-terminology-in-object-oriented-language

반응형