uml 클래스 다이어그램 표기법 -...
TRANSCRIPT
소개
• 클래스도 (Class Diagram)
– 클래스, 인터페이스 및 이들의 연관관계를 표현한 도식
– 정적 객체 모델링에 사용
• 이 장의 내용
– 모델링 관점을 떠나 클래스도 표기법 자체만을 다룸
– 참고자료로만 활용
• 중요한 것
– 도식을 그리는 기법보다 “객체지향 핵심원칙은 무엇인가”가 더 중요
3
1. UML적용하기: 클래스 다이어그램의 일반적 표기법
4
java . awt :: Font or
java . awt . Font
plain : Int = 0 { readOnly } bold : Int = 1 { readOnly } name : String style : Int = 0 ...
getFont ( name : String ) : Font getName () : String ...
«interface» Runnable
run ()
- ellipsis “…” means there may be elements , but not shown - a blank compartment officially means “unknown” but as a convention will be used to mean “no members”
SubclassFoo
...
run () ...
SuperclassFoo or
SuperClassFoo { abstract }
- classOrStaticAttribute : Int + publicAttribute : String - privateAttribute assumedPrivateAttribute isInitializedAttribute : Bool = true aCollection : VeggieBurger [ * ] attributeMayLegallyBeNull : String [ 0 .. 1 ] finalConstantAttribute : Int = 5 { readOnly } / derivedAttribute
+ classOrStaticMethod() + publicMethod() assumedPublicMethod() - privateMethod() # protectedMethod() ~ packageVisibleMethod() «constructor» SuperclassFoo (Long ) methodWithParms(param1:String, param2:Float) methodReturnsSomething(): VeggieBurger methodThrowsException () { exception IOException } abstractMethod () abstractMethod 2 () { abstract } // alternate finalMethod () { leaf } // no override in subclass synchronizedMethod () { guarded }
3 common compartments
1 . classifier name
2 . attributes
3 . operations
interface implementation and subclassing
Fruit
...
...
PurchaseOrder
...
...
1
association with multiplicities
dependency
officially in UML , the top format is used to distinguish the package name from the class name
unofficially , the second alternative is common
order
an interface shown with a keyword
2. 정의: 설계 클래스도
• 설계 클래스도 (DCD: Design Class Diagram)
– 소프트웨어 객체의 정적 모델
5
Register
...
endSale () enterItem (...) makePayment (...)
Sale
time isComplete : Boolean / total
makeLineItem (...)
Register
...
Sale
time isComplete : Boolean / total
Captures
1
1 1
Domain Model
conceptual perspective
Design Model
DCD ; software perspective
currentSale
4.속성의 표기 1: 속성 텍스트 및 연관관계 선
• 분류자의 속성(structural property)의 연관관계 표기
– currentSale:Sale 과 같은 속성 텍스트 (property text) 표기법
• 가시성 속성이름 : 타입 다중성 = 초기값{프로퍼티-문자열}
• 보통 가시성은 private 임.
– 연관관계 선 표기법
– 두 가지 혼합
7
Register
...
...
Sale
...
...
1
Register
currentSale : Sale
...
Sale
...
...
Register 가 Sale 객체의 참조를 갖고 있음ㅇ르 표시하기 위해 속성텍스트로 표현
Register 객체가 단 하나의 Sale 객체와 연관되었음을 강조
Register 가 Sale객체를 참조하고 있음을 시각적으로 강조하고 있음 currentSale
Register
currentSale : Sale
...
Sale
...
...
1
중복적으로 연관관계를 나타내고 있음.
currentSale
4. 속성의 표기 2: 속성 텍스트 및 연관관계 선
the association name, common when drawing a domain model, is often excluded (though still legal) when using class diagrams for a software perspective in a DCD
Register
id: Int
...
Sale
time: DateTime
...
1
currentSale
Register
id : Int
Sale
time : DateTimeCaptures-current-sale1 1UP Domain Model
conceptual perspective
UP Design ModelDCD
software perspective
8
• 도메인 모델의 연관 vs. DCD 모델의 연관관계 표시
• 지침
– 출발지로부터 목적지로의 화살표
– 화살표 끝점에 표기된 다중성
– 끝점에 표기된 역할 이름 (rolename) : 참조한 변수의 이름이 됨
4. 속성의 표기 3: 데이터타입
Register
id: Int
...
Sale
time: DateTime
...
1applying the guideline to show attributes as attribute text versus as association lines
Store
address: Addressphone: PhoneNumber
...
1Register has THREE attributes:1. id2. currentSale3. location
currentSale
location
9
• 데이터 타입 (Data Type)
– 중요하지 않은 클래스들
– 예) Boolean, Date, Number, Character, String, Time, Address, Color, Geometrics(Point, Rectangle), Phone Number, SSN, UPC, ZIP, 나열형 등
– 데이터 타입 객체들은 속성에 표현하고, 중요한 클래스에 대한 참조 속성들은 연관으로 표기한다.
public class Register { private int id; private Store location; private Sale currentSale; … }
4. 속성의 표기 3: 연관관계의 끝점 표기법
• 다중성
• 역할명
• {ordered} {ordered, List} 같은 프로퍼티 문자열
notice that an association end can optionally also have a property string such as {ordered, List}
Sale
time: DateTime
...
SalesLineItem
...
...
1..*lineItems
{ordered, List}
Sale
time: DateTimelineItems : SalesLineItem [1..*] orlineItems : SalesLineItem [1..*] {ordered}
...
SalesLineItem
...
...
Two ways to show a collection attribute
10
public class Sale { private DateTime time; private List<SalesLineItem> lineItems = new ArrayList<SalesLineItem>; … }
5. 노트: 메모, 주석, 제약사항, 메소드 몸체
• 노트 기호
– 어디에든 붙일 수 있음
– 설명하고자 하는 대상과 노트기호와는 점선으로 연결
• 노트의 사용
– 주석, 메모
– UML 제약사항 : 항상 {} 로 묶어서 나타낸다.
– 메소드 몸체 = UML 오퍼레이션의 구현을 표기
11
Register
...
endSale () enterItem ( id , qty ) makeNewSale () makePayment ( cashTendered )
«method» // pseudo - code or a specific language is OK public void enterItem ( id , qty ) { ProductDescription desc = catalog . getProductDescription ( id ) ; sale . makeLineItem ( desc , qty ) ; }
6. 오퍼레이션과 메소드 1
• 연산 – 클래스 박스 안의 세 번째 구획
– 오퍼레이션의 시그너쳐만을 표기
– 시그너쳐 표기법 • 가시성 이름(매개변수목록} : 반환타입 {프로퍼티문자열}
– 지침 • 가시성은 기본적으로 public 으로 가정
• 프로퍼티문자열은 예외처리나 추상함수여부를 표현
• 예1) +getPlayer(name: String) : Player {exception IOException} – Java 구현 public Player getPlayer(String name) throws IOException
• 예2) +getPlayer(name: String) : Player {abstract} – C++ 구현 public: virtual Player getPlayer(String name)
• 메소드 – 연산을 구현한 것
– 표기법 • 인터랙션 다이어그램에서 메시지의 세부 내용을 기술
• 클래스도에서 UML 노트를 사용하여 기술
12
6. 오퍼레이션과 메소드 2
• DCD에서 연산에 대한 논의점
– Create 연산
• C++, Java 에서의 new 연산자 호출하는 것으로 구현됨
• 파라미터 타입에 맞는 생성자가 수행됨
– 속성에 접근하는 연산들 (setter, getter 연산들)
• DCD에는 가급적 나타내지 않음
• N 개의 속성이 있으면 2N개의 접근 연산이 필요
• 불필요하게 클래스도가 복잡해지므로 생략
13
7. UML 키워드 (Keyword)
• UML 키워드란?
– 모델 요소들을 범주로 나누기 위해 UML에서 미리 정해놓은 용어
– «»를 사용
키워드 의미 사용 예
<<actor>> 액터이다. 분류자의 이름 위에
<<interface>> 인터페이스이다. 클래스 이름 위에
{abstract} 추상화된 요소이며 인스턴스를 만들 수 없다.
클래스 이름 위 또는 연산 이름 끝에 표기
{ordered} 순서 있는 객체의 집합 연관관계 끝점에 표기
14
8. 스테레오타입, 프로파일, 태그
• UML 프로파일
– 특정 도메인이나 플랫폼에 자주 사용되는 스테레오타입, 태그, 제약사항을 정의해 놓은 집합 • 예) 프로젝트 관리용, 데이터 모델링 용 프로파일
• 스테레오 타입
– <<>>로 표기하는 것은 키워드와 같다.
– 도메인에서 자주 사용되는 용어로 미리 정해져 있거나 사용자가 정의
– UML 확장 메커니즘의 하나
• 태그
– 스테레오 타입의 {속성-값} 의 쌍을 태그라고 함
15
«stereotype» Authorship
author : String status : String
UML extension relationship to a basic UML metamodel term – Element
«authorship» author = “craig” status = “tested”
«metaclass» Element
...
«authorship» Square
...
스테레오타입의 사용
a tool will probably allow a popup to fill in the tag values , once an element has been stereotyped with «authorship»
스테레오타입의 정의
9. UML 프로퍼티 및 프로퍼티 문자열
• Property? – “한 요소의 특징을 표시하는 명명된 값이다.”
– 예) 연산의 가시성 프로퍼티 : UML에서 미리 정해진 특징
– 문자열 표기법
• {name1=value,name2=value2}
– {abstract,visibility=public}
• {abstract} == {abstract=true}
16
10. 일반화, 추상 클래스, 추상 오퍼레이션
• 일반화
– Superclass 에서 서브클래스로 이어지는 실선 및 빈 화살촉으로 표현
– 도메인 모델: 부분집합
– DCD : 상속을 의미
– 최종 클래스 및 최종 연산은 {leaf} 태그 사용
– 추상클래스는 {abstract} 또는 이탤릭체
17
Polygon
Rectangle
Polygon {abstract}
Rectangle
11. 의존관계
• 의존관계
– 어떤 도식에서도 사용가능
– 클래스도, 패키지도에서 주로 사용
– 의존관계의 정의
• 클라이언트 요소(클래스, 패키지, UC)가 서비스를 제공하는 공급자 요소의 정보를 가지고 있어, 공급자 요소의 변화가 클라이언트에도 영향을 주는 관계로 정의함.
• 의존관계 선은 클라이언트에서 공급자에게로 점선 화살표로 연결함.
• 의존관계는 결합도(coupling)의 한 형태로 인식할 수 있음
– 의존관계의 일반적 형태:클라이언트 A는 공급자 B에 의존한다.
• A가 공급자 B 타입의 속성을 가졌을 때
• A가 공급자 B로 메시지를 보낼 때 (연관)
• A의 함수가 공급자 타입의 매개변수를 받을 때
• 공급자 B가 A의 슈퍼클래스일 때 (상속/일반화 관계)
– 특수한 형태의 의존관계는 해당 표기법을 사용
• 상속, 복합연관, 집합연관
– 지침
• 클래스도에서는 객체들간의 전역변수, 매개변수, 지역변수, 정적 메소드의 의존관계를 표시할 때에 사용
18
의존관계의 예
SalesLineItem
...
...
ProductDescription
...
...
1..*lineItems
Sale
...
updatePriceFor( ProductDescription )...
the Sale has parameter visibility to a ProductDescription, and thus some kind of dependency
System
...
runFinalization()...
Foo
...
doX()...
the doX method invokes the runFinalization static method, and thus has a dependency on the System class
19
public class Sale { public void updatePriceFor(ProductDescription desc) { Money basePrice = desc.getPrice(); // … } private SalesLineItem lineitems; // … }
public class Foo { public void doX() { System.runFinalization(); // … } // … }
파라미터 의존 정적 메소드 호출
의존관계 레이블
• 의존관계의 특성을 표시하고 싶을 때
– 스테레오타입으로 표현
20
«call» Window
a dependency on calling on operations of the operations of a Clock
Clock
getTime () ...
«create» A
a dependency that A objects create B objects
B
...
12. 인터페이스
• UML에서의 인터페이스의 구현 – 인터페이스 실현 (interface realization) 관계 – 빈 촉을 가진 점선
• 인터페이스의 표기법
– 소켓, 원으로 표현
21
«interface» Timer
getTime ()
Clock 1
...
getTime () ... lollipop notation indicates Clock 3 implements
and provides the Timer interface to clients
Timer is a provided interface
Timer
Clock 3
...
getTime () ...
Window 2
Window 3
dependency line notation
Window 2 has a dependency on the Timer interface when it collaborates with a Clock 2 object
socket line notation
Window 3 has a dependency on the Timer interface when it collaborates with a Clock 3 object
Window 1 Timer
socket line notation
Window 1 uses the Timer interface
it has a required interface
Clock 2
...
getTime () ...
Clock 1 implements and provides the Timer interface
Timer
13. 집합(aggregation) 연관과 복합(composition) 연관
• 집합연관 (aggregation)
– 약한 전체 부분관계
– 부분은 자체적으로 존재할 수 있고,없어질 수도 있다.
– 끝이 비어 있는 다이어몬드를 가진 선으로 표기
• 복합연관 (composition)
– 강한 전체 부분관계
– 부분만으로는 존재할 수 없고 항상 전체와 동시에 존재
– 다음을 암시 • Square와 같은 부분 객체는 항상 Board 같은 복합 객체에만 속한다.
• 부분 객체는 항상 복합객체에 종속된다.
• 복합 객체가 부분 객체의 생성 및 삭제를 책임진다. 즉, 복합객체가 사라지면 부분 객체도 소멸된다.
– 끝이 채워진 다이어몬드를 가진 선으로 표기
Finger0..7
Hand
composition
1
Square40
Board1
SalesLineItem1..*Sale1
composition means -a part instance (Square) can only be part of one composite (Board) at a time
-the composite has sole responsibility for management of its parts, especially creation and deletion
22
14. 제약사항
• UML 제약사항 (constraints)
– UML 요소에 대한 제한 및 조건을 표시하기 위함
– 중괄호 {} 안에 제약조건 표시
• 표기법 3가지
23
Stack
size : Integer { size > = 0 }
push ( element ) pop () : Object
three ways to show UML constraints
{ post condition : new size = old size + 1 }
{ post condition : new size = old size – 1 }
15. 한정적 연관관계
• 한정적 연관관계 (qualified association)
– 큰 집합에서 하나의 객체를 선택하여 관계를 한정할 때 쓰이며, 선택된 객체를 한정자(qualifier)라고 한다.
– 대개의 경우 다중성이 감소함: 큰 집합에서 하나를 선택하기 때문
ProductCatalog
ProductDescriptionitemID Contains
ProductCatalog
ProductDescription
Contains
1..*
multiplicity reduced to 1
(a)
(b)
qualifier
1
11
24
16. 연관관계 클래스
• 연관관계 클래스 (association class)
– 두 클래스 사이의 연관관계를 속성으로 가진 클래스를 지칭
– 예) Employment 는 Company 객체와 Person 객체를 이어주고, salary 및 startDate 를 추가 속성으로 가짐
• 구현
– 연관관계 클래스와 연관된 클래스들 간의 두 개의 연관으로 분리 후 구현
salarystartDate
Employment
EmploysCompany Person**
a person may have employment with several companies
25
17. Singleton 클래스
• 디자인 패턴 중 Singleton 패턴에서 나오는 클래스
– 한 클래스의 인스턴스가 시스템을 통틀어 하나만 존재할 때
26
1 ServicesFactory
instance : ServicesFactory
accountingAdapter : IAccountingAdapter inventoryAdapter : IInventoryAdapter taxCalculatorAdapter : ITaxCalculatorAdapter
getInstance () : ServicesFactory
getAccountingAdapter () : IAccountingAdapter getInventoryAdapter () : IInventoryAdapter getTaxCalculatorAdapter () : ITaxCalculatorAdapter ...
UML notation : in a class box , an underlined attribute or method indicates a static ( class level ) member , rather than an instance member
UML notation : this ' 1 ' can optionally be used to indicate that only one instance will be created ( a singleton )
18. 템플릿 클래스 및 인터페이스
• 템클릿 클래스 (template class)
– C++, Java 의 템플릿 또는 매개변수화된 타입 등으로 불림
• 리스트 또는 맵 등의 collection 클래스들의 구현 방법 – 예) Square 요소를 갖는 ArrayList ArrayList<Square>
27
public class Board { private List<Square> squares = new ArrayList<Square> //… }
«interface»
List
clear () ...
K parameterized or template interfaces and classes
K is a template parameter
anonymous class with template binding complete
Board
squares : List < K Square >
or squares : List < Square > ...
ArrayList < T Square >
clear () ...
the attribute type may be expressed in official UML , with the template binding syntax requiring an arrow or in another language , such as Java
ArrayList
elements : T [*] ...
clear () ...
T
for example , the elements attribute is an array of type T , parameterized and bound before actual use .
there is a chance the UML 2 “arrow” symbol will eventually be replaced with something else e . g . , ‘ = ’
19. 사용자 정의 구획
• 사용자 정의 구획
– 이름, 속성, 연산 등 UML에서 정의한 구획 외에 사용자가 정의한 구획을 클래스 박스 안에 추가할 수 있음
– 예) 책임 구획, 예외처리 구획을 추가하여 사용
DataAccessObject
id : Int...
doX()...
exceptions thrownDatabaseExceptionIOException
responsibilitiesserialize and write objectsread and deserialize objects...
28
20. 액티브 클래스
• 액티브 객체
– 객체 자신의 쓰레드(thread)를 실행하고 제어
• 액티브 클래스
– 액티브 객체의 클래스
29
«interface» Runnable
run ()
Clock
...
run () ...
active class
21. 인터랙션 다이어그램 vs. 클래스 다이어그램
• 어떤 관계인가?
– 클래스 및 클래스의 메소드는 동적 모델링을 하는 창의적인 설계 과정으로부터 정제되어 드러난다.
• 순서 – 동적 모델링 정적 모델링
– 병렬적 Agile 방법론에서는 상호 보완하면서 모델링
• 예) 10분 동적 모델링 후 10분 정적 모델링, 이를 반복
30
: Register : Sale
makePayment ( cashTendered )
makePayment ( cashTendered )
Register
...
makePayment ( … ) ...
Sale
...
makePayment ( … ) ...
1
currentSale
messages in interaction diagrams indicate operations in the class diagrams classes
identified in the interaction diagrams are declared in the class diagrams