-클래스, 인터페이스, 이들의 연관 관계를 표현하며 정적 객체 모델링에 사용된다.
위그림에서 가장 큰 사각형같은 모양으로 클래스를 표시한다. 3개의 작은 사각형으로 나뉘어져있고 첫번째 사각형에는 클래스의 이름, 두번째에는 속성, 세번째에는 메서드가 들어간다. 클래스, 인터페이스, 유스케이스, 액터를 이를 통해 표현한다
클래스가 추상 클래스인 경우 이탈릭체 또는 {abstract}라는 표기로 표기한다.
패키지를 표기할 경우 ::를 사용하거나 자바 프로그래밍 시에 사용하는 방식을 사용한다.ex). java.awt.font, java.awt::font
각 메서드, 속성의 앞에 특정 기호로 접근 권한을 표기한다(-private, +public, #protected, ~default)
속성의 맨 뒤에 타입을 기술한다
속성의 맨 앞에 /가 있을 경우 다른 값으로 부터 유도되는 값임을 의미한다
static의 경우 믿줄로 표기한다
매개변수가 있을 경우 (매개변수 이름 : 타입)으로 표기한다
리턴 타입이 있으면 메서드 맨 뒤에 표기한다 ex)+ func(a: int) : int
final method는 메서드 뒤에 {leaf}를 추가한다
추상 메서드의 경우 메서드 뒤에 {abtract}로 표기한다
생략: ...으로 표시
없음 또는 미정: 빈칸
클래스 간의 관계
상속: 속이 빈 삼각형, 실선
인터페이스: <<interface>>로 표시, 속이 빈 삼각형, 점선
의존관계(약한 의존관계): 점선, 열린 삼각형
association: 실선, 열린 삼각형
속성 표기법:
텍스트 이용:
데이터 타입, 데이터 자체를 표시하는 객체에 이용
선 이용:
객체에 이용
둘 다 이용:
속성 텍스트 표기법의 완전 형식: 가시성 속성이름:
타입 [다중성]=초기값 {프로퍼티 문자열}, ex) - func: String [*] = null {readonly}
다중성 표기법:
다중성: 하나의 객체와 연관을 맺는 객체의 수
[1]: 1개
[N]: N개
[0...*]: 0개 이상
[0...1]: 0아니면 1
프로퍼티:
한 요소의 특징을 표시하는 명명된 값이다
{ordered}: 정렬이 되있다
{List}: 리스트를 사용
노트 기호:
-UML메모나 주석
-설명하고자 하는 대상과 노트 기호는 점선으로 연결
-UML 제약 사항 {...} ex) {size > 0}
-메서드 몸체: UML오퍼레이션의 구현을 표기
UML의 오퍼레이션 형식:
가시성 이름(매개변수-리스트): 반환타입{프로퍼티-문자열}
클래스 다이어그램에서 메서드를 표현하는 방식
의존관계:
점선에 열린, 휘어진 화살표로 표시
클라이언트 요소(클래스, 패키지, 등)가 다른 공급자 요소에 대한 정보(지식)을 가지고 있어서 공급자의 변화가 클라이언트에게도 영향을 주는 관계 -참조를 의미
클라이언트에서 공급자에게로 점선 화살표를 연결(좁은 의미에서의 의존관계)
의존관계는 결합도의 한 상태
넓은 범위의 의존관계:
클래스 다이어그램의 주요 의존관계:
-공급자 타입(supplier type)을 속성으로 가지는 경우
-공급자에게 메시지를 보내는 경우(연관)
인터페이스 표기법:
Composition관계
-하나의 클래스가 다른 클래스를 필드로 포함하는 관계
-클래스 내에서 포함할 클래스의 객체를 인스턴스화하고 해당 클래스가 제공하는 기능들을 사용
aggregation은 마름모가 비어있다
association관계
-특정 클래스가 다른 클래스의 참조 정보 필드를 이용, 다른 클래스의 기능 사용
-클래스 내부에서 다른 클래스의 인스턴스를 생성하지는 않는다
dependency 관계
-특정 클래스가 다른 클래스의 참조 정보를 일시적으로 사용해 다른 클래스의 기능을 사용
-한 클래스의 메서드가 다른 클래스이 객체를 인자로 받아 그 메서드를 사용하는 경우가 가장 일반적
//A-B: composition
//A-C:aggregation
//A-D:association
//A-E:dependency
class A{
B b;
C c;
D d;
public A(){
b = new B();
}
public A(C c){
this.c = c;
}
public void setValue(D d){
this.d = d;
}
public E isDependency(E e){
return e.isDependency();
}
}