StructureBuilder (SB) is a tool to create UML class diagrams and automatically
generate Java "stub codes". SB can also reverse engineer Java source/byte
code to produce the corresponding UML diagrams.
In this lab, we will use SB to design a Pizza program. Perform the following
steps to create the UML diagrams shown below. SB will generate code that
reflects the class structure, but not the specific actions on any objects.
For that, after using SB, you'll edit the resulting stub code to add the rest
of the code, filling in what each method should do.
-
Create a subdirectory called lab03 on your U: drive.
Somewhere on your Windows Program menu is the menu
item for WebGain StructureBuilder. Click on it to start SB.
-
Prepare to start a completely new diagram:
- In the File menu, choose Close All, to start your design from scratch.
- In the Tools menu, choose Preferences, and set the Default Source
Directory to your lab directory (i.e. lab03).
This is where all the generated files will be saved. While you are in
preferences, set the following as well:
- Class Diagrams:
- Icon Theme = UML
- When Dragging Line = Move
- Class Diagrams/Defaults
- Display Variable and Method Types = checked
- Show Method Parameters = checked
- CodeGen
- Generate Code Markers = unchecked
- Starting Curly ({) On New Line = unchecked
- In the File menu, select New/Project. A
Project dialog will pop up prompting you to enter a project name and
select the desired Input and Output directories. Enter PizzaLab
for the project name. Check to make sure that the Input and Output
directories are set to the Default Source Directory done in step 2.ii
above.
- In the File menu, select Save All. A file dialog will pop up, enter
a file name called Pizza and save it IN THE SAME DIRECTORY AS THE Default
Source Directory.
- In the File menu, choose New/Class Diagram, or equivalently, click
on the "New Class Diagram" button. In the resulting dialog box,
enter a name like "Pizza" for this diagram. Also, check the "Display
Variables and Method Types" and the "Show Method Parameters" boxes.
Then click on "OK".
You should see a new "Pizza" tab. Click on it.
- Now, make the diagram:
-
In the File menu, choose New/Class, or equivalently, click on the
"New Class" button. In the left pane, a new class box should appear.
In the right pane, some Java code to declare the new class should appear.
Both will use a default class name (e.g.,
Class_0
).
We need to edit this new class. Double-click on the class diagram,
or equivalently, right-click and choose Properties, and a Properties
Dialog should appear.
- Select the Classes tab. Change the class name (in the Name textbox)
to
Circle
. Make sure the Directory text box displays
the correct directory.
- Select the Variables tab. Add the radius field by clicking on the
New button Variables list box. By default, you will get
int
newVariable
. Select (highlight) the int
text and
type over double
. Select the newVariable
text, and type over _radius
. Make sure the "private"
radio button is selected.
-
Repeat the same process to create a class called
Rectangle
with width and height fields of type double.
You may want to keep the Properties dialog open. Note that you can
switch classes and create new classes from its interface also.
-
Create an interface called
IShape
.
- In the File menu, choose New/Interface, or equivalently, click
on the "New Interface" button, which is located immediately to
the right of the New Class button. In the left pane, a new class
box should appear. Rename the interface as IShape.
- To add an (abstract) method for computing the area, select the
Methods tab. In the Methods list box, click the New button. By default
you will get the method
void newMethodName
. Change
this to double getArea
. Check the "abstract" check
box and the "public" radio button. NOTE: Though interface methods
are by definition public and abstract, we want to explicitly declare
them public and abstract in order for SB to display them correctly
The UML class diagram for IShape should display the getArea()
method in italic. In UML, all abstract methods are italicized.
- Make Circle and Rectangle implement IShape by dragging the
inheritance arrow (the middle one) from each subclass to IShape. You
may need to drag the classes around for a more readable placement.
- Generate method stubs for Circle and Rectangle by right-clicking each
inheritance arrow, and selecting Generate Method Stubs. Circle
and Rectangle should now each have a default stub code for the getArea()
method.
- Add a class called Pizza.
- Add a price field of type double. While that new field is selected,
check the Create Get Routine box. That creates a method get_price
returning that field. Rename get_price to getPrice.
- To make Pizza reference an IShape, select class Pizza.
In the lower far-right corner of the Pizza class diagram is an "association"
symbol. Click on it and drag it to the IShape class diagram.
- A field (i.e. variable) called iShape is automatically generated.
Rename the field to _shape.
- Create a Get Routine for _shape. Rename get_shape to getShape.
- Double-click on the link arrow, and check the aggregation check
box. Aggregation simply means "has-a". You can add the text
"has-a" to the link label and "_shape" to the
Role A text box. These texts are like comments and have no
effect on the code.
- Constructors are special pieces of code used to initialize
an instance of a class when it comes into existence.
- To add a constructor for Pizza, select the Methods tab of its Properties,
and select New/Constructor. In the Parameters area, add two new parameters:
double price and IShape _shape.
- Add a Circle constructor with parameter double radius.
- Add a Rectangle constructor with parameters double width and double
height.
Of course, you can also create constructors when you originally create
classes.
- Add a class called PizzaDeal with two methods.
- double deal(Pizza p)
- boolean betterDeal(Pizza p1, Pizza p2)
To add a new method to a class:
- select the Methods tab in the Properties Dialog.
- In the Methods list box, select New/User Method. By default you
will get the method
void newMethodName
- Change the return type and the method name accordingly.
To add a parameter to a method:
- select the desired method.
- in the Parameters tab, click the New button. A default int
newParam is created. Rename the type and the name accordingly.
- Reverse Engineering: Download
the class callled
PizzaClient to
your current lab directory. This is the main program which will make use of Pizza, PizzaDeal,
Circle, and Rectangle to figure out the better deal
between two pizzas. In the File menu, select Open. A
fiel dialog will appear. Choose the file type to be *.java and
select PizzaClient.java. The UML class diagram for PIzzaClient
should appear in the class diagram window.
- Add "dependencies" between different classes by dragging the dependency
arrow icon (just left of the association icon) to another class. In
this example, PizzaClient "depends" on Pizza, PizzaDeal, Circle, and
Rectangle. You can enter a label for a dependency arrow by double-clicking
on it and, filling out the pop-up dialog box. Dependency arrows
have no effect on code generation.
- Feel free to make modifications on your diagram. You can drag your
class diagrams around and bend the arrows in many different ways. You
just have to experiment with the tool.
- In the File menu, select Save All, and use the file name Pizza. This
should create the files PizzaClient.java, PizzaDeal.java,
Pizza.java, IShape.java, Circle.java,
and Rectangle.java in the specified directory.
-
Now define what this program actually does, i.e., define the methods described
by your diagram. Use DrJava (or your favorite
editor) to add the
methods to the corresponding class .java file.
Click here for the code of
PizzaDeal. Remember that
the IShape getArea method is abstract and so has no code
body. Make sure you add comments to the code as shown in the sample
code. The comments are written in "javadoc" style.
-
If you set up SB properly, you should be able to generate javadoc and
UML diagrams for your code in one click of a button: go to the menu Tools/Generate
Documentation; select private access type to generate javadoc for all fields
and methods, select the class diagrams you want to javadoc, and click the
Generate button! You can submit the generated UML diagrams and javadoc
html files as the official javdoc documentation of your work. You
will not need to export the diagrams to any files at all.
More information on running StructureBuilder
can be found here.