1 Introduction to CRC Cards CRC Card = Class Responsibility Collaborator Card Invented in 1989 by...

27
1 Introduction to CRC Cards • CRC Card = Class Responsibility Collaborator Card • Invented in 1989 by Kent Back and Ward Cunningham • “The CRC Card Book” by D.Bellin and S.Simone. Pub: Addison Wesley, 1997. ISBN: 0201895358.

Transcript of 1 Introduction to CRC Cards CRC Card = Class Responsibility Collaborator Card Invented in 1989 by...

Page 1: 1 Introduction to CRC Cards CRC Card = Class Responsibility Collaborator Card Invented in 1989 by Kent Back and Ward Cunningham The CRC Card Book by D.Bellin.

1

Introduction to CRC Cards

• CRC Card = Class Responsibility Collaborator Card

• Invented in 1989 by Kent Back and Ward Cunningham

• “The CRC Card Book” by D.Bellin and S.Simone. Pub: Addison Wesley, 1997. ISBN: 0201895358.

Page 2: 1 Introduction to CRC Cards CRC Card = Class Responsibility Collaborator Card Invented in 1989 by Kent Back and Ward Cunningham The CRC Card Book by D.Bellin.

2

CRC Cards:

• Help explore objects

• Provide an ’easy' introduction

• Starting point of many methodologies

• Used in industry

• Widely used in teaching

Page 3: 1 Introduction to CRC Cards CRC Card = Class Responsibility Collaborator Card Invented in 1989 by Kent Back and Ward Cunningham The CRC Card Book by D.Bellin.

3

Format of CRC CARDS (1)A CRC card contains the following information:

Class Name:

Responsibilities:

(what class does or knows)

Collaborators:

(which classes help itperform eachresponsibility)

Page 4: 1 Introduction to CRC Cards CRC Card = Class Responsibility Collaborator Card Invented in 1989 by Kent Back and Ward Cunningham The CRC Card Book by D.Bellin.

4

Format of CRC CARDS (2)

• Index cards

• Post-It notes

• Walls/Whiteboards/Desks

• String and Blu-tack

Page 5: 1 Introduction to CRC Cards CRC Card = Class Responsibility Collaborator Card Invented in 1989 by Kent Back and Ward Cunningham The CRC Card Book by D.Bellin.

5

FINDING CLASSES Method:

1. Read specification

2. Work through requirements, highlighting nouns and noun phrases to give candidate classes.

3. Work through candidates, deciding likely classes and rejecting unlikely.

Page 6: 1 Introduction to CRC Cards CRC Card = Class Responsibility Collaborator Card Invented in 1989 by Kent Back and Ward Cunningham The CRC Card Book by D.Bellin.

6

READ SPECIFICATION

• If you don't have one, WRITE your own.

• The specification should:– describe the goals of the design– discuss the things the system should do

• i.e. desired responses to expected inputs

Page 7: 1 Introduction to CRC Cards CRC Card = Class Responsibility Collaborator Card Invented in 1989 by Kent Back and Ward Cunningham The CRC Card Book by D.Bellin.

7

HIGHLIGHTING NOUN PHRASES• convert plurals to singulars• discard obvious nonsense classes (but keep all

rest)• remove synonyms (but keep BEST descriptor)• beware adjectives (they can be irrelevant, but

can mean a whole new class exists)• beware hidden nouns e.g. passive voice "the

thing is activated" = "SOMETHING activates the thing"

Page 8: 1 Introduction to CRC Cards CRC Card = Class Responsibility Collaborator Card Invented in 1989 by Kent Back and Ward Cunningham The CRC Card Book by D.Bellin.

8

CANDIDATE CLASSES

• physical objects e.g. printer, switch• cohesive entities e.g. file, window• categories of classes (may become abstract

superclasses)• interfaces both to user and to other programs• attribute values (NOT attributes) e.g. "circle

has radius in real numbers" : circle and real are classes; radius is not.

Page 9: 1 Introduction to CRC Cards CRC Card = Class Responsibility Collaborator Card Invented in 1989 by Kent Back and Ward Cunningham The CRC Card Book by D.Bellin.

