---
title: "Short note: GRASP"
subject: "Object Oriented Analysis and Design"
chapter: 3
key: "semester_6/object_oriented_analysis_and_design:short-note-grasp"
source: https://www.bctengineer.com/q/semester_6/object_oriented_analysis_and_design/short-note-grasp
site: BCT Engineering
---

# Short note: GRASP

Object Oriented Analysis and Design · Chapter 3: Object Oriented Design

- Asked in: 2073 Bhadra, 4 marks
- Video: [GRASP | OOAD| Dr. M.Vedaraj, Associate Professor, CSE, RMDEC](https://www.youtube.com/watch?v=A755e7bR6BI) — RMDCSE
- Answer checked by Claude Sonnet 5.5 on 2026-10-14
- Page: https://www.bctengineer.com/q/semester_6/object_oriented_analysis_and_design/short-note-grasp
- Whole chapter: https://www.bctengineer.com/md/semester_6/object_oriented_analysis_and_design/chapter-3

## Question

Write a short note on GRASP.

## Short answer

GRASP (General Responsibility Assignment Software Patterns) by Larman provides nine principles for allocating responsibilities, including Information Expert, Creator, Controller, Low Coupling, High Cohesion, Polymorphism, Pure Fabrication, Indirection, and Protected Variations, guiding robust object-oriented design.

## Answer

**GRASP** stands for **General Responsibility Assignment Software Patterns** (Principles), described by Craig Larman. They are a set of guidelines for deciding which class should be responsible for what in an object-oriented design. Responsibilities are of two kinds: **doing** (compute, create, control others) and **knowing** (private data, related objects).

#### The nine GRASP patterns
1. **Information Expert** - give the responsibility to the class that holds the needed information.
2. **Creator** - class B creates A if B contains, aggregates, records or closely uses A.
3. **Controller** - first object beyond the UI that receives and coordinates a system event (a use case or session controller).
4. **Low Coupling** - keep dependency between classes low.
5. **High Cohesion** - keep the responsibilities of a class strongly related and focused.
6. **Polymorphism** - use polymorphic operations for behaviour that varies by type, not conditionals.
7. **Pure Fabrication** - create an artificial class (not from the domain) to achieve low coupling and high cohesion, e.g. a database storage class.
8. **Indirection** - add an intermediate object to decouple two classes.
9. **Protected Variations** - protect elements from the variations in other elements using stable interfaces.

Example: in a POS, `Sale.getTotal()` follows Information Expert, `Sale` creates `SalesLineItem` (Creator), and `ProcessSaleController` handles `enterItem()` (Controller).

GRASP gives the reasoning behind good object design and is applied while drawing interaction diagrams.

## Check yourself

The answer's key points as multiple-choice questions, with the correct option and why.

1. What does GRASP help decide?
   A. Which class should be responsible for what
   B. Which database to use
   C. Which screen colours to use
   D. Which language to code in
   Answer: A. GRASP guides assignment of responsibilities to classes. (Key point: GRASP meaning)

2. What is the Controller pattern?
   A. The class that draws the UI
   B. The class that stores data
   C. The first object beyond the UI that receives and coordinates a system event
   D. The class that creates all others
   Answer: C. A controller handles a system event such as enterItem() for a use case or session. (Key point: Controller)

3. What is Pure Fabrication?
   A. Copying a domain class
   B. An artificial non-domain class made to achieve low coupling and high cohesion
   C. Removing a class
   D. Using inheritance only
   Answer: B. A made-up class such as a database storage class keeps domain classes cohesive and loosely coupled. (Key point: Pure Fabrication)
