|Repository Support||Round-Trip Engineering|
|Exporting Diagrams||HTML Documentation|
|Part Two||Model Navigation||Pick Lists|
TJ3 has one of the cleanest and most intuitive navigation schemes we have seen in UML modeling tools.
At the center of attention is TJ3's Diagram Pane, which displays diagrams in the model. Navigation within the Diagram Pane is very smooth and fast, a requirement when working with large diagrams.
Hot keys are one of the most effective navigation aids in the Diagram Pane, and the diagram responds instantly. Here are the hot keys from the numeric keypad that you may employ:
What is nice about the Zoom In / Zoom Out hot keys is that the zooming occurs in reasonable steps, rather than big jumps. This gives the designer better control over the desired perspective.
One of our favorite navigation tools is the Overview Tab, which is identified in the Explorer by a tab with an airplane icon on it. This tab displays a thumbnail sketch of the currently displayed diagram and has a viewing 'lens' which appears as a rectangular gray shadow. You use the mouse to drag the lens over the thumbnail sketch in order to pan to the area of interest. Simultaneously, the Diagram Pane shifts the region which is under the shadow in the Overview Tab into enlarged focus. We've caught ourselves dragging the shadow around numerous times just to see if the Diagram Pane can keep up, and it usually does. (How do they do it? In Java, nonetheless!)
Another nice feature of this tool is the ability to grab the lower right corner of the shadow and enlarge or decrease its size. This has the same effect as zooming but with the extra benefit of being able to fit the viewport more precisely around the elements on the diagram that interest you.
The Model Tab is a navigation tool used to navigate the elements of a model. It is identified in the Explorer by an icon of a UML model and displays a hierarchical tree of the diagrams, classes and properties of a class in the model. This tool is very effective at allowing you to see the whole model at a glance, and at providing a drill-down capability for finding and examining the elements of a model. In the process, it orchestrates the display within the other windows of the modeling tool: diagrams in the Diagram Pane, source code in the Editor Pane, and details in the Inspector Pane.
See the accompanying screenshot of TJ3 displaying a class diagram from the CashSales model with the associated source code.
The following is an example sequence of drill-down actions that may be performed in the Model Tab:
One difficulty we have found with the Model Tab, which may be an artifact of running Swing on Linux, is that double-clicking sometimes seemed like triple-clicking when trying to navigate to a destination. This problem does not exist when running on Microsoft Windows.
A very nice touch we discovered in the Model Tab is that hovering the mouse over the name of an operation brought up a 'tool tip' display for the signature of the operation.
Also new in TJ3 is the ability to manage the display of multiple diagrams through the use of tabs in the Diagram Pane. This allows you to quickly find the diagram you want to view when multiple diagrams are open. In the aforementioned screenshot you see three diagrams open (state, class, and sequence) with tabs allowing you to quickly view the diagram of interest.
The joys of object-oriented development are really felt when designers experience the interplay of the static and dynamic views of the model under development. We have written about this in our review of Craig Larman's Applying UML and Patterns and Summary of Larman's UML Process.
While developing sequence (or collaboration) diagrams, did you discover a new method? If so, how do you add it to the class diagrams? Conversely, which methods have already been defined and may be used to create messages between objects in the sequence diagram? Which classes have already been defined and may be used when assigning types to objects in a sequence diagram?
TJ3 has done a fine job integrating the static and dynamic models. In addition to the same high quality graphics features seen in class diagrams, TJ3 interaction diagrams implement one of the most useful features of an OO modeling tool: pick lists for classes and operations. Here's how it works:
In the Choose Operation screenshot you can see that the link between aDetail and aProductDesc is selected and the pop-up menu allows you to select the calcPriceForQty() method for the link. This is the method employed by aDetail when calculating the total for a CashSale.
When assigning a class to an object, or a method to a message, you may also select the More… option from the pop-up menus. In both cases a dialog is opened with an Explorer type interface. This interface allows you to select from elements of the models under development by navigating the nodes in the tree.
Which Comes First?
But what if a desired operation has not yet been defined for a particular class? Let's stop for a moment and consider: where should an operation be defined first, the class diagram or the sequence diagram? Moreover, what if you discover a new class when building the sequence diagram? The answers to these questions require a more in-depth discussion of the UML process (see our review of Larman's Applying UML), but suffice it to say that we want our UML tool to be flexible and versatile, and not to lock us down to a single process.
TJ3 provides this flexibility. Instead of selecting Choose Operation, you may select the New Operation menu choice when assigning an operation to a link. When selecting a class for an object in the Choose Object's Class dialog, you may create a new class by right clicking on the name of a model. See a screenshot.
An additional feature which should be considered essential is the ability to reflect inheritance in pick lists for operations. If your object is part of an inheritance class hierarchy, the operations supported in super-classes should be available when selecting operations for messages sent to an object of the sub-class. This works properly in TJ3. However, you must use the Explorer-like dialogue box to view the inherited operations; they don't show up in the pop-op menu list.
While it seems like pick lists for operations and classes should just work like this in all UML tools - you might be surprised! However, it really works nicely in TJ3. This feature can save you hours of time finding the right name for a message or type of an object. If a modeling tool doesn't provide this feature you are forced to juggle between class and interaction diagrams, hunting down the correct method name for a message or class for an object.
While we are on the topic of sequence diagrams, another very nice (read essential) feature implemented by TJ3 is automatic message numbering for these diagrams. As you add messages to your sequence diagrams, the sequence number will be automatically assigned the appropriate value. This applies when adding a new message in the middle of an existing sequence diagram as well - TJ3 properly shifts the sequence numbers for subsequent messages.
Collaboration diagrams, however, can't automatically adjust the sequence numbers because the diagram itself doesn't have an implied order. Nevertheless, you can manually assign the sequence number for a new message in the property pane, after which TJ3 will then take over and renumber the downstream messages.
Earlier versions of Together/J had various quirks when printing diagrams. One of the more annoying of these problems was the inability to match the tool's scaling factors with the actual size of a page. Frequently, page real-estate was wasted due to this problem. However, this particular problem appears to be fixed in TJ3 and the whole printing function now works more seamlessly.
One excellent addition to diagram printing support is a preview feature. Prior to this new feature you could turn on the printing grid feature for diagrams, which would allow you to see the page breaks for a multi-page diagram. Now in addition you may view an actual miniaturized preview of the printed page while setting the specifications in the print options dialog box. See a screenshot of the print preview function. We found the print preview to be accurate and very usable. This was especially true when trying to fit a diagram to a single page as well as to multiple pages on sensible borders. When fitting to a single page you can quickly verify whether this operation will be successful by viewing the preview. Similarly, for larger diagrams you may use the scaling feature to select a scaling factor and then quickly view the results in the preview window.
TogetherSoft was a pioneer in using the Java platform from the beginning to implement the Together/J product line. They won early accolades for their impressive use of Java to build a tool which balanced functionality with very good performance.
One of the biggest benefits of using Java to implement TJ3 is the portability achieved. Our tests have shown TJ3 to have almost identical appearance and functionality on Windows and Linux using Sun's JDK 1.2.2 for both platforms . This portability gives TJ3 good market coverage and minimizes the time spent by TogetherSoft porting and testing on multiple platforms. This also protects a customer's investment as they make platform choices. TogetherSoft facilitates this choice by allowing the license file that it distributes with the product to work for all platforms.
Other distinct benefits of using Java are software reliability and integration with the Java environment, which is demonstrated by TJ3's support for the modeling of Enterprise Java Beans (EJB's).
As far as execution speed, TJ3 demonstrates very adequate performance across the spectrum of functionality. One exception that we noticed is in program loading time, which did seem to take longer than equivalent programs written in a more optimized language. However, with Java HotSpot for client-side programs in beta for at least a half a year (JDK 1.3), we would expect to see significant performance improvements in this area as well as others very soon.
Another area which could use improvement is TJ3's installation on Linux. It should be possible to install TJ3 on a plain-vanilla Linux system without having to hack up a startup script, which is what we had to do. Installation on Linux should ideally be as smooth as it is on Windows.
Something else we found odd was that the Windows installation runs under the Microsoft JVM by default. Upon investigation we found installation notes that indicate that when running the Together executable, the search order for VM's is first Microsoft, then Sun. In order to run the Sun JVM we had to invoke the Together executable with the '-sun12' flag. Unless we are mistaken, earlier versions of Together/J gave you the option of selecting a JVM at installation time. It would be nice to have this option back.
TogetherSoft has been very prolific when it comes to releasing both major releases and incremental, maintenance releases. TJ3 is a significant major release both because of its new support for the Java Swing user interface as well as a raft of new features. Initial versions of TJ3 were stable but had a few rough edges as well as some features which were not fully implemented. TogetherSoft has rapidly polished the product and filled out the remaining features by providing maintenance releases approximately every two months. These releases are easily downloaded over the Internet - as long as you have a speedy connection - and are easily installed.
With the product reaching greater stability, and most of the features now fully implemented, we are wondering where TogetherSoft will go from here…
Copyright © 2000 Objects by Design, Inc. All rights reserved.