본문 바로가기
소프트웨어공학/디자인 패턴

[Design Pattern] 디자인 패턴 / UML Base .java

by javapp 자바앱 2021. 9. 11.
728x90

2021.09

디자인 패턴 강의 정리

 


UML

A standard language for writing software blueprints

 

 

어휘 (Vocabularies) 

세 종류의 Building block 으로 구성된다.

 - Things , Relationships, Diagrams

Things

Structural things
모델의 정적 부분
(개념적 요소)을 나타냄
interface, class,
Behavioral things
모델의 동적 부분
(행동)을 나타냄
interaction (객체간 messaging),
Grouping things
organizational part
package and its variations
Annotational things
explanatory part
note
Relation-ships

Tie things together.
Things 간의 관계
* 관계를 나타내는 방법
Dependency Association
Generalization Realization
Diagrams Group interesting
collections of things.
class diagram, interaction diagram,
state diagram, package diagram, ...

* 객체지향소프트웨어 : 실제 세계의 개념(사물을) 객체화하여 소프트웨어를 개발하는 방법


객체 : 상태와 행동으로 나타낸다.

 

객체 지향 설계

- 기본요소 - class, interface 등

- 객체들은 interaction (객체간 messaging)

- 객체간의 관계 - Dependency, Association, Generalization, Realization

- 객체간 관심 그룹 확인 - class diagram, interaction daiagram

 

 


 

 

Common mechanisms

 

Basic symbol : 이름, 속성, 연산, 책임

 

 

Common divisions

 

Extensibility mechanisms 

- Stereotype (새로운 종류의 building blocks)

 << ... >> -> Stereotype

 

 

 

 

 

 

예외 확장,                      Tagged:(Version, author) ,    제약 조건 constraint / {ordered} : 속성 

Stereotype : 새로운 타입을 만들 수 있게 한다.

 

 


Class

 

 

name : 이름, attributes : 속성, operations : 연산 , responsibilities : 책임(s)

 

- Responsibilities(기능) , 한 클래스에 대한 계약 , 서비스 제공

 

- 설계원칙중 하나

Single Responsibility Principle(SRP) : 한 가지 클래스는 한가지 사항만 책임

 

파악 되는 대로 작성!

 

 

 

Adornments

Visibility / Owner Scope / Multiplicity

 

Abstract , Root/Leaf, Polymorphic

 

 

Class : 구상 (concrete)

         추상 (abstract)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Template Class

Parameterized Class

 

implicit binding : 묵시적 표현

explicit binding : 명시적으로 표현 할 수 있다.

 

 


 

Full Syntax

 

Attribute 가시성 이름:타입[multiplicity]=초기값 {속성}, {속성}, ...
- origin:Point=(0,0) {changeable}
속성: readonly, changeable, ordered,
set, bag, ordered set, list.
Operation 가시성 이름(가인수리스트):반환타입 {속성}, {속성}, ...
+ setOrigin( p:Point) :void {guarded}
속성: query 상태 변경하지 않음.
sequential 객체 외부에서 동기화 보장해야 함.
guarded 객체 자신이 동기화 보장함.
concurrent 객체 자신이 atomicity 보장함.
Parameter 방향 이름:타입=초기값
* direction: in, out, inout /
파라미터로 받아올때 in(call by value),
넘기기 out(call by result),
레퍼런스(객체) inout(call by value-result)

m(out in area) -> caller

 

 


 

Interface

 

• interface Is a collection of operations specifying a service(externally visible behavior) of a class

                                                                - contract -> 상호간 신뢰

 

객체지향 클래스간 커플링이 낮을 수록 좋다. -> 인터페이스와 의존

* 클래스간 커플링 : tight , concrete class 커플링

* 클래스 인터페이스 : loose, abstract 커플링 / Resilient(회복성있는, 탄력있는) 설계

 

 

dependency: requires dependency (usage)

realization: provides dependency

 

Tracker 는 Observer를 파라미터로 사용, 의존

 

 

 


 

Relationship

 

Class(Things)는 협력한다.

협력 방법은 relationship 을 사용하여 모델링

- Dependency, Association, Generlization, Realization

 

Relationship

클래스 ... 관계를 나타냄
Dependency 사용 관계: Uses
Association 결합 방법(구조적 관계): Knows
2 special kinds
Aggregation
Composition
Whole/Part 관계:
HAS-A (many owners)               약한 관계
Exclusive HAS-A (a single owner) 강한 관계
Generalization 일반화/특수화 관계: IS-A
Realization 계약/구현 관계: Realizes

 

 

dependency Window uses Event.

association DialogBox knows Control.

generalization ConsoleWindow is a (special kind) of Window.

 

 

 

 

realization

 

 


 

Association  (대등한 관계)

class Student 
{
// knows(학생이 알아야한다.)
  		Course[] cs; 
  		add(Course c) {...}
} // high 커플링 발생

[학생] -> 수강함 -> [과목]

 

 

 

Dependency

class Calendar {
   	void setTime(Date d) { ... } // uses
}

[달력] -> <<use>> -> [Date]

켈렌더가 Date를 사용함.

 

 

 

multiplicity

a link == an instance of an association

Person   Company
employers : Company[0..*]   employees : Person[1..*]
     

 

 


 

Aggregation(집합체) / Composition(구성)

 

Aggregation

public class Switch 
{
	private List<Command> history = new ArrayList<>(); //optional

	public void storeAndFire(Command cmd) { //requested command
		history.add(cmd); 	//실행한 명령을 저장해 둠, optional
		cmd.execute(); 	//명령객체에게 실행을 요청함(forwarding)
	}
}

 

Polymorphic Composition

public abstract class Duck 
{ // Context
	FlyBehavior flyBehavior; // Polymorphic Composition

	abstract void display();
	public void swim() { System.out.println("All ducks float, even decoys!"); }
	public void fly() { flyBehavior.fly(); } // Delegation

	// 실행 중 행동 변경도 가능
	public void setFlyBehavior(FlyBehavior fb) {  flyBehavior = fb; }
}

 


Dependency

클래스간 사용 관계

 

name 대신 dependeny 유형을 나타내는 

<<stereotype>>을 사용함.

 

 

 

 

 

 

 

 


Class Diagram

시스템의 정적 구조를 모델링

 

(용도 2) collaborations 모델링

Collaboration) A society of classes/interfaces/other elements that work together

to provide some cooperative behavior

서로 메시지 전송 수신, 서로 협력

 

 

 

 


 

Interaction Diagram

 

Interaction (객체 간 메시지 전송하는 행위)

Interaction Diagram  

- 시스템의 동적 행위를 모델링함:

 

- Sequence diagram) 메시지의 시간적 순서를 강조함.

 

- Communication diagram) 상호작용하는 객체들의 구조적 구성을 강조함.

 

 

Sequence diagram

-- Sequencing

-- Structured control

Communication diagram


 

Collaborations

 

Structural (or Static) aspects of a collaboration: classifiers + relationships.

- Class diagram, etc.

 

Behavioral (or Dynamic) aspects of a collaboration: objects + messagings

- Sequence diagram, etc.

 

댓글