UML 클래스다이어그램표기법 (UML Class Diagram)
Objectives 자주사용되는 UML 클래스도를그릴수있다. 2
소개 클래스도 (Class Diagram) 클래스, 인터페이스및이들의연관관계를표현한도식 정적객체모델링에사용 이장의내용 모델링관점을떠나클래스도표기법자체만을다룸 참고자료로만활용 중요한것 도식을그리는기법보다 객체지향핵심원칙은무엇인가 가더중요 3
. UML 적용하기 : 클래스다이어그램의일반적표기법 3 common compartments. classifier name 2. attributes 3. operations an interface shown with a keyword «interface» Runnable run () SuperclassFoo or SuperClassFoo { abstract } - classorstaticattribute : Int + publicattribute : String - privateattribute assumedprivateattribute isinitializedattribute : Bool = true acollection : VeggieBurger [ * ] attributemaylegallybenull : String [ 0.. ] finalconstantattribute : Int = 5 { readonly } / derivedattribute + classorstaticmethod() + publicmethod() assumedpublicmethod() - privatemethod() # protectedmethod() ~ packagevisiblemethod() «constructor» SuperclassFoo (Long ) methodwithparms(param:string, param2:float) methodreturnssomething(): VeggieBurger methodthrowsexception () { exception IOException } abstractmethod () abstractmethod 2 () { abstract } // alternate finalmethod () { leaf }// no override in subclass synchronizedmethod () { guarded } officially in UML, the top format is used to distinguish the package name from the class name unofficially, the second alternative is common dependency java. awt :: Font or java. awt. Font plain : Int = 0 { readonly } bold : Int = { readonly } name : String style : Int = 0 getfont ( name : String ) : Font getname () : String Fruit interface implementation and subclassing run () SubclassFoo - 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 association with multiplicities order PurchaseOrder 4
2. 정의 : 설계클래스도 설계클래스도 (DCD: Design Class Diagram) 소프트웨어객체의정적모델 Domain Model conceptual perspective Register Captures Sale time iscomplete : Boolean / total Register Sale Design Model DCD ; software perspective endsale () enteritem () makepayment () currentsale time iscomplete : Boolean / total makelineitem () 5
3. 정의 : 분류자 분류자 (classifier) 의정의 행위적이고구조적인특색을표현하는모델의요소 예 ) 클래스, 인터페이스, 유스케이스, 액터등을지칭 6
4. 속성의표기 : 속성텍스트및연관관계선 분류자의속성 (structural property) 의연관관계표기 currentsale:sale 과같은속성텍스트 (property text) 표기법 가시성속성이름 : 타입다중성 = 초기값 { 프로퍼티 - 문자열 } 보통가시성은 private 임. 연관관계선표기법 두가지혼합 Register 가 Sale 객체의참조를갖고있음ㅇ르표시하기위해속성텍스트로표현 Register currentsale : Sale Sale Register 가 Sale 객체를참조하고있음을시각적으로강조하고있음 Register currentsale Sale Register 객체가단하나의 Sale 객체와연관되었음을강조 중복적으로연관관계를나타내고있음. Register currentsale : Sale currentsale Sale 7
4. 속성의표기 2: 속성텍스트및연관관계선 도메인모델의연관 vs. DCD 모델의연관관계표시 지침 출발지로부터목적지로의화살표 화살표끝점에표기된다중성 끝점에표기된역할이름 (rolename) : 참조한변수의이름이됨 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 UP Domain Model conceptual perspective id : Int Register Captures-current-sale Sale time : DateTime UP Design Model DCD software perspective id: Int Register currentsale Sale time: DateTime 8
4. 속성의표기 3: 데이터타입 데이터타입 (Data Type) 중요하지않은클래스들 예 ) Boolean, Date, Number, Character, String, Time, Address, Color, Geometrics(Point, Rectangle), Phone Number, SSN, UPC, ZIP, 나열형등 데이터타입객체들은속성에표현하고, 중요한클래스에대한참조속성들은연관으로표기한다. applying the guideline to show attributes as attribute text versus as association lines id: Int Register currentsale Sale time: DateTime public class Register { private int id; private Store location; private Sale currentsale; Register has THREE attributes:. id 2. currentsale 3. location location Store address: Address phone: PhoneNumber } 9
4. 속성의표기 3: 연관관계의끝점표기법 다중성 역할명 {ordered} {ordered, List} 같은프로퍼티문자열 Sale SalesLineItem time: DateTime lineitems : SalesLineItem [..*] or lineitems : SalesLineItem [..*] {ordered} Two ways to show a collection attribute public class Sale { private DateTime time; private List<SalesLineItem> lineitems = new ArrayList<SalesLineItem>; } Sale time: DateTime..* lineitems {ordered, List} notice that an association end can optionally also have a property string such as {ordered, List} SalesLineItem 0
5. 노트 : 메모, 주석, 제약사항, 메소드몸체 노트기호 어디에든붙일수있음 설명하고자하는대상과노트기호와는점선으로연결 노트의사용 주석, 메모 UML 제약사항 : 항상 {} 로묶어서나타낸다. 메소드몸체 = UML 오퍼레이션의구현을표기 «method» // pseudo - code or a specific language is OK public void enteritem ( id, qty ) { ProductDescription desc = catalog. getproductdescription ( id ); sale. makelineitem ( desc, qty ); } Register endsale () enteritem ( id, qty ) makenewsale () makepayment ( cashtendered )
6. 오퍼레이션과메소드 연산 클래스박스안의세번째구획 오퍼레이션의시그너쳐만을표기 시그너쳐표기법 가시성이름 ( 매개변수목록 } : 반환타입 { 프로퍼티문자열 } 지침 가시성은기본적으로 public 으로가정 프로퍼티문자열은예외처리나추상함수여부를표현 예 ) +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 노트를사용하여기술 2
6. 오퍼레이션과메소드 2 DCD 에서연산에대한논의점 Create 연산 C++, Java 에서의 new 연산자호출하는것으로구현됨 파라미터타입에맞는생성자가수행됨 속성에접근하는연산들 (setter, getter 연산들 ) DCD에는가급적나타내지않음 N 개의속성이있으면 2N개의접근연산이필요 불필요하게클래스도가복잡해지므로생략 3
7. UML 키워드 (Keyword) UML 키워드란? 모델요소들을범주로나누기위해 UML 에서미리정해놓은용어 를사용 키워드의미사용예 <<actor>> 액터이다. 분류자의이름위에 <<interface>> 인터페이스이다. 클래스이름위에 {abstract} 추상화된요소이며인스턴스를만들수없다. 클래스이름위또는연산이름끝에표기 {ordered} 순서있는객체의집합연관관계끝점에표기 4
8. 스테레오타입, 프로파일, 태그 UML 프로파일 특정도메인이나플랫폼에자주사용되는스테레오타입, 태그, 제약사항을정의해놓은집합 예 ) 프로젝트관리용, 데이터모델링용프로파일 스테레오타입 <<>> 로표기하는것은키워드와같다. 도메인에서자주사용되는용어로미리정해져있거나사용자가정의 UML 확장메커니즘의하나 태그 스테레오타입의 { 속성 - 값 } 의쌍을태그라고함 스테레오타입의정의 UML extension relationship to a basic UML metamodel term Element 스테레오타입의사용 a tool will probably allow a popup to fill in the tag values, once an element has been stereotyped with «authorship» «metaclass» Element «stereotype» Authorship «authorship» Square «authorship» author = craig status = tested author : String status : String 5
9. UML 프로퍼티및프로퍼티문자열 Property? 한요소의특징을표시하는명명된값이다. 예 ) 연산의가시성프로퍼티 : UML 에서미리정해진특징 문자열표기법 {name=value,name2=value2} {abstract,visibility=public} {abstract} == {abstract=true} 6
0. 일반화, 추상클래스, 추상오퍼레이션 일반화 Superclass 에서서브클래스로이어지는실선및빈화살촉으로표현 도메인모델 : 부분집합 DCD : 상속을의미 최종클래스및최종연산은 {leaf} 태그사용 추상클래스는 {abstract} 또는이탤릭체 Polygon Rectangle Polygon {abstract} Rectangle 7
. 의존관계 의존관계 어떤도식에서도사용가능 클래스도, 패키지도에서주로사용 의존관계의정의 클라이언트요소 ( 클래스, 패키지, UC) 가서비스를제공하는공급자요소의정보를가지고있어, 공급자요소의변화가클라이언트에도영향을주는관계로정의함. 의존관계선은클라이언트에서공급자에게로점선화살표로연결함. 의존관계는결합도 (coupling) 의한형태로인식할수있음 의존관계의일반적형태 : 클라이언트 A 는공급자 B 에의존한다. A 가공급자 B 타입의속성을가졌을때 A 가공급자 B 로메시지를보낼때 ( 연관 ) A 의함수가공급자타입의매개변수를받을때 공급자 B 가 A 의슈퍼클래스일때 ( 상속 / 일반화관계 ) 특수한형태의의존관계는해당표기법을사용 상속, 복합연관, 집합연관 지침 클래스도에서는객체들간의전역변수, 매개변수, 지역변수, 정적메소드의의존관계를표시할때에사용 8
의존관계의예 public class Sale { public void updatepricefor(productdescription desc) { Money baseprice = desc.getprice(); // } private SalesLineItem lineitems; // } public class Foo { public void dox() { System.runFinalization(); // } // } the dox method invokes the runfinalization static method, and thus has a dependency on the System class System the Sale has parameter visibility to a ProductDescription, and thus some kind of dependency ProductDescription dox() Foo runfinalization() Sale updatepricefor( ProductDescription ) SalesLineItem..* lineitems 파라미터의존 정적메소드호출 9
의존관계레이블 의존관계의특성을표시하고싶을때 스테레오타입으로표현 Window «call» Clock gettime () A «create» B a dependency on calling on operations of the operations of a Clock a dependency that A objects create B objects 20
2. 인터페이스 UML 에서의인터페이스의구현 인터페이스실현 (interface realization) 관계 빈촉을가진점선 인터페이스의표기법 소켓, 원으로표현 socket line notation Window Timer Window uses the Timer interface it has a required interface dependency line notation Window 2 has a dependency on the Timer interface when it collaborates with a Clock 2 object «interface» Timer gettime () Clock 2 gettime () Timer Window 2 Clock Clock implements and provides the Timer interface Clock 3 gettime () gettime () lollipop notation indicates Clock 3 implements and provides the Timer interface to clients Timer is a provided interface Timer Window 3 socket line notation Window 3 has a dependency on the Timer interface when it collaborates with a Clock 3 object 2
3. 집합 (aggregation) 연관과복합 (composition) 연관 집합연관 (aggregation) 약한전체부분관계 부분은자체적으로존재할수있고, 없어질수도있다. 끝이비어있는다이어몬드를가진선으로표기 복합연관 (composition) 강한전체부분관계 부분만으로는존재할수없고항상전체와동시에존재 다음을암시 Square 와같은부분객체는항상 Board 같은복합객체에만속한다. 부분객체는항상복합객체에종속된다. 복합객체가부분객체의생성및삭제를책임진다. 즉, 복합객체가사라지면부분객체도소멸된다. 끝이채워진다이어몬드를가진선으로표기 Hand 0..7 Finger composition means -a part instance (Square) can only be part of one composite (Board) at a time composition -the composite has sole responsibility for management of its parts, especially creation and deletion Board 40 Square Sale..* SalesLineItem 22
4. 제약사항 UML 제약사항 (constraints) UML 요소에대한제한및조건을표시하기위함 중괄호 {} 안에제약조건표시 표기법 3 가지 Stack size : Integer { size > = 0 } three ways to show UML constraints push ( element ) pop () : Object { post condition : new size = old size + } { post condition : new size = old size } 23
5. 한정적연관관계 한정적연관관계 (qualified association) 큰집합에서하나의객체를선택하여관계를한정할때쓰이며, 선택된객체를한정자 (qualifier) 라고한다. 대개의경우다중성이감소함 : 큰집합에서하나를선택하기때문 (a) Product Catalog Contains..* Product Description (b) Product Catalog itemid Contains Product Description qualifier multiplicity reduced to 24
6. 연관관계클래스 연관관계클래스 (association class) 구현 두클래스사이의연관관계를속성으로가진클래스를지칭 예 ) Employment 는 Company 객체와 Person 객체를이어주고, salary 및 startdate 를추가속성으로가짐 연관관계클래스와연관된클래스들간의두개의연관으로분리후구현 Company * Employs * Person a person may have employment with several companies salary startdate Employment 25
7. Singleton 클래스 디자인패턴중 Singleton 패턴에서나오는클래스 한클래스의인스턴스가시스템을통틀어하나만존재할때 UML notation : in a class box, an underlined attribute or method indicates a static ( class level ) member, rather than an instance member instance : ServicesFactory ServicesFactory accountingadapter : IAccountingAdapter inventoryadapter : IInventoryAdapter taxcalculatoradapter : ITaxCalculatorAdapter getinstance () : ServicesFactory UML notation : this ' ' can optionally be used to indicate that only one instance will be created ( a singleton ) getaccountingadapter () : IAccountingAdapter getinventoryadapter () : IInventoryAdapter gettaxcalculatoradapter () : ITaxCalculatorAdapter 26
8. 템플릿클래스및인터페이스 템클릿클래스 (template class) C++, Java 의템플릿또는매개변수화된타입등으로불림 리스트또는맵등의 collection 클래스들의구현방법 예 ) Square 요소를갖는 ArrayList ArrayList<Square> public class Board { private List<Square> squares = new ArrayList<Square> // } parameterized or template interfaces and classes K is a template parameter «interface» List clear () K the attribute type may be expressed in official UML, with the template binding syntax requiring an arrow or in another language, such as Java Board anonymous class with template binding complete ArrayList T squares : List < K Square > or squares : List < Square > ArrayList < T Square > elements : T [*] clear () clear () 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. g e., = 27
9. 사용자정의구획 사용자정의구획 이름, 속성, 연산등 UML 에서정의한구획외에사용자가정의한구획을클래스박스안에추가할수있음 예 ) 책임구획, 예외처리구획을추가하여사용 id : Int dox() DataAccessObject exceptions thrown DatabaseException IOException responsibilities serialize and write objects read and deserialize objects 28
20. 액티브클래스 액티브객체 객체자신의쓰레드 (thread) 를실행하고제어 액티브클래스 액티브객체의클래스 active class «interface» Runnable Clock run () run () 29
2. 인터랙션다이어그램 vs. 클래스다이어그램 어떤관계인가? 클래스및클래스의메소드는동적모델링을하는창의적인설계과정으로부터정제되어드러난다. 순서 동적모델링 정적모델링 병렬적 Agile 방법론에서는상호보완하면서모델링 예 ) 0 분동적모델링후 0 분정적모델링, 이를반복 : Register : Sale makepayment ( cashtendered ) makepayment ( cashtendered ) messages in interaction diagrams indicate operations in the class diagrams Register Sale classes identified in the interaction diagrams are declared in the class diagrams makepayment ( ) currentsale makepayment ( ) 30