연관성과 종속성의 차이점은 무엇입니까?


92

UML 클래스 다이어그램에서 연관 관계와 종속성 관계의 차이점은 무엇입니까?

내가 아는 바에 따르면 연관성은 의존성보다 더 강한 관계이지만, 그것이 얼마나 더 강한 지 잘 모르겠습니다.

모든 예는 환영 이상입니다. :)

답변:


50

의존성과 연관성의 차이점은 무엇입니까? :

일반적으로 연결을 사용하여 클래스의 필드와 같은 것을 나타냅니다. 링크는 항상 고객에게 주문을 요청할 수 있다는 점에서 항상 있습니다. 실제로 필드 일 필요는 없습니다. 더 많은 인터페이스 관점에서 모델링하는 경우 주문의 고객을 반환 할 메서드의 존재를 나타낼 수 있습니다.

UML Distilled의 3 판 (지금은 방금 나왔습니다)에서 인용하자면 "한 요소 (공급자)의 정의를 변경하면 다른 요소 (클라이언트)도 변경 될 수있는 경우 두 요소간에 종속성이 존재합니다"). 이것은 매우 모호하고 일반적인 관계이기 때문에 UML이 다양한 형태의 종속성에 대해 많은 고정 관념을 가지고있는 이유입니다. 코드 용어에서 매개 변수 유형의 이름을 지정하고 임시 변수에 개체를 만드는 것과 같은 것은 종속성을 의미합니다.

...


6
마틴이 당신을 위해 더 잘할 때 왜 대답합니까?! +1
Randolpho

5
아직 명확하지는 않지만 내가 이해 한 한 가지는 의존성이 연관성보다 '약하다'는 것입니다. 적어도 내 견해로 는 연관성이 연관성보다 강한 단어이지만 연관성 은 종속성의 하위 집합 인 것 같습니다 . 그것이 혼란의 원인이었을 것입니다.
Felipe

그 기사는 그것을 잘 말한다. 사실 그것은 내 생각과 일치합니다. 따라서 여기에서 몇 가지 요점을 가져옵니다. (1) UML 다이어그램에 대한 모든 종속성을 표시하고 싶지는 않습니다. 너무 많습니다. 당신은 매우 선택적이고 당신이 의사 소통하는 것이 무엇이든 중요한 것들을 보여줄 필요가 있습니다. (2) 두 클래스 사이에 연관이 있으면 종속성도 있습니다. 연관은 일반화와 마찬가지로이를 의미합니다. 종속 관계를 추론 그래서 분명 다른 UML 관계의 다소 상위 집합 관계는
Mahesha999

1
귀하의 설명은 실제 사례와 너무 멀어서 소프트웨어 엔지니어에게도 명확한 이해를주지 못했습니다.
softninja

@ softninja : 이해하지 못했다는 뜻입니다. 다른 모든 사람들이 그것을 받아 들일 수 있다고 생각합니다. 아, 그리고 반대표에 감사드립니다.
Mitch Wheat

75

협회는 거의 항상 하나의 객체가 필드 / 특성 / 속성 (용어 다릅니다)와 같은 다른 목적을 가지고 있음을 의미한다.

의존성은 일반적으로 (항상은 아니지만)은 객체 메소드 파라미터 인스턴스화 같은 다른 목적을 받아, 또는 다른 객체를 사용하는 것을 의미한다. 종속성은 매우 의해 암시 연관 .


이것은 내가 일반적으로 문제를 결정하는 방식과 가장 가깝습니다. 다른 클래스가 내 클래스의 상태 또는 행동에 실질적인 방식으로 기여한다면 그것은 연관입니다. 따라서 전략 클래스는 자체 내부 상태가 없더라도 연관이됩니다. 다른 클래스가 내 클래스에 서비스를 제공하기 만하면 종속성입니다.
끔찍한 올챙이

49

OOP 용어 :

협회 -> A는 갖고-A C의 (a 멤버 변수로) 오브젝트

종속성-> A 참조 B (메서드 매개 변수 또는 반환 유형)

public class A {
    private C c;
    public void myMethod(B b) {
        b.callMethod();
    }
}

도 있습니다 더 자세한 대답은 .


1
@Naruto_Uzumaki Aggregation은 전체 부분 관계입니다. 예를 들어 재생 목록 및 노래. Association, Dependency 및 Aggregation 간의 더 큰 차이점에 대해서는 다른 답변을 확인하십시오. stackoverflow.com/a/34069760/1998422
Ahmad Abdelghany

에서 UML 증류에 의해 책 마틴 파울러 : "클래스로, 의존성은 여러 가지 이유로 존재 : 하나 개의 클래스가 다른 메시지를 전송, 하나 개의 클래스는 데이터의 일부로서 서로가 하나의 클래스는 작업에 매개 변수로 다른 언급"
아마드 Abdelghany

24

