소프트웨어 프로젝트 관리 [UML-Class Diagram]

머리말

UML 다이어그램에는 다양한 유형이 있지만 시스템 분석 및 설계 작업을 완료하기 위해 모든 UML 다이어그램을 마스터할 필요는 없습니다. 일반적으로 UML 다이어그램에서는 클래스 다이어그램, 사용 사례 다이어그램, 시퀀스 다이어그램의 사용법을 익히기만 하면 대부분의 작업을 완료할 수 있습니다 . 즉, UML을 20% 마스터하면 80%의 일을 할 수 있다는 뜻입니다. 프로그래머에게 가장 자주 사용되는 것은 클래스 다이어그램입니다 .

목차

머리말

1. 클래스 다이어그램이란 무엇입니까?

2. 클래스 다이어그램으로 클래스 표현

3. 클래스 다이어그램에서 구체적인 클래스, 추상화, 인터페이스 및 패키지 표현

UML 클래스 다이어그램에서 구체적인 클래스 표현

UML 클래스 다이어그램에서 추상 클래스 표현

UML 클래스 다이어그램에서 인터페이스 표현

UML 클래스 다이어그램으로 패키지 표현

4. 클래스 다이어그램의 관계 표현

관계를 깨닫다

일반화 관계

연결 관계

종속성

집계 관계

조합관계

Java 개발에서 집계와 구성의 차이점


 1. 클래스 다이어그램이란 무엇입니까?

클래스 다이어그램은 객체지향 시스템 모델링에서 가장 일반적으로 사용되는 중요한 다이어그램으로, 다른 다이어그램을 정의하는 기초가 됩니다. 클래스 다이어그램은 주로 클래스, 시스템의 인터페이스, 정적 구조 및 이들 간의 관계를 표시하는 데 사용되는 정적 모델입니다. 클래스 다이어그램의 가장 기본적인 요소는 클래스와 인터페이스입니다. 소프트웨어 디자이너가 클래스 다이어그램을 디자인한 후 프로그래머는 코드를 사용하여 클래스 다이어그램에 포함된 콘텐츠를 구현할 수 있습니다.

2. 클래스 다이어그램의 클래스 표현

클래스 아이콘은 세 부분 으로 구성됩니다 . 첫 번째 부분은 클래스 이름 , 두 번째 부분은 속성 , 세 번째 부분은 작업 입니다.

  • "+"는  public;
  • "-"는  private;
  • "#"은  protected;
  • 기호 없이 표현됨 default

클래스 이름은 해당 네임스페이스 내에서 고유합니다. 클래스 이름은 대문자로 시작하며 여러 단어 사이의 공백은 생략됩니다.

속성과 작업은 클래스 범위 내에서 명확해야 합니다. 속성과 연산은 소문자 , 이후 단어의 첫 글자는 대문자로 , 공백도 생략됩니다.

  • 속성 사양 형식:

가시성 속성 이름: type[multiplicity] = default{property string}

  • 작업 사양 형식:

가시성 작업 이름(매개변수 이름: 유형): 반환 값 {속성 문자열}

3. 클래스 다이어그램에서 구체적인 클래스, 추상화, 인터페이스 및 패키지 표현

UML 클래스 다이어그램에서 구체적인 클래스 표현

특정 클래스는 클래스 다이어그램에서 직사각형 상자로 표시되며, 직사각형 상자는 세 개의 레이어로 구분됩니다. 첫 번째 레이어는 클래스 이름입니다. 두 번째 수준은 클래스의 멤버 변수이고, 세 번째 수준은 클래스의 메서드입니다. 메소드 이전의 멤버 변수 및 액세스 한정자는 기호로 표시됩니다.

UML 클래스 다이어그램에서 추상 클래스 표현

추상 클래스도 UML 클래스 다이어그램에서 직사각형 상자로 표시되지만 추상 클래스의 클래스 이름과 추상 메소드 이름은 이탤릭체로 표시됩니다.

UML 클래스 다이어그램에서 인터페이스 표현

인터페이스도 클래스 다이어그램에서 직사각형 상자로 표현되지만 클래스 표현과 다른 점은 클래스 다이어그램의 첫 번째 레이어 상단에 <<인터페이스>> 생성자로 인터페이스를 표현한다는 점입니다. 아래는 인터페이스 이름이며, 두 번째 레이어는 메소드입니다.

또한 일반적으로 롤리팝 표현으로 알려진 인터페이스의 또 다른 표현이 있는데, 이는 클래스 위에 막대 사탕(원 + 실선)이 있습니다. 원 옆에는 인터페이스 이름이 있으며 인터페이스 메소드는 구현 클래스에 나타납니다.

UML 클래스 다이어그램으로 패키지 표현

클래스와 인터페이스는 일반적으로 패키지에 표시됩니다. UML 클래스 다이어그램의 패키지 표현

 

4. 클래스 다이어그램의 관계 표현

클래스, 클래스 및 인터페이스, 인터페이스 사이에는 특정 관계가 있으며 일반적으로 UML 클래스 다이어그램에는 이들 간의 관계를 나타내는 연결이 있습니다. 관계에는 구현 관계, 일반화 관계, 연관 관계, 종속 관계, 집계 관계, 조합 관계 등 6가지 유형이 있습니다.

