important steps like many forms of human communicationfinding the right balance is an important skill that is refined through practice coding as mentioned aboveone of the key steps in coding up an object-oriented program is coding up the descriptions of classes and their respective data and methods in order to accelerate the development of this skillwe discuss various design patterns for designing object-oriented programs (see section at various points throughout this text these patterns provide templates for defining classes and the interactions between these classes many programmers do their initial coding not on computerbut by using crc cards component-responsibility-collaboratoror crc cardsare simple index cards that subdivide the work required of program the main idea behind this tool is to have each card represent componentwhich will ultimately become class in our program we write the name of each component on the top of an index card on the left-hand side of the cardwe begin writing the responsibilities for this component on the right-hand sidewe list the collaborators for this componentthat isthe other components that this component will have to interact with to perform its duties the design process iterates through an action/actor cyclewhere we first identify an action (that isa responsibility)and we then determine an actor (that isa componentthat is best suited to perform that action the design is complete when we have assigned all actions to actors by the wayin using index cards to begin our codingwe are assuming that each component will have small set of responsibilities and collaborators this assumption is no accidentfor it helps keep our programs manageable an alternative to crc cards is the use of uml (unified modeling languagediagrams to express the organization of programand the use of pseudo-code to describe the algorithms uml diagrams are standard visual notation to express object-oriented software designs several computer-aided tools are available to build uml diagrams describing algorithms in pseudo-codeon the other handis technique that we utilize throughout this book once we have decided on the classes for our program and their responsibilitieswe are ready to begin the actual coding on computer we create the actual code for the classes in our program by using either an independent text editor (such as emacswordpador vi)or the editor embedded in an integrated development environment (ide)such as eclipse or borland jbuilder once we have completed coding for class (or package)we compile this file into working code by invoking compiler if we are not using an idethen we compile our program by calling programsuch as javacon our file if we are using an