GRASP(General Responsibility Assignment Software Patterns)

GRASP(General Responsibility Assignment Software Patterns)

GRASP는 클래스와 객체에 책임을 할당하기위한 지침으로 구성됩니다.
모든 패턴은 일부 소프트웨어 문제에 대한 답을 제공 하며 이러한 문제는 거의 모든 소프트웨어 개발 프로젝트에 공통적 입니다.
이러한 기술은 새로운 작업 방식을 만들기 위해 고안된 것이 아니라 객체 지향 디자인에서 오래되고 검증 된 프로그래밍 원칙 을 더 잘 문서화하고 표준화하기 위해 고안되었습니다.

GRASP는 객체 지향 소프트웨어 설계를 돕는 학습 보조 도구 인 정신적 도구 세트입니다.

Patterns

OO 디자인에서 패턴은 새로운 컨텍스트에 적용될 수있는 문제 및 솔루션에 대한 명명 된 설명입니다.
이상적으로 패턴은 다양한 상황에서 솔루션을 적용하는 방법에 대해 조언하고 힘과 절충점을 고려합니다.
특정 범주의 문제가 주어지면 많은 패턴이 개체에 대한 책임 할당을 안내합니다.

Information expert

문제 : 개체에 책임을 할당하는 기본 원칙은 무엇입니까?
솔루션 : 이를 수행하는 데 필요한 정보가있는 클래스에 책임을 할당하십시오.

Information expert는 책임을 위임 할 위치를 결정하는 데 사용되는 원칙입니다.

Creator

객체 생성은 객체 지향 시스템에서 가장 일반적인 활동 중 하나입니다.
객체 생성을 담당하는 클래스는 특정 클래스의 객체 간 관계의 기본 속성입니다.

문제 : 누가 A 개체를 생성합니까?
솔루션 : 일반적으로 다음 중 하나 이상이 적용되는 경우 일반적으로 클래스 B에 A 객체 생성 권한을 할당합니다.

Controller

문제 : 입력 시스템 이벤트를 처리해야하는 사람은 누구입니까?
솔루션 : 사용 사례 컨트롤러는 사용 사례의 모든 시스템 이벤트 를 처리하는 데 사용해야하며 둘 이상의 사용 사례에 사용할 수 있습니다.

예를 들어 Create User 및 Delete User 사용 사례의 경우 두 개의 별도 사용 사례 컨트롤러 대신 UserController 라는 단일 클래스를 가질 수 있습니다 .

Indirection

간접 패턴은 낮은 결합을 지원하고 두 요소 간의 중개 책임을 중간 오브젝트에 할당하여 두 요소 간의 잠재력을 재사용합니다.
이에 대한 예는 모델-뷰 제어 패턴에서 데이터 (모델)와 그 표현 (뷰) 간의 중개를위한 컨트롤러 구성 요소를 도입 한 것입니다.
이것은 그들 사이의 결합이 낮게 유지되도록 보장합니다.

문제 : 둘 (또는 그 이상)의 직접적인 결합을 피하기 위해 책임을 어디에 할당해야합니까?
낮은 결합이 지원되고 재사용 가능성이 더 높게 유지되도록 객체를 분리하는 방법은 무엇입니까?

솔루션 : 다른 구성 요소 또는 서비스간에 중재 할 책임을 중간 개체에 할당하여 직접 연결되지 않도록합니다.

Low coupling

커플 링은 한 요소가 다른 요소에 얼마나 강하게 연결되어 있는지, 알고 있거나, 의존 하는지를 나타내는 척도입니다.
낮은 결합 은 다음과 같은 이점에 대한 책임을 할당하는 방법을 나타내는 평가 패턴입니다.

  • 클래스 간의 종속성을 낮추고
  • 한 클래스의 변경은 다른 클래스에 미치는 영향이 적습니다.
  • 더 높은 재사용 가능성.

High cohesion

높은 응집력 은 객체를 적절하게 집중하고 관리하고 이해할 수 있도록 유지하려는 평가 패턴입니다.
높은 응집력은 일반적으로 낮은 결합을 지원하는 데 사용됩니다
높은 응집력은 주어진 요소의 책임이 밀접한 관련이 있고 집중되어 있음을 의미합니다.
프로그램을 클래스와 하위 시스템으로 나누는 것은 시스템의 응집력을 높이는 활동의 예입니다.
또는 낮은 응집력은 주어진 요소에 관련없는 책임이 너무 많은 상황입니다. 응집력이 낮은 요소는 종종 이해, 재사용, 유지 및 변경이 어렵습니다.

Polymorphism

다형성의 원리에 따르면 종류에 따라 행동의 변화를 정의하기위한 책임이 변화가 발생하는 유형에 할당됩니다.
이것은 다형성 연산을 사용하여 달성 됩니다. 유형의 사용자는 유형을 기반으로하는 명시적 분기 대신 다형성 연산을 사용해야합니다.

문제 : 유형에 따라 대안을 처리하는 방법은 무엇입니까? 플러그 형 소프트웨어 구성 요소를 만드는 방법은 무엇입니까?
솔루션 : 관련 대안이나 행동이 유형 (클래스)에 따라 다를 경우 행동에 대한 책임을 다형성 연산을 사용하여 행동이 달라지는 유형에 할당합니다
(다형성은 여러 관련 의미를 가지고 있습니다.이 맥락에서 이는 “다른 개체의 서비스 이름을 동일한 것으로 주는 것”을 의미합니다.”)

Protected variations

보호 변형 패턴은 불안정성의 초점을 배치하여 다른 요소들 (오브젝트들, 시스템, 서브 시스템)의 변형으로부터
소자를 보호 인터페이스 와 사용 다형성 이 인터페이스의 다양한 실시.

문제 : 이러한 요소의 변형이나 불안정성이 다른 요소에 바람직하지 않은 영향을 미치지 않도록 개체, 하위 시스템 및 시스템을 설계하는 방법은 무엇입니까?
솔루션 : 예측 된 변동 또는 불안정한 지점을 식별합니다. 주변에 안정적인 인터페이스를 만드는 책임을 할당합니다.

Pure fabrication

순수 제조는 특별히 낮은 결합, 높은 응집력을 달성하기 위해 만든 문제 도메인의 개념을 나타내지 않는 클래스이며,
이러한 종류의 클래스를 도메인 중심 설계 에서 “서비스”라고합니다.

참조