SlideShare une entreprise Scribd logo
1  sur  18
목 차 Whole-Part Pattern Presentation Abstraction  Control  Pattern
Whole-Part Design Pattern 의미적 Component들의 Aggregate에 도움 Whole객체에서 Part들 캡슐화 Whole은 Part들간 협력 관계 조직화 자체 기능에 대한 공통인터페이스 제공 Part에 직접 액세스 할수 없음
집합 객체를 구현해야 한다!!! 예) 마우스 마우스 휠 레이저 몸 통
기본적으로 사용자의  시각에서 기초함 하위의 부품이  상위의 부품에 계층적 Version up(각제품 변경) != 인터페이스
struct D3DXVECTOR2{ 	float x; 	float y; }; enummeventType{ fromWheel = 100, fromLager, frombody }; class Controlable { public: 	virtual void updateMouse(meventTypemtype) = 0; }; class MouseWheel{ protected: Controlable* _signalMouseWheel; 	float tAxis; public: 	void Initialize( Controlable& _target ); 	void rotationWhile(float& vAxis); 	const float& getAxis() const; }; class Mouselager{ protected: Controlable* _signalLager; 	D3DXVECTOR2 pt; public: 	void Initialize( Controlable& _target ); 	void movePosition(float& vX, float& vY); 	const D3DXVECTOR2& getMove() const; }; class Mousebody{ protected: Controlable* _signalbody; public: 	void Initialize( Controlable& _target ); 	void sendInterrupt(meventType _type, void* _value); }; class Mouse : public Controlable{ protected: MouseWheel* _mwheel; Mouselager* _mlager; Mousebody* _mbody; public: 	void Initialize(); 	virtual void updateMouse(meventTypemtype); };
>sendInterrupt( fromWheel ,(void*)&_mwheel->getAxis()); 		break; } } void MouseWheel::Initialize( Controlable& _target ) { 	_signalMouseWheel = &_target; } void MouseWheel::rotationWhile( float& vAxis ) { tAxis = vAxis; 	_signalMouseWheel->updateMouse(fromWheel); } const float& MouseWheel::getAxis() const { 	return tAxis; } void Mouselager::Initialize( Controlable& _target ) { 	_signalLager = &_target;	 } #include "Mouse.h" void Mouse::Initialize() { 	_mwheel = new MouseWheel; 	_mwheel->Initialize(*this); 	_mlager = new Mouselager; 	_mlager->Initialize(*this); 	_mbody = new Mousebody; 	_mbody->Initialize(*this); } void Mouse::updateMouse( meventTypemtype ) { 	switch(mtype) { 	case frombody :  		_mbody->sendInterrupt(frombody, 0); 		break; 	case fromLager: 		_mbody->sendInterrupt(fromLager, (void*)&_mlager->getMove()); 		break; 	case fromWheel: 		_mbody-
void Mouselager::movePosition( float& vX, float& vY ) { pt.x = vX; pt.y = vY; } const D3DXVECTOR2& Mouselager::getMove() const { 	return pt; } void Mousebody::Initialize( Controlable& _target ) { 	_signalbody = &_target; } void Mousebody::sendInterrupt(meventType _type, void* _value) { //인터럽트발생~~~  //	int86(0x00,R,R); }
거의 모든 소프트웨어 시스템에서 객체들은 다른 객체들의 조합으로 이루어져 있다. 분자와 원자의 관계와 같이, 하위 객체에서 없던 동작이 상위 객체에서 드러나는 경우  문 제
더 작은 객체들 캡슐화, 클라이언트에서 컴포넌트에 직접 액세스 못하도록 막는다. 액세스는 인터페이스를 통해한다. 복합 객체는 작은 객체로 분해,또는 기존에 있던 객체들로 구성. 그래야 재사용성, 교체성을 지원, 구성 객체들을 다른 유형의 집합 객체로 재조합할 수 있다.클라이언트는 집합 객체의내부 구성 부분에 직접 액세스를 허용하지 않는 최소단위 객체로 인지해야 한다.  해 답
Whole-Part Pattern 유형 어셈블리-파트(assembly-part)관계 생산물의 하위나 하위 부분들에 해당하는 '파트'들로 구분 컨테이너-컨텐츠(container-contents)관계 파트들만큼 민접한 결함이 아님.  콘텐트들은 동적으로 추가, 제거 가능 컬렉션-멤버(collection-members)관계 멤버들을 차례로각 멤버의 오퍼레이션을 수행 집합 객체는 하나의 의미적 단위
Part 객체의  가변성지원 역할의 분리 가능 재사용성 지원 장 점  우회방식때문에효율성이 떨어짐. Part 객체들로 분해하는 과정이복잡 단 점
Presentation-Abstraction-Control패턴 계층 구조를 이룬 에이전트들이  서로 협력을 이루어 상호작용 소프트웨어 시스템의 구조
Presentation-Abstraction-Control패턴 모든 에이전트는 어플리케이션 기능의 특정 측면 각 에이전트는 프리젠테이션, 추상, 컨트롤, 이렇게 세 가지 컴포넌트로 구성 이는 사람-컴퓨터 간에 이루어지는 상호작용으로부터 통신하는 에이전트 및 핵심기능 분리
패턴 구조 Top Level PAC agent 시스템의 핵심 기능과 사용자와 인터페이스 역할 담당 Bottom Level PAC agent  하나가 하나의 기능을 수행 또는  둘이상이 하나의 기능 협력 Intermediate Level PAC agent 둘 이상의 agent가  수행해야 하는 기능을  가질 때 이를 조합
예)
Top Level Agent는 계층 구조를 조정, 사용자와 시스템과의 상호작용의 데이터를 저장,원본 데이터 관리 Bottom Level Agent는 실질적인 기능을 수행하는 단위이며, 하나의 기능, 쓰레드, 프로세스 일 수 있다. Intermediate Level Agent는 기능 수행을 위한 하위 에이전트 조합을 만들거나 하위 에이전트로 부터 데이터를 상위 에이전트로 전달하는 역할 Presentation 컴포넌트는 시각적인 표현을 나타내며, 에이전트의 형태에 따라 구현하지 않을 수도 있다. Abstraction 컴포넌트는 데이터를 가지며, 이를 핸들링한다. 원본 데이터는 Top Level에만 있고, 나머지 에이전트는 독립적인 데이터를 가진다. Control 컴포넌트는 Presentation과 Abstraction을 연결해주는 역할과 다른 에이전트간의 통신을 담당 Intermediate Level Agent는 선택가능(Optional)하며, Top Level agent와 Bottom Level Agent로만 구성될 수도 있음
정치선거 시스템에서의 PAC 구조 예
장 점 관련된 것들의 분리 교체와 확장성의 지원     * 상호작용하는 어플리케이션은 top-level agent가 하나있고 몇몇  intermediate-level agent들 그리고 더욱 많은 bottom-level agent들이 있어야 한다. 모든 대리자  (agent)들은 어플리케이션의 기능의 특정 모듈을 담당하고 있으며 presentation,  abstraction, control의 세개의 컴포넌트로 이루어져 있다.    * 대리자의 presentation 컴포넌트는 PAC 대리자의 시각적 행위를 제공한다. abstraction 컴포넌트는 대리자 밑에 있는 데이터 모델을 유지관리하며 이 데이터를 작동할수 잇는 기능들을 제공한다. control컴포넌트는presentation 컴포넌트와 abstraction 컴포넌트를 서로 연결하며 다른 PAC 대리자들과 통신할 수 있는 기능을  대리자에게 제공한다.