관계를 깨닫다

구현 관계는 인터페이스와 해당 구현 클래스 간의 관계를 나타냅니다. UML 클래스 다이어그램에서 구현 관계는 구현 클래스에서 인터페이스를 가리키는 빈 삼각형과 점선으로 구성된 화살표로 표시됩니다. Java 코드에서는 구현 관계를 키워드로 직접 변환할 수 있습니다. implements

일반화 관계

일반화는 개체 간의 상속 관계를 나타냅니다. 객체 A와 객체 B 사이에 "is a" 관계가 설정되면 둘 사이에는 상속 관계가 있게 됩니다. 객체 B는 상위 객체이고 객체 A는 하위 객체입니다. 예를 들어, 연봉 직원이 직원인 경우 연봉 직원 Salary 개체와 직원 Employee 개체 사이에 상속 관계가 있음이 분명합니다. Employee 개체는 상위 개체이고 Salary 개체는 하위 개체입니다. 물체.

UML 클래스 다이어그램에서 일반화 관계는 자식 클래스에서 부모 클래스를 가리키는 열린 삼각형과 실선으로 구성된 화살표로 표시됩니다. Java 코드에서는 객체 간의 일반화된 관계를 키워드로 직접 변환할 수 있습니다  extends.

연결 관계

연관(Association)은 객체 간의 연결을 말하며, 이를 통해 한 객체가 다른 객체의 속성과 메서드를 알 수 있습니다. Java에서 연관의 코드 표현은 한 객체가 다른 객체에 대한 참조를 포함한다는 것입니다. 즉, 객체의 클래스 코드에 다른 객체에 대한 참조가 포함되어 있으면 두 객체가 연관됩니다.

단방향 연결과 양방향 연결이 있습니다. 두 개체가 상대방의 공용 속성과 작업을 알고 있는 경우(즉, 호출할 수 있는 경우) 두 개체는 양방향 연결을 갖습니다. 단 하나의 개체만 다른 개체의 공용 속성과 작업을 알고 있는 경우(즉, 호출할 수 있는 경우) 이는 단방향 연결입니다. 대부분의 연결은 단방향 연결이므로 설정 및 유지 관리가 더 쉽고 재사용 가능한 클래스를 찾는 데 도움이 됩니다.

두 협회 사이에는 자기 상관 관계도 있습니다.

UML 다이어그램에서 양방향 관계는 이중 화살표가 있는 실선 또는 화살표가 없는 실선 이중선으로 표시됩니다. 단방향 연결은 연결되는 개체를 가리키는 화살표가 있는 실선으로 표시됩니다. 이것이 내비게이션(Navigatity)이다.

다음은 Employee가 단방향 연결인 TimeCard와 연결되어 있음을 나타냅니다.

객체는 다른 객체의 배열이나 컬렉션을 보유할 수 있습니다. UML에서는 연관 줄 끝에 다중성 표현식을 배치하여 이를 표현합니다. 다중성 표현은 숫자, 범위 또는 이들의 조합일 수 있습니다. 다중성에 의해 허용되는 표현의 예는 다음과 같습니다.

  • 번호: 정확한 수량
  • *또는 0..*: 0 이상을 의미합니다.
  • 0..1: 0 또는 1을 나타내며 종종 Java에서 널 참조로 구현됩니다.
  • 1..*: 1~배수를 나타냅니다.

연관 관계는 종속 연관, 집계 연관, 결합 연관의 세 가지 유형으로 나뉩니다.

종속성

종속 관계는 약한 연관 관계입니다. 객체 A가 객체 B를 사용하지만 B와의 관계가 그다지 명확하지 않은 경우 이 관계는 종속 관계로 간주될 수 있습니다. 객체 A가 객체 B에 의존하는 경우 A는 B를 "사용"합니다. 예를 들어, 운전자와 자동차의 관계, 운전자가 자동차를 사용할 때 둘 사이에는 의존 관계가 존재합니다.

UML 클래스 다이어그램에서 종속 관계는 사용자에서 사용된 당사자를 가리키는 점선 화살표로 표시되며, 이는 사용자 개체가 사용된 개체에 대한 참조를 보유하고 있음을 나타냅니다.

Java에서 종속성에 대한 구체적인 코드 표현은 B가 A의 생성자 또는 메소드 의 지역 변수 , 메소드 또는 생성자 의 매개변수 , 메소드의 반환 값 이거나 A가 B의 정적 메소드를 호출하는 것입니다.

아래에서는 코드 목록 1과 코드 목록 2에 표시된 Java 코드를 사용하여 개체와 개체 간의 종속성을 보여줍니다.

代码清单1所示的B类定义了一个成员变量 field1,一个普通方法 method1() 和一个静态方法 method2()。

//代码清单1 B.java
public class B {
  public String field1;   //成员变量

  public void method1() {
    System.println("在类B的方法1中");
  }

