Design Recipe 3: Designing a Class of Objects





Data Analysis and

Class Data


to formulate data definition (for each class)

        determine how many pieces of data describe the "interesting" aspects of the objects in this class

        for each piece of data identify its type

        define a constructor that initializes each data item




to characterize

the typical objects via examples

        search the problem statement for examples

        translate these examples into information objects

        create a Test class for these examples and name the examples

Test the

Examples of Objects

to discover errors in data definitions and the constructor

        in the new class define the toString method following the template

        in the Test class add a print statement for each example object to enable hand-inspection that each example object has been constructed as specified



to identify common behaviors of the objects in the class

        analyze the behavior of the objects in this class and identify each behavior that can be described in a simple statement

        develop a method according to the Design Recipe for Methods in a Class


Design Recipes for Methods in a Class


Data Analysis and Definition

- to identify the data relevant for this method

        determine how many pieces of data describe the "interesting" aspects of the objects mentioned in the problem statement

        determine which of these data items refer to member data of the object in this class

Purpose and Header

- to name the function;

- to specify its classes of input data and its classes of output data;

- to describe its purpose;

- to formulate a header

        choose a name for the method

        determine the data that the method consumes and the type of result it should produce

        write the purpose for this method; in the text identify the invoking object as this

        write the header/contract for this method:

rType myMethod(T1 arg1, T2 arg2, ...)


of Method Use

to characterize the input-output relationship via examples

        write a header for the test method myMethTest() in the Test class

        search problem statement for examples

        formulate examples as method invocations

        define expected results and construct tests as code in the body of myMethodTest()


to formulate an outline

annotate instance variables of the invoking object with this.varname

annotate instance variables of input argument objects with arg1.varname, arg2.varname, if they are not of a primitive type


to define the method

develop the method body using the data specified in the template


to discover mistakes ("typos" and logic)

        run the myMethTest() in the Test class

        check that the outputs are as predicted