UML 클래스 다이어그램에서 연관 관계와 종속성 관계의 차이점은 무엇입니까?
내가 아는 바에 따르면 연관성은 의존성보다 더 강한 관계이지만, 그것이 얼마나 더 강한 지 잘 모르겠습니다.
모든 예는 환영 이상입니다. :)
답변:
일반적으로 연결을 사용하여 클래스의 필드와 같은 것을 나타냅니다. 링크는 항상 고객에게 주문을 요청할 수 있다는 점에서 항상 있습니다. 실제로 필드 일 필요는 없습니다. 더 많은 인터페이스 관점에서 모델링하는 경우 주문의 고객을 반환 할 메서드의 존재를 나타낼 수 있습니다.
UML Distilled의 3 판 (지금은 방금 나왔습니다)에서 인용하자면 "한 요소 (공급자)의 정의를 변경하면 다른 요소 (클라이언트)도 변경 될 수있는 경우 두 요소간에 종속성이 존재합니다"). 이것은 매우 모호하고 일반적인 관계이기 때문에 UML이 다양한 형태의 종속성에 대해 많은 고정 관념을 가지고있는 이유입니다. 코드 용어에서 매개 변수 유형의 이름을 지정하고 임시 변수에 개체를 만드는 것과 같은 것은 종속성을 의미합니다.
...
협회는 거의 항상 하나의 객체가 필드 / 특성 / 속성 (용어 다릅니다)와 같은 다른 목적을 가지고 있음을 의미한다.
의존성은 일반적으로 (항상은 아니지만)은 객체 메소드 파라미터 인스턴스화 같은 다른 목적을 받아, 또는 다른 객체를 사용하는 것을 의미한다. 종속성은 매우 의해 암시 연관 .
OOP 용어 :
협회 -> A는 갖고-A C의 (a 멤버 변수로) 오브젝트
종속성-> A 참조 B (메서드 매개 변수 또는 반환 유형)
public class A {
private C c;
public void myMethod(B b) {
b.callMethod();
}
}
도 있습니다 더 자세한 대답은 .
종속성 -클래스의 변경은 종속 클래스의 변경에 영향을줍니다. 예-원은 모양 (인터페이스)에 따라 다릅니다. Shape를 변경하면 Circle에도 영향을줍니다. 따라서 Circle은 Shape에 의존합니다.
연관성 -두 개체간에 특정 관계가 있음을 의미합니다.
(일대일, 일대 다, 다다)
협회는 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 vs. Dependency vs. Aggregation vs. Composition" , uml 클래스 다이어그램 및 코드 스 니펫이있는 훌륭한 vade mecum이 있습니다. 저자는 연관성, 종속성, 집계, 구성 등의 관계 목록을 한곳에서 제공합니다.
연결 은 한 개체가 다른 개체에 대한 링크 만 있고 관계형 개체 메서드를 사용하지 않는 경우입니다. 예를 들어 루비의 경우
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 클래스도 변경해야합니다.