  public static void method2() {                 //静态方法
    System.out.println("在类B的静态方法2中");
  }
}
代码清单2所示的A类依赖于B类,在A类中定义了四个方法,分别演示四种依赖形式。

/* 代码清单2 A.java
  A依赖于B
*/

public class A {
  public void method1() {
    //A依赖于B的第一种表现形式:B为A的局部变量
    B b = new B();
    b.method1();
  }

  public void method2() {
    //A依赖于B的第二种表现形式: 调用B的静态方法
    B.method2();
  }

  public void method3(B b)  {
    //A依赖于B的第三种表现形式:B作为A的方法参数
    String s = b.field1;
  }

  //A依赖于B的第四种表现形式:B作为A的方法的返回值
  public B method4() {
    return new B();
  }
}

집계 관계

집합(Aggregation)은 연관 관계의 특별한 경우로, 전체와 부분의 소유권 관계, 즉 'has a' 관계를 반영합니다. 이때, 전체와 부분은 분리 가능하며, 각자의 수명주기를 가질 수 있습니다.( 자동차와 타이어와 마찬가지로 자동차가 파손되었다고 해서 타이어도 파손되는 것은 아닙니다. ) 부품은 여러 전체에 속할 수 있습니다. 여러 전체 개체가 공유할 수도 있으므로 집계 관계를 종종 공유 관계라고 합니다. 예를 들어, 회사의 부서와 직원의 관계에서 한 직원은 여러 부서에 속할 수 있으며, 한 부서가 탈퇴되면 직원은 다른 부서로 이동될 수 있습니다.

UML 다이어그램에서 집계 관계는 속이 빈 마름모와 실선 화살표로 표시됩니다. 속이 빈 마름모는 전체 측면에 있고 화살표는 부분 측면을 가리킵니다.

조합관계

구성 역시 연상의 특수한 경우로서, 전체와 부분의 포함관계, 즉 '함유한다'의 관계를 구현하기도 한다. 그러나 이때 전체와 부분은 분리될 수 없고, 부분은 다른 전체와 공유될 수 없으며, 객체 전체가 부분 객체의 생명주기를 담당한다. 이 관계는 집계보다 강력하며 강력한 집계라고도 합니다. A결합된 경우 생성 또는 릴리스를 담당 할 수 있는 수명을 알아야 하거나 어떤 방식으로든 생성 및 릴리스를 알아야 B합니다 .ABABAB

예를 들어, 사람은 머리, 몸통, 팔다리를 포함하고 있으며 수명주기는 일관됩니다. 사람은 태어날 때 머리, 몸통, 팔다리가 동시에 태어난다. 사람이 죽으면 인체의 일부인 머리, 몸통, 팔다리가 동시에 죽습니다.

UML 다이어그램에서 결합 관계는 실선 마름모와 실선 화살표로 표현되는데, 실선 마름모는 전체 면에 있고 화살표는 부분 면을 가리킵니다.

Java 개발에서 집계와 구성의 차이점

Java 코드 형태에서는 집합 및 결합 관계의 부분객체는 전체객체의 멤버변수이다. 그러나 실제 애플리케이션 개발에서는 두 개체 간의 관계가 집합인지 조합인지 구별하기 어려울 때가 있습니다. Java에서는 집계와 구성을 클래스 코드 자체와 구별할 수 없습니다. 구별되어야 한다면 전체 객체를 삭제할 때 객체의 일부도 삭제해야 한다면 결합관계이고, 그렇지 않으면 집합관계일 수 있다. 비즈니스 관점에서 볼 때, 객체 전체가 책임을 완수하기 위해 일부 객체의 참여를 요구한다면 둘 사이의 관계는 결합이고, 그렇지 않으면 집합 관계입니다.

예를 들어 자동차와 타이어, 자동차 전체, 타이어 등이 있습니다. 중고차 판매 업무 환경에서 사용하는 경우 둘 사이에는 집합 관계가 존재합니다. 타이어는 자동차의 필수적인 부분이기 때문에 타이어와 자동차를 별도로 제작한 후 조립하여 사용할 수도 있지만, 자동차를 새 타이어로 교체할 수도 있고, 타이어를 떼어내 다른 자동차에 사용할 수도 있습니다. 드라이빙 시스템 비즈니스 환경에서 사용할 경우 타이어 없이는 자동차가 주행 작업을 완료할 수 없으며 둘 사이에는 결합된 관계가 있습니다. 또 다른 예로 온라인 서점 사업에서 주문과 주문 품목의 관계를 들 수 있는데, 주문에 주문 품목이 없으면 주문 사업이 완료될 수 없으므로 둘 사이의 관계는 결합이다. 장바구니와 상품 간의 관계는 상품의 수명주기가 장바구니에 의해 제어되지 않고 상품이 여러 장바구니에 의해 공유될 수 있기 때문에 둘 사이에는 집합 관계가 있습니다.

여기에서 더 구체적으로 알아볼 수 있습니다. 8. 객체 지향 - UML 클래스 다이어그램 - Zhihu(zhihu.com)

추천

출처blog.csdn.net/weixin_62421736/article/details/132967947