Design Recipe 3: Designing a Class of Objects

 

Phase

Goal

Activity

Data Analysis and

Class Data

Design

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

Examples

of

Objects

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

Behavior

Analysis

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, ...)

Examples

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()

Template

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

Body

to define the method

develop the method body using the data specified in the template

Test

to discover mistakes ("typos" and logic)

        run the myMethTest() in the Test class

        check that the outputs are as predicted