UML v1.1 개념-UML의 기본-관계(Relationships)
|
그림 25 Relationship 구성도
: 한 사물의 객체가 다른 사물에 대한 객체와 연결되어 있음을 표현한다.
n Association은 구조적 관계를 표현한다.
n 두 클래스가 서로 Association이 있다면 한쪽 객체에서 다른 객체를 참조 할 수 있음을 의미한다.
n Association 관계의 본질을 설명하기 위해 이름을 사용한다.
• 의미상 모호함을 없애기 위해 이름에 방향을 표시 할 수 있다.
• Association의 의미가 명확할 경우는 보통 역할 명을 생략하지만, 한 쌍의 클래스에 두개 이상의 Association이 있는 경우에는 반드시 역할 명을 표시한다.
• Association에 연결된 클래스는 역할 명(Role name)을 가질 수 있다.
• Association은 방향성을 갖는다.
- 방향성은 화살표로 표현한다.
- 방향성이 표시되지 않은 것은 양방향을 의미한다.
• Association은 다중성(Multiplicity)를 갖는다.
- 다중성은 숫자로 표현한다.
- 특정 개수가 두 개 이상일 때에는 ‘,.’로 분리한다.
- 연속적인 숫자는 ‘..’을 사용하여 표시한다.
- ‘*’문자는 다수임을 의미한다.
- 다중성을 표시하지 않은 것은 1을 의미한다.
n 표기법
그림 26 Association
n Example 1
• Class Diagram
그림 27 Bi-Directional Association
• Implement Source
class Company { Person employee; // 직원
Company(Person employee) { this.employee = employee; } }
class Person { Company employer; // 직장
private String name; private int age; private String job;
Person(String name, int age, String job, Company employer) { this.name = name; this.age = age; this.job = job; this.employer = employer; } } |
n Example 2
• Class Diagram
그림 28 Directional Association
• Implement Source
public class Attacker {
public String field; public Attacker(){ }
public void attack(Gun gun){ } }
public class Healer{
public String healKinds; public int healPower; public Attacker patient;
public Healer(){ }
public void heal(){ } } |
: 전체와 부분간의 관계를 표현한다.
n 두 클래스가 연관관계를 갖고 있으면서 전체/부분관계를 띄고 있다면 집합연관으로 표기한다.
n 표기법
그림 29 Aggregation
n Example 1
• Class Diagram
그림 30 Aggregation Example 1
• Implement Source
class Car { public Handle m_Handle; public Engine m_Engine; public Wheel m_Wheel;
Car(){ this("Benz", "Kia", "Hankook"); } Car(Handle handle, Engine engine, Wheel wheel){ this.m_Handle = handle; this.m_Engine = engine; this.m_Wheel = wheel; } }
class Handle { Handle(){ } }
class Engine { Engine(){ } }
class Wheel { Wheel(){ } } |
n Example 2
• Class Diagram
그림 31 Aggregation Example 2
• Implement Source
public abstract class Terran {
public String name; public String healthLvl; public int movementSpeed;
public Terran(){ }
public abstract void move();
public abstract void stop();
}
public class Squad {
public Terran[] unit; public Terran m_Terran;
public Squad(){ }
public void Squad(Terran[] Unit){ }
} |
: Composition은 Aggregation의 특수한 경우이며, 전체에 해당하는 클래스가 소멸될 때 부분에 해당하는 클래스도 함께 소멸된다..
n 표기법
그림 32 Composition
n Example 1
• Class Diagram
그림 33 Composition Example 1
• Implement Source
public class Button { public Button(){ } }
public class Headset { public Headset(){ } }
public class Telephone { private Button m_Button; private Headset m_Headset;
public Telephone(){ m_Button = new Button(); m_Headset = new Headset(); }
} |
n Example 2
• Class Diagram
그림 34 Composition Example 2
• Implement Source
public class Squad {
public Terran[] unit; public Terran m_Terran;
public Squad(){ }
public void Squad(Terran[] Unit){ }
}
public class SquadManager {
public Squad[] Group;
public void SquadManager(){ Group[0] = new Squad(); Group[1] = new Squad(); Group[2] = new Squad();
}
} |
: 일반화 된 개념적인 사물과 특수화된 구체적인 사물과의 관계를 표현한다.
n 자식은 부모의 속성과 행동을 공유한다.
n 부모가 사용되는 곳에는 항상 자식으로 대체 할 수 있으며 그 반대는 성립하지 않는다.
n 표기법
- 속이 빈 화살 촉 모양의 실선으로 표현.
그림 35 Generalization
n Example
• Class Diagram
그림 36 Generalization Example
• Implement Source
public abstract class Terran {
public String name; public String healthLvl; public int movementSpeed;
public Terran(){ }
public abstract void move();
public abstract void stop();
}
public class Attacker extends Terran {
public String field;
public Attacker(){ }
public void attack(Gun gun){ }
public void steamPack(){ } }
public class Healer extends Terran {
public String healKinds; public int healPower; public Attacker patient;
public Healer(){ }
public void heal(){ } }
|
: 인터페이스와 실제 구현 클래스들과의 관계
n Use Case에 정의된 기능을 구현하는 Collaboration과 연결할 때 사용
n 정의된 Interface와 이를 구현하는 class를 연결할 때 사용한다.
n 표기법
그림 37 Realization
§ Example
- Class Diagram
그림 38 Realization Example
- Implement Source
Public abstract class Terran {
public String name; public String healthLvl; public int movementSpeed;
public Terran(){
}
public abstract void move();
public abstract void stop();
}
public interface IfSteamPack {
public void steamPack();
}
public class Attacker extends Terran implements IfSteamPack {
public String field;
public Attacker(){
}
public void attack(Gun gun){
}
public void steamPack(){
} } |
: 한 클래스가 변경 되었을 때 이것을 사용하는 다른 클래스에 영향이 미치는 관계
n 한 클래스의 메소드가 다른 클래스의 객체를 인자로 받아 그 메소드를 사용한다 ( 가장 일반적 ).
n 한 클래스의 메소드 내부에서 다른 클래스의 객체를 생성하여 그 메소드를 사용한다.
n 다른 클래스의 메소드가 또 다른 클래스의 객체를 반환한다. 이때 이 메소드를 호출하여 반환되는 객체의 메소드를 사용한다.
n 표기법
그림 39 Dependency
§ Example 1
- Class Diagram
그림 40 Dependency Example 1
- Implement Source
public class Student { private String grade;
public String getGrade() { return grade; }
}
public class School { public boolean isAdmitable(Student st) { // st 객체의 메소드를 호출하여 입학이 가능한지를 체크한다. if( st.getGrade().equals("A")) return true; else return false; } } |
§ Example 2
- Class Diagram
그림 41 Dependency Example 2
- Implement Source
public class Gun {
public String gunKinds; public int gunPower; public boolean airAttack;
public Gun(){ } public void shoot(){ }
}
public class Attacker extends Terran implements IfSteamPack {
public String field;
public Attacker(){ }
public void attack(Gun gun){
}
public void steamPack(){ } } |
2.2.7. Association Class (연관관계 Class)
: 연관 자체가 속성을 가질 때 사용한다.
§ 표기법
그림 42 Association Class
§ Example
- Class Diagram
그림 43 Association Class Example
- Implement Source
public class Attacker extends{
public String field;
public Attacker(){ }
public void attack(Gun gun){ } }
public class Medicine {
public Medicine(){ } }
public class Healer{
public String healKinds; public int healPower; public Attacker patient; public Medicine m_Medicine;
public Healer(){ }
public void heal(){ } }
|
2.2.8. Recursive Association (재귀적 연관관계)
: 자기 자신을 참조할 때 표현.
§ 표기법
그림 44 Recursive Association
그림 45 StarCraft Class Diagram
§ 냉장고
§ 선풍기
§ 빔프로젝터
§ 학생
n 강의실에는 의자와 책상들이 있다.
n 강사가 수강생들을 가르친다.
n 학생은 시험으로 평가된다.
n 컴퓨터는 메인보드, 하드디스크, 메모리, CPU로 이루어져 있다.
n 웨이터는 직원이다.
n 컴퓨터는 USB방식을 지원한다.
n 객체지향과목은 UML의 선수 과목이다.
n 회사와 프리랜서는 비즈니스로 이루어진 관계이다.
n 컴퓨터는 책상 위에 있다.
|
'UML' 카테고리의 다른 글
UML v1.1 개념-Development Process (0) | 2013.05.19 |
---|---|
UML v1.1 개념-UML의 기본-Diagrams (0) | 2013.05.19 |
UML v1.1 개념-UML의 기본-Extensibility mechanism (0) | 2013.05.19 |
UML v1.1 개념-UML의 기본-Things (0) | 2013.05.19 |
UML v1.1 개념-UML의 의미 (0) | 2013.05.19 |