design coding testing and debugging we briefly discuss each of these steps in this section design the design step is perhaps the most important step in the process of writing program for it is in the design step that we decide how to divide the workings of our program into classeswe decide how these classes will interactwhat data each will storeand what actions each will perform indeedone of the main challenges that beginning java programmers face is deciding what classes to define to do the work of their program while general prescriptions are hard to come bythere are some general rules of thumb that we can apply when determining how to define our classesresponsibilitiesdivide the work into different actorseach with different responsibility try to describe responsibilities using action verbs these actors will form the classes for the program independencedefine the work for each class to be as independent from other classes as possible subdivide responsibilities between classes so that each class has autonomy over some aspect of the program give data (as instance variablesto the class that has jurisdiction over the actions that require access to this data behaviorsso that the consequences of each action performed by class will be well understood by other classes that interact with itdefine the behaviors for each class carefully and precisely these behaviors will define the methods that this class performs the set of behaviors for class is sometimes referred to as protocolfor we expect the behaviors for class to hold together as cohesive unit defining the classestogether with their instance variables and methodsdetermines the design of java program good programmer will naturally develop greater skill in performing these tasks over timeas experience teaches him or her to notice patterns in the requirements of program that match patterns that he or she has seen before pseudo-code