9

FINDING CLASSES

• The process of identifying classes is iterative - some will be missed, others will be amalgamated Likely classes:– any physical objects– any 'cohesive abstractions' e.g. a file– any interfaces to outside world– any categories of class e.g. "there are various

types of whatsits" – values of attributes of objects

Page 10: 1 Introduction to CRC Cards CRC Card = Class Responsibility Collaborator Card Invented in 1989 by Kent Back and Ward Cunningham The CRC Card Book by D.Bellin.

10

FINDING CLASSES Problems:• Warnings

– adjectives– passive voice e.g. they travelled to the seaside

• Reject:– attributes– nouns that are really verbs e.g. the chance of

throwing a six is 1/6 – objects outside system

Page 11: 1 Introduction to CRC Cards CRC Card = Class Responsibility Collaborator Card Invented in 1989 by Kent Back and Ward Cunningham The CRC Card Book by D.Bellin.

11

IDENTIFYING RESPONSIBILITIES• Responsibilities are concerned with:

– the maintenance of knowledge– the actions the object can perform

• Technique: 1. Highlight verbs/phrases in requirements

2. Do walkthroughs

3. Spread intelligence

4. Keep behaviour and knowledge close

Page 12: 1 Introduction to CRC Cards CRC Card = Class Responsibility Collaborator Card Invented in 1989 by Kent Back and Ward Cunningham The CRC Card Book by D.Bellin.

12

What are Responsibilities?

• They contain two key items:– the knowledge that the object maintains– the actions the object can perform

• They say WHAT gets done, not HOW its done

Page 13: 1 Introduction to CRC Cards CRC Card = Class Responsibility Collaborator Card Invented in 1989 by Kent Back and Ward Cunningham The CRC Card Book by D.Bellin.

13

Identifying Responsibilities

• Read requirements & highlight: – verbs

– information (which some object must maintain)

• Check these are actions that a system object must perform

• Try a walkthrough – try anthropomorphism/personification

• Check all your classes are doing something useful

Page 14: 1 Introduction to CRC Cards CRC Card = Class Responsibility Collaborator Card Invented in 1989 by Kent Back and Ward Cunningham The CRC Card Book by D.Bellin.

14

Assigning Responsibilities

• evenly distribute system intelligence• state responsibilities as generally as

possible• keep behaviour with related information (if

any)• keep information about one thing in one

place• share responsibilities among related objects

Page 15: 1 Introduction to CRC Cards CRC Card = Class Responsibility Collaborator Card Invented in 1989 by Kent Back and Ward Cunningham The CRC Card Book by D.Bellin.

15

Look at Relationships between ClassesTaking classes from within your system, see if there

are examples of:• is-kind-of

– maybe superclass should have responsibility?

• is-analogous-to– if have similar responsibilities, perhaps should be

common superclass with it?

• is-part-of– therefore clarify responsibilities between parts of an

aggregate class

Page 16: 1 Introduction to CRC Cards CRC Card = Class Responsibility Collaborator Card Invented in 1989 by Kent Back and Ward Cunningham The CRC Card Book by D.Bellin.

16

Difficulties

• Missing classes– perhaps worth encapsulating unassigned

responsibilities to a new class?

• Uncertain Assignment of Responsibilities– i.e. maybe one responsibility could go to

two different classes– solve by walkthrough?

Page 17: 1 Introduction to CRC Cards CRC Card = Class Responsibility Collaborator Card Invented in 1989 by Kent Back and Ward Cunningham The CRC Card Book by D.Bellin.

17

COLLABORATIONS

• A collaboration is where one class (a client) needs another one (a server) in order to perform its own responsibilities.– NB this is a one-way relationship

• Each responsibility may have:– no collaborations– one collaboration– many collaborations

Page 18: 1 Introduction to CRC Cards CRC Card = Class Responsibility Collaborator Card Invented in 1989 by Kent Back and Ward Cunningham The CRC Card Book by D.Bellin.

18

FINDING COLLABORATIONS (1)• Using CRC cards, work through ALL

