ModelMaker for Delphi 1.0 is an initiative of Gerrit Beuze and Rene Post. In december 1994, a few months before the initial release of Delphi 1.0 we joined-up and decided to build a development tool that would help us build software better and faster. Being Pascal programmers, we decided to use the new Delphi environment which we had seen in a prerelease version. Since then over a year has passed and we have written 50,000 lines of Delphi code and created more than 50 forms, mostly in our spare time and on holidays. The result is a development environment that complements Delphi in many ways. It is great for building components and for creating and maintaining class trees. The development of ModelMaker has been (and still is) driven by our needs and wishes. We are both full-time system architects and Delphi programmers. Whenever we found tasks that took a long time to complete or that were tedious or unmanageable in Delphi, we build it into the ModelMaker environment.
Delphi is a form oriented RAD tool in which you put components on a form, drag them around and glue them together with little snippets of code. The key to Delphi's speed and power are the components. However building components in Delphi means, you have to fire up the code-editor and build the components by hand. Furthermore, for big applications domain specific code is needed to capture rules, properties and nuances of the problem domain. This kind of information is typically expressed in classes and their associations.
ModelMaker is a class tree oriented development environment that generates Delphi code. Because of its class diagrams it looks much more like a traditional CASE tool. ModelMaker has a total of nine different views on the model you design. The key to ModelMakers speed and power is the modeling engine that stores and maintains all relationships between the classes and their parts. Renaming a class or changing its ancestor will immediately propagate to the automatically generated code. Tasks like overriding methods, adding events, properties and access methods are reduced to selecting and clicking.
In ModelMaker you find a synergy of ideas from the cutting edge of object-oriented and component-based technology. We have been inspired by the work of methodologists like Ivar Jacobson (OOSE), Ralph Johnson (design patterns) and Karl Lieberherr (adaptive software).
A unique feature currently not found in any development environment for Delphi are patterns. We have implemented a number of patterns from the book 'Design Patterns, Elements of Reusable Object Oriented Software' by E. Gamma ea. Currently we have a visitor pattern, a wrapper pattern a mediator pattern and a decorator pattern working and are looking for other candidates to implement.
Patterns (as we have implemented them) are active agents in your model that observe what you are doing and respond to that. Its like having an army of little programmer under your control ! For example, when you add a Visitor pattern to the model, this pattern will add a method to any classes that are added as subclasses of the visited class and it will remove that method if any classes that are currently subclasses of the visited class are attached elsewhere in the class hierarchy. The links between classes and unit files outside ModelMaker are also maintained by patterns.
We have created several links from Delphi to Modelmaker and vice versa, which gives the whole environment an integrated look and feel. It is very easy to switch between Delphi and ModelMaker. After a while you almost start thinking about ModelMaker and Delphi as a single environment.
In ModelMaker whenever classes belonging to a unit are changed, we update any unit that has been opened in Delphi. After changes have been propagated to the unit file, Delphi is instructed to reload the changed units. You can actually watch the code being generated in Delphi.
ModelMaker has a syntax check button that will instruct Delphi to syntax check the current project. This is very handy when you are typing in code and you want to check its syntax.
When you are working in Delphi in a ModelMaker generated unit, typing <ALT><T><T> will immediately transfer control to ModelMaker and position you in the model on a location matching the location in Delphi.