Class-responsibility-collaboration (CRC) cards are a
brainstorming
Brainstorming is a group creativity technique by which efforts are made to find a conclusion for a specific problem by gathering a list of ideas spontaneously contributed by its members.
In other words, brainstorming is a situation where a grou ...
tool used in the design of
object-oriented
Object-oriented programming (OOP) is a programming paradigm based on the concept of "objects", which can contain data and code. The data is in the form of fields (often known as attributes or ''properties''), and the code is in the form of pro ...
software. They were originally proposed by
Ward Cunningham and
Kent Beck
Kent Beck (born 1961) is an American software engineer and the creator of extreme programming, a software development methodology that eschews rigid formal specification for a collaborative and iterative design process. Beck was one of the 17 ori ...
as a teaching tool
but are also popular among expert designers
[Martin Fowler, ''UML Distilled'', chapter 4] and recommended by
extreme programming
Extreme programming (XP) is a software development methodology intended to improve software quality and responsiveness to changing customer requirements. As a type of agile software development,"Human Centred Technology Workshop 2006 ", 2006, PD ...
practitioners.
[A concise introduction at extremeprogramming.org](_blank)
/ref> Author Martin Fowler has written that CRC cards may be a sensible means by which multiple alternative interactions may be quickly devised, as they avoid a great deal of drawing and erasing. CRC card sessions may be followed by the creation of sequence diagrams
A sequence diagram or system sequence diagram (SSD) shows process interactions arranged in time sequence in the field of software engineering. It depicts the processes involved and the sequence of messages exchanged between the processes needed ...
to capture interactions that are identified.
CRC cards are frequently employed during the design phase of system and software development to transition use-case descriptions into class diagrams, allowing a smoother transition with a greater overview and permitting developers to implement solutions with low binding and high cohesion.
CRC cards are usually created from index cards. Members of a brainstorming session will write one CRC card for each relevant class
Class or The Class may refer to:
Common uses not otherwise categorized
* Class (biology), a taxonomic rank
* Class (knowledge representation), a collection of individuals or objects
* Class (philosophy), an analytical concept used differentl ...
/object of their design. The card is partitioned into three areas:
# On top of the card, the class name
# On the left, the responsibilities of the class
# On the right, collaborators (other classes) with which the class interacts to fulfill its responsibilities
Using small cards minimizes the complexity of the design, reduces class responsibilities and keeps designers focused on the essentials of the classes without exploring implementation details. Because the cards are portable, they can easily be laid out on a table and rearranged while discussing a design.
Creating CRC cards
Creation of CRC cards normally begins with writing a scenario that identifies the major actors and actions. From the scenario, nouns should become classes, verbs become responsibilities and collaborators are the other cards with which the card will interact.
See also
* Object-oriented design
Object-oriented design (OOD) is the process of planning a Object-oriented programming, system of interacting objects for the purpose of solving a software problem. It is one approach to software design.
Overview
An Object (computer science), obje ...
* Meta-modeling
A metamodel or surrogate model is a model of a model, and metamodeling is the process of generating such metamodels. Thus metamodeling or meta-modeling is the analysis, construction and development of the frames, rules, constraints, models and ...
* Story-driven modeling
* Unified Modeling Language
The Unified Modeling Language (UML) is a general-purpose, developmental modeling language in the field of software engineering that is intended to provide a standard way to visualize the design of a system.
The creation of UML was originally m ...
References
External links
A Laboratory For Teaching Object-Oriented Thinking
paper by Kent Beck and Ward Cunningham
A simple online CRC Editor
{{DEFAULTSORT:Class-Responsibility-Collaboration Card
Extreme programming
Software design