



Because of the near-ubiquity of structured programming, most tools (and languages) have been designed to aid in structured software development. Witness MPW and the THINK products, which provide access to such traditional mainstays as source-level debugging, ordinary (linear) text editing tools, and the familiar edit-compile-run development cycle. The most popular object-oriented programming languages (C++, Object Pascal, Modula2-P1) are merely structured languages with extensions to support the enforcement of object concepts; they may thus be called "hybrid" languages.
Early object-oriented languages, such as Smalltalk, are "pure" object languages. They espouse the "everything is an object" concept-a radical departure from traditional systems. Unfettered by the need to appear similar to existing structured development tools, Smalltalk inventors created an entire development and run-time environment based on the concept of a virtual machine: "…Smalltalk is designed so that every component of the system that is accessible to the user can be presented in a meaningful way for observation and manipulation." In other words, the complexities involved in larger-scale object-oriented software development were addressed right from the beginning.
All along, MacApp programmers have been creating their classes and interactions without a "meaningful way for observation and manipulation" of MacApp's complexity. With one or two exceptions, Object Master from ACIUS provides a complete environment for object-oriented software development.
The goal of improving design techniques is to find the best symbolic mapping of the problem domain to the software solution domain. Development environments should also provide as close to a one-to-one mapping of programming paradigm-to-program-development as possible; namely, the class (or, more generally, the module) should represent the fundamental unit for editing source code.
MacBrowse and SourceBug are two notable additions to the MPW development system that are designed for object programming. The need for breadth- and depth-browsing of classes-especially classes within a well-defined framework-quickly becomes obvious when trying to familiarize yourself with MacApp.
Browsing, as a general tool, organizes hierarchical (and, to a lesser extent, reticular) systems in a straightforward, meaningful way. The browser nature of SourceBug is its advantage over SADE with respect to MacApp programming.
The editing environment of MPW and the THINK products require you to implement object-oriented constructs within the world of structured programming-manual construction and maintenance of separate interface and implementation files, #include and other compiler directive management, etc.
Described in its manual as an editing tool, Object Master is much more. It provides, through internal facilities and through AppleEvent magic, a virtual environment expressly tailored to the needs of developers of object-oriented applications-with or without MacApp. Browsing with full editing allows object-oriented development to proceed apace, and eliminates the need to fit your object-oriented code into a structured source format.
Even to review such a product requires a bit of complexity management, so I'll first describe it, component by component. Again, it helps to think of Object Master as more of an integrated environment than a Macintosh application.
I ran Object Master on a IIci with 32mb RAM, System 7, and 32-bit addressing on. 1.0ß4 requests a 1480K partition, but may require an even larger partition if the MacApp CPlusIncludes and Libraries are to be included in a given project.
Since Object Master requires a separate, external compiler, you must also have enough RAM to run MPW/ToolServer (MPW 3.3 and ToolServer 1.0 or better are required) or a THINK system. Object Master can also control (to varying degrees) other development tools, including Jasik Designs' The Debugger/Integrated Build System, ResEdit, ViewEdit and IcePick. Decide which of these tools you'd like to have running concurrently to determine how much RAM you will require. For example, to run Object Master, MPW/ToolServer, and C++, you'll need 8mb at the very least.
Project-centered design Object Master organizes source files, classes, methods, fields, resources, and documentation-in other words, all application components-inside a project. An Object Master project is similar to a THINK Pascal or Think C project, or an MPW/ToolServer Projector database.
Unlike other source code systems, the Object Master project takes an active role. It acts like a control center for software development, orchestrating all development activities to some degree. For instance, if you're using MPW/ToolServer, you can specify an MPW Projector database and do simple CheckIns and CheckOuts, all from within Object Master, via Apple Events. Object Master respects Projector status on all files. When source files are added to a project, or existing source files have changed, Object Master parses those files and adds class, method, field, file and segment information to a project dictionary. You can use this dictionary to do project-wide searches. Object Master uses this dictionary to generate its views.
| File | Fairly standard Macintosh file menu. The New and Open items refer to source code files, not Object Master projects. |
| Edit | Standard Macintosh Edit menu. Also provides menu items for code alignment and duplication. |
| Settings | Allows for preferences with respect to the appearance of language-specific constructs within editing views. Project preferences are also available (see Figure 1). |
| Project | Contains all commands for opening, closing, saving whole projects, adding source files and 411 (MPW help format) files, and source code parsing. |
| Build | Automated, AppleEvent- or QuicKey-orchestrated application building functions. Provides specific access to MPW/ToolServer, THINK compilers, and Jasik's IBS. |
| Goodies | Mainly provides access to documentation facilities. Also allows for project-wide text searching and project meta-functions for writing Make files, Fields information, and for constructing 411 documentation. |
| Windows | Commands for creating new instances of each of Object Master's project-related windows, and for organizing existing windows. |
| Files | Allows opening and printing any file contained in the project; specifying and selecting an MPW Projector Database; and checking files in and out of that database. |
| Columns | Control visibility of various file attributes, such as Unit name, Projector status, or modification date. |
| Sort | Sort the list by any of the file attributes, in ascending or descending order. |
| Color | Set any file to any color. |
Those of you familiar with the Smalltalk/V or Objectworks Smalltalk-80 environments will feel right at home within the Browser. In standard fashion, the browser is split up into four panes: Class List, Method List, Field List, and Edit view. This window is responsible for hiding most of the standard file-based housekeeping. With it you can create and modify classes, and add and remove methods and fields. Modules (units) and structs (records) are added as pseudo classes, and denoted in the Class List with a prepended "•" for modules, "••" for structs. Any functions or procedures that are outside the scope of any class become pseudo-methods of that pseudo-class.
To create a subclass of another class, select the class that is to serve as the new class' superclass. When creating new classes, you are presented with the New Class Dialog (Figure 4). Object Master will create new interface and implementation files to contain the nascent class. The Location buttons are used to specify where the new files will be saved.
It would be convenient here to be able to specify an existing file, since it is often preferable to have a number of classes all within one file. As Booch suggests, the module (unit)-not the class-is the fundamental construct in an object-oriented system. In this way, any number of functionally interdependent classes can be gathered, and so visibility can be determined and restricted as a group.
It is possible, at this point, to specify (by double-clicking) any existing method as being one that will be overridden in this new derived class. Conveniently, this list contains not only the methods of the immediately ancestral class, but the methods of all the classes from which it is inheriting.
The only significant instance where Object Master fails to present a complete object environment is in the creation of the interface and implementation files. There is currently no means of specifying #include files, other than by opening the files and manually adding the necessary compiler directives to both files. It would be nice if the New Class Dialog could be enhanced to allow specification (via popup menu or modified Standard File Dialog) of those header files that are necessary to the interface and implementation of the nascent class.
When creating new methods within a given class, you are presented with the New Method Dialog (Figure 5). For those languages that allow restriction of method and field visibility, desired restriction can be set. For languages that don't, Object Master will add comments stating the intended visibility of this method.
The compilation segment is also specified at this point, either by typing in a new or existing segment name, or by using the popup menu and selecting an existing segment. If you are overriding an existing method, the ancestral method is selected (by double-clicking) from the list of existing methods.
The browser window similarly allows for addition and deletion of fields. I was unable to do this with ß2, but have not yet tried the operation with ß4. I expect that the procedure for adding a field to a class will be similar to that for creating a new method.
See Figure 6 for an example of the .h and .cp files generated by Object Master for a simple class with no fields and no overrides. For C++, note that an empty constructor is created. For Object Pascal, an empty PROCEDURE <MyClass>.I<MyClass> would have been generated.
From this point on, all method and field manipulation can be done from within the Browser. Object Master maintains both interface and implementation files automatically. Again, the only manual intervention required involves changing header dependencies (for example, a newly created method might require additional header files, which must then be added manually to the implementation file).
Object Master can also create indexed MPW 411 files for documentation purposes. You can write the documentation for a particular class or method concomitantly with implementation.
The menus for this Window are more or less intuitive:
| Filing | Creation and deletion of classes, methods and fields. |
| Classes | Class manipulation. Conveniently, you can view the class from a variety of perspectives (as Client, as Friend, as Implementor, or from Open Method), allowing you to double check that visibility restrictions are set up as needed. |
| Color | Identical to the Color menu in the Project Window. |
| Methods | Method manipulation. Documentation can be viewed for the method currently being edited. Also, a disassembly listing of 680x0 code generated by any method can be viewed. Note that Object Master does not generate any code, but rather utilizes existing .o and .SYM files to produce Code Window output (Figure 7). |
| Fields | Basic field manipulation. |
| Text | Allows for text level manipulations, based on the method currently being edited. |
| Find | Basic search commands, with respect to the method currently being edited. |
| Macros | Text for fundamental language-sensitive constructs and data types can be generated by typing or selecting any of these menu items, then executing "Expand Macro" from this menu. |
| Classes | Selects information be displayed in the tree. |
| Tree | Controls appearance of tree with respect to node placement, fanout and text styles. Also allows tree to be exported as a PICT file. |
| Color | Identical to Color menu of Project Window. |
| ResTypes | Controls appearance of the ResType Pane and allows you to set resource editors to be invoked (according to ResType). |
| Resources | Controls appearance of the Resources Pane. Also, provides means of displaying resources and invoking external editors. |
| Text | |
| Find | |
| Macros | Identical to their Browser Window counterparts. |
| Markers | Object Master automatically generates MPW-compatible markers for all methods within an implementation file. Files can be navigated by selecting one of these automatic markers, much like in MPW. Additional manual markers can be generated or removed. Additionally, the cell located left of this window's horizontal scroll bar pops up to display all current markers. |
Object Master excels at making navigation of a large object system as swift and easy as possible. Object Master creates the illusion of a native object system (such as Smalltalk) by handling most aspects of source file maintenance behind the scenes. This means you can proceed with implementing classes in a convenient, organized fashion.
To take advantage of AppleEvents, you must be running System 7 or later. However, Object Master does provide a QuicKeys hook for invoking MPW on pre-System 7 Macintoshes, or for invoking one of the THINK environments (which are not yet AppleEvent-aware). Once the build services have been set up in the Preferences Dialog (Figure 1), building can be initiated from within Object Master. The following steps illustrate the Object Master's orchestration of the build process via MPW/ToolServer and AppleEvents:
To take full advantage of Object Master as a complete MacApp development environment:
It may seem like overkill to include MacApp as part of the project (including MacApp 3.0ß2 adds 154 files, over 400 classes and pseudo-classes, and over 600 methods and fields). There are disadvantages to doing this:
Project Window clutter might also be a factor, but Object Master provides a means of displaying only those files contained in the project folder (i.e., user-developed files).
In spite of the negative aspects, I highly recommend including MacApp in your Object Master projects. The advantages:
Despite all this borrowing from familiar sources, Object Master and ACIUS still manage to set some significant precedents, both with respect to software construction and software distribution.
The scheme of commercial software distribution for the Taligent OS offers some interesting problems, since it may be difficult to singularly identify these third-party extensions once they are assimilated into the Taligent environment.
ACIUS has taken two interesting approaches to marketing Object Master. The first has little to do with software functionality, but sets a precedent that may change how Macintosh development tools are made available to the developer community. The second approach suggests a solution to commercial software distribution problems that may arise from the Taligent environment.
I wholeheartedly recommend using Object Master, even with one or two seams showing in an otherwise seamless product. Remember, it's still in beta.
Object Master-all this, and… it's written with MacApp!



