ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [OOP/UML] Class Diagram
    Learn/OOP&UML 2022. 8. 12. 00:31

    # UML Class Diagram

    OOD에서 UML Class Diagram은 두 가지 뜻으로 쓰인다. 

    1. Domain model

    2. Design Class Diagram (DCD)

     

    # Object 

    - 소문자로 시작

    - 어느 클래스에서 왔는지 적고싶으면 콜론하고 적음

    - Operation은 해당 클래스는 다 같은 것을 가지므로 표시하지 않음

     

    # Object Diagram

    - 별거없고 관련있는 오브젝트끼리 연결한 것. 

    # Attribute Syntax

    + : public (default for operation)

    - : private (default for attribute)

    # : protected

    ~ : package

    / : 값을 직접 넣는게 아니라 계산되는 값 

    name : 소문자로 시작

    type : String / int / Date 등 또는 Class 이름도 가능

        > primitive data type 

            - Predefined : Boolean, Integer, String 등..

            - User-defined: <<primitive>> 로 표기

            - Composite data type: <<datatype>>으로 표기

        > Enumerations

    Multiplicity: String[1...*]이렇게 되어있으면 String이 한 줄 또는 여러 줄이라는 뜻 (없으면 default 한 줄)

    Default Value: String="pw123" 이런 식으로 값 지정

    Properties: 중괄호 안에 특성 기입

    # Operation Syntax

    별거없음. 언어에 따라 다른데 out은 잘 안씀. 

    # Operation and Method

    - Operation을 특정 언어로 구현한 것을 Method라고 함. 

    - Metod는 누가 구현했냐에 따라 다를 수 있음

     

    # Note Symbol

    오른쪽 위가 접힌 종이 모양. 적고싶은거 다 적으면 됨. (코드, 코멘트, 제약사항 등..)

     

     

    # Class Relationship

    - Association이 default

    # Association

    한 클래스의 오브젝트가 다른 클래스의 오브젝트들과 오랫동안 같이 작동할 때 

    # Binary Association - Navigability

    A클래스는 B클래스의 public들을 볼 수 있다. (사용할 수 있다. )

         > private는 안됨

     

    A는 B에 정의된 것을 아무것도 볼 수 없다. 

    (화살표만 있어도 X가 있는 것과 같음)

     

    # Association - Association Class

    - Association에 점선으로 연결된게 Association Class

    - Person과 Company가 1:1이 아닌 n:1일 때, Person에 넣기 애매한 정보는 Employment에 넣음

     

    # Association - Singleton Class

    - 클래스 당 인스턴스가 하나만 있는 경우

    - 오프젝트들의 커뮤니케이션이 원활하지 않으므로 좋지 않은 패턴 (가능하면 사용하지 말 것)

     

    #  Association -  Active Class

    - thread가 되는 클래스

    - 박스 좌우에 세로선 하나씩 더 그으면 됨. 

     

    # Interface

    일반적으로 아래와 같은 형태를 많이 씀. 

    notation에 socket + lollipop도 있는데 이건 component diagram에서 많이 씀. 

    #  Aggregation

    - 한 클래스가 다른 클래스의 부분일 때 (포함)

    - 두 가지 타입이 있음. 

        1. Shared Aggregation (weak)

        2. Composition (strong)

     

    # Shared Aggregation

    - 보통 포함관계끼리 하나가 삭제되면 다른 하나도 삭제 되어야 함. 

        > 그렇지 않고 하나가 살아남을 수 있으면 Shared Aggregation (weak belonging)

     

    - B가 A를 가졌다는 표시 (혼동 주의!)

    <예시>

    - LabClass가 없어졌다고 학생이 없어지는게 아님. 

    - Study Program이 없어지면 Course가 없을 수도 있음. (StudyProgram이 1...*이므로)

      Study Program이 있어도 Course가 없을 수 있음. (*은 0도 포함)

    # Composition

    - B가 A를 가졌다는 표시

    <예시>

    - Building이 없어지면 LectureHall도 없어짐. 

    - LectureHall이 없어도 Beamer가 있을 수 있음. 

        > 하지만 LectureHall이 있다면, LectureHall이 없어지면 Beamer도 없어짐. 

    - 손이 없으면 손가락이 있을 수 없음. 

    - 만약 Shared Aggregation이었으면, 손이 없어도 손가락은 남아있을 수 있음. 

    # Shared Aggregation and Composition

    1. 차가 없어도 타이어는 있을 수 있음. (O)

        > 단, 차가 있다면 없어질 때 같이 없어짐

    2. 타이어는 반드시 차가 있어야만 존재 (X) 

    3. 여러 대의 차가 타이어를 공유 (X)

    4. 차마다 1~2개의 타이어 "타입"을 가지고 있음. (O) 

    # Generalization (Inheritance)

    - public만 상속됨. private는 상속되지 않음. 

    - 똑같은 이름의 attribute를 쓰면 overwrite

     

    # Abstract Class

    - 본인은 new해서 인스턴스를 만들지 않음. 

    - child만 new해서 인스턴스를 만듦. 

    - 아래의 예시에서 person은 비어있으면 안됨. 사람 속성이 다 있어야됨. 

    # Multiple Inheritance

    - 자바는 안되고 C++는 됨

    # Class Diagram 그리기

    - 자동으로 class diagram을 쉽게 그리는 방법은 없다. 

    - 명사를 기반으로 찾으면 조금 더 수월하다. 

     

    # QUIZ

    정답: 4번. 항상 표시되어야하는건 아니다. 

    단, 적혀있다면 안적힌 attribute는 private, 안적힌 operation은 public이다. 

     

    3번은 엄밀히 말하면 둘다 '항상'은 아님. 둘 중 하나만 있어도 됨. 

    정답: 1번. 모든게 내려가는게 아니라 public만 내려감. private는 안내려감. 

     

    정답: 1번. Shared Aggregation을 표현한 다이어그램. 

    4. 없을수도 있다. (0이 있으니)

    5. Book이 위에있음. 

     

    'Learn > OOP&UML' 카테고리의 다른 글

    [OOP/UML] Statechart Diagram  (0) 2022.08.17
    [OOP/UML] Sequence Diagram  (0) 2022.08.14
    [OOP/UML] Use Case Diagram  (0) 2022.08.10
    [OOP/UML] UML  (0) 2022.08.09
    [OOP/UML] Object-Oriented Development  (0) 2022.08.08

    댓글

Designed by Tistory.