종속성은 String (Java에서 C #은 문자열이 객체이므로)을 매개 변수로 사용하는 메서드를 정의 할 때 클래스가 String 클래스에 종속되는 것과 같습니다.

연결은 클래스에서 문자열을 속성으로 선언 할 때와 같습니다. 그러면 코드가 문자열 클래스와 연결됩니다.

String name = null //: is a association.

"연결은 문자열을 클래스의 속성으로 선언하는 것과 같습니다. 그러면 코드가 문자열 클래스와 연결됩니다." 그렇다면 연관성과 구성의 차이점은 무엇입니까?
Dean P

16

종속성 -클래스의 변경은 종속 클래스의 변경에 영향을줍니다. 예-원은 모양 (인터페이스)에 따라 다릅니다. Shape를 변경하면 Circle에도 영향을줍니다. 따라서 Circle은 Shape에 의존합니다.

연관성 -두 개체간에 특정 관계가 있음을 의미합니다.

(일대일, 일대 다, 다다)

협회는 2 가지 유형이 있습니다.

  1. 구성
  2. 집합

    1) 구성 - 두 개체 간의 더 강한 연관성 또는 관계. 다른 클래스 A 내부에 클래스 B 의 개체를 만들고 있습니다.

 public class A {
       B b;
       public void setB(){
         this.b= new B();
        }
     }

A 클래스를 삭제하면 B는 존재하지 않습니다 (B 객체는 A 내부에서만 생성됩니다).

또 다른 예 -Body & Liver .Liver는 Body 외부에 존재할 수 없습니다.

2) 집계 - 두 개체 간의 연결 유형이 약 합니다.

public class A {       
             B b;
             public void setB(B b_ref){
                 this.b= b_ref;   
                /* object B is passed as an argument of a method */
              }
   }

A 등급을 삭제해도 B는 외부에 존재 (B는 외부에 생성되어 A 등급에 전달됨)

이것의 또 다른 예-Man & Car. 사람은 차를 가지고 있지만 사람과 차는 독립적으로 존재합니다.


종속성은 로컬 범위이며 Association은 클래스 범위입니다.
dimpiax

10

여기 : "Association vs. Dependency vs. Aggregation vs. Composition" , uml 클래스 다이어그램 및 코드 스 니펫이있는 훌륭한 vade mecum이 있습니다. 저자는 연관성, 종속성, 집계, 구성 등의 관계 목록을 한곳에서 제공합니다.


1
나는이 정의를 좋아한다. 연관이란 : I (다른 클래스를 참조하는 클래스)는 객체에 대한 참조를 보유하고 있으며 사용하지 않으며 해당 클래스의 멤버는 나에게 흥미롭지 않습니다. 종속성은 : 일부 멤버를 사용하므로 참조 된 클래스가 변경되면 나에게 영향을 미칠 수 있습니다. 이해하기 쉬 웠던 것보다 옳았다면!
robsch

1
귀하의 의견을 읽을 때 떠오른 첫 번째 질문 : 연관의 경우-객체에 대한 참조를 보유하고 사용하지 않는 이유는 무엇입니까? 참조가 필드 일 뿐이고 클라이언트가 참조에 대해 알고 싶어하는 경우에만 반환된다는 의미입니까?
H.Rabiee

3

종속성은 매우 일반적이며 복잡성을 낮추는 것은 가능한 한 종속성을 줄이는 것입니다.

연관은 강력한 (정적) 종속성입니다. 집계 및 구성은 더욱 강력합니다.


-1

연결 은 한 개체가 다른 개체에 대한 링크 만 있고 관계형 개체 메서드를 사용하지 않는 경우입니다. 예를 들어 루비의 경우

class User
  has_one :profile
end

user = User.first
profile = user.profile
profile.sign_out

이는 사용자로부터 프로필 객체를 얻을 수 있지만 사용자는 자신 내에서 프로필의 메서드를 사용하지 않는다는 의미입니다 (프로필의 인터페이스에 의존하지 않음).

종속성 은 사용자가 다른 개체에 대한 링크를 가지고 있고 그 개체의 메서드를 자신 내부에서 호출 함을 의미합니다.

class User
  has_one :profile

  def personal_info
    profile.info
  end
end

여기서 Profile의 정보 메서드가 변경되거나 이름이 변경되면 Dependent User 클래스도 변경해야합니다.


이 정보를 어디서 얻었는지 알려주시겠습니까? UML 사양에는 연관의 한쪽이 다른 쪽의 방법을 사용하지 않는다는 규칙이 있다고 생각하지 않습니다. 일반적으로 연관은 종속성보다 강한 관계입니다.
Geert Bellekens

@GeertBellekens 내가 이해했듯이 Dependency는 공급자 클래스의 변경 사항이 클라이언트 클래스의 변경이 필요함을 보여줄 필요가 있습니다. 프로그래밍에서 이것은 공급자의 인터페이스를 사용하는 경우에만 해당됩니다 (또는 다른 이유 표시). 귀하의 관점에서이 화살표에는 차이가 없습니다. 그들은 코드 구현을 가리 키지 않고 단지 개념적입니다.
stopanko

그것은 귀하의 개인적인 이해이지만 UML 사양에 설명 된 방식은 아닙니다. UML 2.5 § 7.8.4.1에서 : 종속성은 단일 모델 요소 또는 모델 요소 집합이 사양 또는 구현을 위해 다른 모델 요소를 필요로 함을 나타내는 관계입니다. 이는 clientElement (s)의 완전한 의미가 의미 상 또는 구조적으로 공급자 요소의 정의에 종속됨을 의미합니다.
Geert Bellekens
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.