Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Class-responsibility-collaboration card
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
'''Class-responsibility-collaboration''' ('''CRC''') '''cards''' are a [[brainstorming]] tool used in the design of [[object-oriented]] software. They were originally proposed by [[Ward Cunningham]] and [[Kent Beck]] as a teaching tool<ref name="beck">{{cite journal |last1=Beck |first1=Kent |last2=Cunningham |first2=Ward |title=A Laboratory for Teaching Object Oriented Thinking |journal=SIGPLAN Notices |date=1986 |volume=24 |issue=10 |pages=1β6 |doi=10.1145/74878.74879}}</ref> but are also popular among expert designers<ref name="fowler">Martin Fowler, ''UML Distilled'', chapter 4</ref> and recommended by [[extreme programming]] practitioners.<ref name="xp">[http://www.extremeprogramming.org/rules/crccards.html A concise introduction at extremeprogramming.org]</ref> Author [[Martin Fowler (software engineer)|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 diagram|sequence diagrams]] 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 card]]s. Members of a brainstorming session will write one CRC card for each relevant [[class (computer science)|class]]/object of their design. The card is partitioned into three areas:<ref name="beck" /><ref name="fowler" /> # 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]] * [[Meta-modeling]] * [[Story-driven modeling]] * [[Unified Modeling Language]] ==References== {{reflist}} ==External links== *[http://c2.com/doc/oopsla89/paper.html A Laboratory For Teaching Object-Oriented Thinking] paper by Kent Beck and Ward Cunningham *[http://c2.com/doc/crc/draw.html A CRC Description of HotDraw] *[http://www.extremeprogramming.org/rules/crccards.html A concise introduction at extremeprogramming.org] *[https://guidolx.github.io/simple-crc-app/ A simple online CRC Editor] {{DEFAULTSORT:Class-Responsibility-Collaboration Card}} [[Category:Extreme programming]] [[Category:Software design]]
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)
Pages transcluded onto the current version of this page
(
help
)
:
Template:Cite journal
(
edit
)
Template:Reflist
(
edit
)