Contenu connexe

Similaire à Whole part pattern

Beginning the UML - in Banking Domain (UML 교육자료)
Beginning the UML - in Banking Domain  (UML 교육자료)Beginning the UML - in Banking Domain  (UML 교육자료)
Beginning the UML - in Banking Domain (UML 교육자료)Juhyeon Lee
 
컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기우영 주
 
Design patterns
Design patternsDesign patterns
Design patternsdf
 
[Swift] Mediator
[Swift] Mediator[Swift] Mediator
[Swift] MediatorBill Kim
 
(#8.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis))스프링/자바교육/IT교육/스프링프레임워크교육/국비지...
(#8.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis))스프링/자바교육/IT교육/스프링프레임워크교육/국비지...(#8.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis))스프링/자바교육/IT교육/스프링프레임워크교육/국비지...
(#8.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis))스프링/자바교육/IT교육/스프링프레임워크교육/국비지...탑크리에듀(구로디지털단지역3번출구 2분거리)
 
HOONS닷넷 오픈소스 프로젝트 Part1.
HOONS닷넷 오픈소스 프로젝트 Part1.HOONS닷넷 오픈소스 프로젝트 Part1.
HOONS닷넷 오픈소스 프로젝트 Part1.Hojin Jun
 
CRUD Pattern in Ajax
CRUD Pattern in AjaxCRUD Pattern in Ajax
CRUD Pattern in AjaxRhio Kim
 
Ksug2015 - JPA3, JPA 내부구조
Ksug2015 - JPA3, JPA 내부구조Ksug2015 - JPA3, JPA 내부구조
Ksug2015 - JPA3, JPA 내부구조Younghan Kim
 
소프트웨어 아키텍처
소프트웨어 아키텍처소프트웨어 아키텍처
소프트웨어 아키텍처영기 김
 
[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)
[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)
[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)Sang Don Kim
 
Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Kim Hunmin
 
Reactjs 적용 사례
Reactjs 적용 사례Reactjs 적용 사례
Reactjs 적용 사례Hongchae Lee
 
[1A5]효율적인안드로이드앱개발
[1A5]효율적인안드로이드앱개발[1A5]효율적인안드로이드앱개발
[1A5]효율적인안드로이드앱개발NAVER D2
 
Implementing_AOP_in_Spring_SYS4U
Implementing_AOP_in_Spring_SYS4UImplementing_AOP_in_Spring_SYS4U
Implementing_AOP_in_Spring_SYS4Usys4u
 
Functional Kotlin makes Kotlin functional
Functional Kotlin makes Kotlin functionalFunctional Kotlin makes Kotlin functional
Functional Kotlin makes Kotlin functionalHyunWoo Lee
 

Similaire à Whole part pattern (20)

Beginning the UML - in Banking Domain (UML 교육자료)
Beginning the UML - in Banking Domain  (UML 교육자료)Beginning the UML - in Banking Domain  (UML 교육자료)
Beginning the UML - in Banking Domain (UML 교육자료)
 
react-ko.pdf
react-ko.pdfreact-ko.pdf
react-ko.pdf
 
컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기
 
Design patterns
Design patternsDesign patterns
Design patterns
 
[Swift] Mediator
[Swift] Mediator[Swift] Mediator
[Swift] Mediator
 
(#8.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis))스프링/자바교육/IT교육/스프링프레임워크교육/국비지...
(#8.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis))스프링/자바교육/IT교육/스프링프레임워크교육/국비지...(#8.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis))스프링/자바교육/IT교육/스프링프레임워크교육/국비지...
(#8.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis))스프링/자바교육/IT교육/스프링프레임워크교육/국비지...
 
Pac pattern
Pac patternPac pattern
Pac pattern
 
HOONS닷넷 오픈소스 프로젝트 Part1.
HOONS닷넷 오픈소스 프로젝트 Part1.HOONS닷넷 오픈소스 프로젝트 Part1.
HOONS닷넷 오픈소스 프로젝트 Part1.
 
CRUD Pattern in Ajax
CRUD Pattern in AjaxCRUD Pattern in Ajax
CRUD Pattern in Ajax
 
storybook
storybookstorybook
storybook
 
Ksug2015 - JPA3, JPA 내부구조
Ksug2015 - JPA3, JPA 내부구조Ksug2015 - JPA3, JPA 내부구조
Ksug2015 - JPA3, JPA 내부구조
 
소프트웨어 아키텍처
소프트웨어 아키텍처소프트웨어 아키텍처
소프트웨어 아키텍처
 
[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)
[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)
[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)
 
Eclipse RCP 1/2
Eclipse RCP 1/2Eclipse RCP 1/2
Eclipse RCP 1/2
 
Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까?
 
Reactjs 적용 사례
Reactjs 적용 사례Reactjs 적용 사례
Reactjs 적용 사례
 
[1A5]효율적인안드로이드앱개발
[1A5]효율적인안드로이드앱개발[1A5]효율적인안드로이드앱개발
[1A5]효율적인안드로이드앱개발
 
Implementing_AOP_in_Spring_SYS4U
Implementing_AOP_in_Spring_SYS4UImplementing_AOP_in_Spring_SYS4U
Implementing_AOP_in_Spring_SYS4U
 
Gef 정리
Gef 정리Gef 정리
Gef 정리
 
Functional Kotlin makes Kotlin functional
Functional Kotlin makes Kotlin functionalFunctional Kotlin makes Kotlin functional
Functional Kotlin makes Kotlin functional
 

Plus de lee

C:\Fakepath\Whole Part Pattern
C:\Fakepath\Whole Part PatternC:\Fakepath\Whole Part Pattern
C:\Fakepath\Whole Part Patternlee
 
Whole part pattern
Whole part patternWhole part pattern
Whole part patternlee
 
C:\fakepath\whole part pattern
C:\fakepath\whole part patternC:\fakepath\whole part pattern
C:\fakepath\whole part patternlee
 
Whole part pattern
Whole part patternWhole part pattern
Whole part patternlee
 
Rk charactionbalance다이어그램
Rk charactionbalance다이어그램Rk charactionbalance다이어그램
Rk charactionbalance다이어그램lee
 
Whole part pattern
Whole part patternWhole part pattern
Whole part patternlee
 

Plus de lee (6)

C:\Fakepath\Whole Part Pattern
C:\Fakepath\Whole Part PatternC:\Fakepath\Whole Part Pattern
C:\Fakepath\Whole Part Pattern
 
Whole part pattern
Whole part patternWhole part pattern
Whole part pattern
 
C:\fakepath\whole part pattern
C:\fakepath\whole part patternC:\fakepath\whole part pattern
C:\fakepath\whole part pattern
 
Whole part pattern
Whole part patternWhole part pattern
Whole part pattern
 
Rk charactionbalance다이어그램
Rk charactionbalance다이어그램Rk charactionbalance다이어그램
Rk charactionbalance다이어그램
 
Whole part pattern
Whole part patternWhole part pattern
Whole part pattern
 

Whole part pattern

  • 1. 목 차 Whole-Part Pattern Presentation Abstraction Control Pattern
  • 2. Whole-Part Design Pattern 의미적 Component들의 Aggregate에 도움 Whole객체에서 Part들 캡슐화 Whole은 Part들간 협력 관계 조직화 자체 기능에 대한 공통인터페이스 제공 Part에 직접 액세스 할수 없음
  • 3. 집합 객체를 구현해야 한다!!! 예) 마우스 마우스 휠 레이저 몸 통
  • 4. 기본적으로 사용자의 시각에서 기초함 하위의 부품이 상위의 부품에 계층적 Version up(각제품 변경) != 인터페이스
  • 5. struct D3DXVECTOR2{ float x; float y; }; enummeventType{ fromWheel = 100, fromLager, frombody }; class Controlable { public: virtual void updateMouse(meventTypemtype) = 0; }; class MouseWheel{ protected: Controlable* _signalMouseWheel; float tAxis; public: void Initialize( Controlable& _target ); void rotationWhile(float& vAxis); const float& getAxis() const; }; class Mouselager{ protected: Controlable* _signalLager; D3DXVECTOR2 pt; public: void Initialize( Controlable& _target ); void movePosition(float& vX, float& vY); const D3DXVECTOR2& getMove() const; }; class Mousebody{ protected: Controlable* _signalbody; public: void Initialize( Controlable& _target ); void sendInterrupt(meventType _type, void* _value); }; class Mouse : public Controlable{ protected: MouseWheel* _mwheel; Mouselager* _mlager; Mousebody* _mbody; public: void Initialize(); virtual void updateMouse(meventTypemtype); };
  • 6. >sendInterrupt( fromWheel ,(void*)&_mwheel->getAxis()); break; } } void MouseWheel::Initialize( Controlable& _target ) { _signalMouseWheel = &_target; } void MouseWheel::rotationWhile( float& vAxis ) { tAxis = vAxis; _signalMouseWheel->updateMouse(fromWheel); } const float& MouseWheel::getAxis() const { return tAxis; } void Mouselager::Initialize( Controlable& _target ) { _signalLager = &_target; } #include "Mouse.h" void Mouse::Initialize() { _mwheel = new MouseWheel; _mwheel->Initialize(*this); _mlager = new Mouselager; _mlager->Initialize(*this); _mbody = new Mousebody; _mbody->Initialize(*this); } void Mouse::updateMouse( meventTypemtype ) { switch(mtype) { case frombody : _mbody->sendInterrupt(frombody, 0); break; case fromLager: _mbody->sendInterrupt(fromLager, (void*)&_mlager->getMove()); break; case fromWheel: _mbody-
  • 7. void Mouselager::movePosition( float& vX, float& vY ) { pt.x = vX; pt.y = vY; } const D3DXVECTOR2& Mouselager::getMove() const { return pt; } void Mousebody::Initialize( Controlable& _target ) { _signalbody = &_target; } void Mousebody::sendInterrupt(meventType _type, void* _value) { //인터럽트발생~~~ // int86(0x00,R,R); }
  • 8. 거의 모든 소프트웨어 시스템에서 객체들은 다른 객체들의 조합으로 이루어져 있다. 분자와 원자의 관계와 같이, 하위 객체에서 없던 동작이 상위 객체에서 드러나는 경우 문 제
  • 9. 더 작은 객체들 캡슐화, 클라이언트에서 컴포넌트에 직접 액세스 못하도록 막는다. 액세스는 인터페이스를 통해한다. 복합 객체는 작은 객체로 분해,또는 기존에 있던 객체들로 구성. 그래야 재사용성, 교체성을 지원, 구성 객체들을 다른 유형의 집합 객체로 재조합할 수 있다.클라이언트는 집합 객체의내부 구성 부분에 직접 액세스를 허용하지 않는 최소단위 객체로 인지해야 한다. 해 답
  • 10. Whole-Part Pattern 유형 어셈블리-파트(assembly-part)관계 생산물의 하위나 하위 부분들에 해당하는 '파트'들로 구분 컨테이너-컨텐츠(container-contents)관계 파트들만큼 민접한 결함이 아님.  콘텐트들은 동적으로 추가, 제거 가능 컬렉션-멤버(collection-members)관계 멤버들을 차례로각 멤버의 오퍼레이션을 수행 집합 객체는 하나의 의미적 단위
  • 11. Part 객체의 가변성지원 역할의 분리 가능 재사용성 지원 장 점 우회방식때문에효율성이 떨어짐. Part 객체들로 분해하는 과정이복잡 단 점
  • 12. Presentation-Abstraction-Control패턴 계층 구조를 이룬 에이전트들이 서로 협력을 이루어 상호작용 소프트웨어 시스템의 구조
  • 13. Presentation-Abstraction-Control패턴 모든 에이전트는 어플리케이션 기능의 특정 측면 각 에이전트는 프리젠테이션, 추상, 컨트롤, 이렇게 세 가지 컴포넌트로 구성 이는 사람-컴퓨터 간에 이루어지는 상호작용으로부터 통신하는 에이전트 및 핵심기능 분리
  • 14. 패턴 구조 Top Level PAC agent 시스템의 핵심 기능과 사용자와 인터페이스 역할 담당 Bottom Level PAC agent 하나가 하나의 기능을 수행 또는 둘이상이 하나의 기능 협력 Intermediate Level PAC agent 둘 이상의 agent가 수행해야 하는 기능을 가질 때 이를 조합
  • 15. 예)
  • 16. Top Level Agent는 계층 구조를 조정, 사용자와 시스템과의 상호작용의 데이터를 저장,원본 데이터 관리 Bottom Level Agent는 실질적인 기능을 수행하는 단위이며, 하나의 기능, 쓰레드, 프로세스 일 수 있다. Intermediate Level Agent는 기능 수행을 위한 하위 에이전트 조합을 만들거나 하위 에이전트로 부터 데이터를 상위 에이전트로 전달하는 역할 Presentation 컴포넌트는 시각적인 표현을 나타내며, 에이전트의 형태에 따라 구현하지 않을 수도 있다. Abstraction 컴포넌트는 데이터를 가지며, 이를 핸들링한다. 원본 데이터는 Top Level에만 있고, 나머지 에이전트는 독립적인 데이터를 가진다. Control 컴포넌트는 Presentation과 Abstraction을 연결해주는 역할과 다른 에이전트간의 통신을 담당 Intermediate Level Agent는 선택가능(Optional)하며, Top Level agent와 Bottom Level Agent로만 구성될 수도 있음
  • 18. 장 점 관련된 것들의 분리 교체와 확장성의 지원     * 상호작용하는 어플리케이션은 top-level agent가 하나있고 몇몇  intermediate-level agent들 그리고 더욱 많은 bottom-level agent들이 있어야 한다. 모든 대리자  (agent)들은 어플리케이션의 기능의 특정 모듈을 담당하고 있으며 presentation,  abstraction, control의 세개의 컴포넌트로 이루어져 있다.    * 대리자의 presentation 컴포넌트는 PAC 대리자의 시각적 행위를 제공한다. abstraction 컴포넌트는 대리자 밑에 있는 데이터 모델을 유지관리하며 이 데이터를 작동할수 잇는 기능들을 제공한다. control컴포넌트는presentation 컴포넌트와 abstraction 컴포넌트를 서로 연결하며 다른 PAC 대리자들과 통신할 수 있는 기능을  대리자에게 제공한다.