responsibilities identifying collaborators;. • Therefore, for each responsibility ask:

– can the class do it alone? – if not:

• what knowledge does it need?• what processing does it need?• which classes have what it needs?

Page 19: 1 Introduction to CRC Cards CRC Card = Class Responsibility Collaborator Card Invented in 1989 by Kent Back and Ward Cunningham The CRC Card Book by D.Bellin.

19

FINDING COLLABORATIONS (2)• For each CRC card class ask:

– what does it do or know? – what classes need this service or knowledge? – are those classes collaborating with this class?

• Confirm by looking at classes and ensure if a class does/knows something, it is being used

Page 20: 1 Introduction to CRC Cards CRC Card = Class Responsibility Collaborator Card Invented in 1989 by Kent Back and Ward Cunningham The CRC Card Book by D.Bellin.

20

Examine Relationships (1): • Collaboration is strongly indicated by:

– has-knowledge-of e.g. a car needs to know the speed limit, which it gets from the sign on the side of the road or ...

– depends-on (changes-with) e.g. pressing accelerator increases speed of wheels and decreases petrol level (but beware INDIRECT collaborations)

– (composite) is-part-of e.g. to turn a car, the car will need to send messages to its steering wheel, wheels

Page 21: 1 Introduction to CRC Cards CRC Card = Class Responsibility Collaborator Card Invented in 1989 by Kent Back and Ward Cunningham The CRC Card Book by D.Bellin.

21

Examine Relationships (2):

• Collaboration is not necessarily indicated by container (is-part-of ) aggregation

• For example an array holds a group of elements but doesn’t usually collaborate with them as it doesn’t need to know their values or use any of their methods.

Page 22: 1 Introduction to CRC Cards CRC Card = Class Responsibility Collaborator Card Invented in 1989 by Kent Back and Ward Cunningham The CRC Card Book by D.Bellin.

22

CRC CARDSAdditional information:

Class: Abstract/Concrete

Superclass(es):

Subclasses(es):

Responsibilities

(what class does or knows)

Collaborators

(which classes help itperform eachresponsibility)

Page 23: 1 Introduction to CRC Cards CRC Card = Class Responsibility Collaborator Card Invented in 1989 by Kent Back and Ward Cunningham The CRC Card Book by D.Bellin.

23

CRC Terms versus UML Terms• CRC are similar to classes, but are

treated like objects• attributes are the same in both CRC and

UML• “responsibilities” are “operations”• Superclass and subclass describe

inheritance relations• Collaborators are “associations”

Page 24: 1 Introduction to CRC Cards CRC Card = Class Responsibility Collaborator Card Invented in 1989 by Kent Back and Ward Cunningham The CRC Card Book by D.Bellin.

24

Brainstorming

• All ideas are potential good ideas• Think fast and furiously first, ponder later• Give every voice a turn• A little humour can be a powerful force• Use a Round-Robin technique• Discuss and select

(from Bellin and Simone, 1997)

Page 25: 1 Introduction to CRC Cards CRC Card = Class Responsibility Collaborator Card Invented in 1989 by Kent Back and Ward Cunningham The CRC Card Book by D.Bellin.

25

From Bennett el al:

• Working in groups of 4 half the groups brainstorm Q8.2 and produce an OHP, other half brainstorm Q8.3 and produce an OHP.

• Present to class.

Page 26: 1 Introduction to CRC Cards CRC Card = Class Responsibility Collaborator Card Invented in 1989 by Kent Back and Ward Cunningham The CRC Card Book by D.Bellin.

26

Working in groups

• try in ways suggested by others

• if stuck/arguing, defer decision to later

• try "flexible visualisation”

• do a Walk Through

• Try personification/anthropomorphism!

Page 27: 1 Introduction to CRC Cards CRC Card = Class Responsibility Collaborator Card Invented in 1989 by Kent Back and Ward Cunningham The CRC Card Book by D.Bellin.

27

From Bennett el al:

• Read FoodCo transcript p120

• Working in groups of 4 produce CRCs for FoodCo based on the transcript