In the introduction, we listed the four key things that make ArgoUML different: i) it makes use of ideas from cognitive psychology, ii) it is based on open standards; iii) it is 100% pure Java; and iv) it is an open source project.
ArgoUML is particularly inspired by three theories within cognitive psychology: i) reflection-in-action, ii) opportunistic design iii) and comprehension and problem solving.
This theory observes that designers of complex systems do not conceive a design fully-formed. Instead, they must construct a partial design, evaluate, reflect on, and revise it, until they are ready to extend it further.
As developers work hands-on with the design, their mental model of the problem situation improves, hence improving their design.
A theory within cognitive psychology suggesting that although designers plan and describe their work in an ordered, hierarchical fashion, in reality, they choose successive tasks based on the criteria of cognitive cost.
Simply stated, designers do not follow even their own plans in order, but choose steps that are mentally least expensive among alternatives.
A design visualization theory within cognitive psychology. The theory notes that designers must bridge a gap between their mental model of the problem or situation and the formal model of a solution or system.
This theory suggests that programmers will benefit from:
Multiple representations such as program syntactic decomposition, state transitions, control flow, and data flow. These allow the programmer to better identify elements and relationships in the problem and solution and thus more readily create a mapping between their situation models and working system models.
Familiar aspects of a situation model, which improve designers' abilities to formulate solutions.
ArgoUML implements these theories using a number of techniques.
The design of a user interface which allows the user to view the design from a number of different perspectives, and allows the user to achieve goals through a number of alternative routes.
The the use of processes running in parallel with the design tool, evaluating the current design against models of how “best practice” design might work. These processes are known as design critics.
The use of to-do lists to convey suggestions from the design critics to the user, as well as allowing the user to record areas for future action.
The use of checklists, to guide the user through a complex process.
UML is itself an open standard. ArgoUML throughout has tried to use open standards for all its interfaces.
The key advantage of adherence to open standards is that it permits easy inter-working between applications, and the ability to move from one application to another as necessary.
XML Metadata Interchange (XMI) is the standard for saving the meta-data that make up a particular UML model. In principle this will allow you to take the model you have created in ArgoUML and import it into another tool.
This clearly has advantages in allowing UML to meet its goal of being a standard for communication between designers.
The reality is not quite this good. Prior to UML 2.0 the XMI file includes no information about the graphical representation of the models, so diagram layout is lost. ArgoUML gets round this by saving graphical information separate from the model (see Section 220.127.116.11, “ Loading and Saving ”).
Encapsulated PostScript (EPS) file is a PostScript file which satisfies additional restrictions. These restrictions are intended to make it easier for software to embed an EPS file within another PostScript document.
Graphics Interchange Format (GIF) uses lossless compression, and preserves sharp edges well, which makes it well-suited for ArgoUML. The GIF format used to be a patent encumbered format, but all the patents have currently expired.
Precision Graphics Markup Language (PGML) is an XML-based language for representing vector graphics. It was a W3C draft, but was not adopted as a recommendation. PGML and VML, another XML-based vector graphics language, were later joined and improved upon to create SVG (see below).
Portable Network Graphics (PNG) is an ISO/IEC standard (15948:2004) and is also a W3C recommendation. PNG is a bitmap image format that employs lossless data compression. PNG was created to both improve upon and replace the GIF format with an image file format that does not require a patent license to use. PNG is officially pronounced "ping" but it is often just spelled out — probably to avoid confusion with the network tool ping. PNG is supported by the libpng reference library, a platform-independent library that contains C functions for handling PNG images.
PostScript (PS) is a page description language and programming language used primarily in the electronic and desktop publishing areas.
Scalable Vector Graphics (SVG) is an XML markup language for describing two-dimensional vector graphics, both static and animated, and either declarative or scripted. It is an open standard created by the World Wide Web Consortium. The use of SVG on the web is in its infancy. There is a great deal of inertia due to the long-time use of pure raster formats and other formats like Macromedia Flash or Java applets, but also browser support is still uneven, with native support in Opera, Safari and Firefox, but Internet Explorer requires a plugin. See PGML above.
Object Constraint Language (OCL) is a declarative language for describing rules that apply to UML models. It was developed at IBM and is now part of the UML standard. Initially OCL was only a formal specification language extension to UML. OCL may now be used with any Meta-Object Facility (MOF) compliant metamodel, including UML. The Object Constraint Language is a precise text language that provides constraint and object query expressions on any MOF model or metamodel that cannot otherwise be expressed by diagrammatic notation.
Java was conceived as an interpreted language. It doesn't have a compiler to produce code for any particular target machine. It compiles code for its own target, the Java Virtual Machine (JVM).
Writing an interpreter for a JVM is much easier than writing a compiler, and such machines are now incorporated into almost every Web Browser. As a result most machines can run Java, with no further work.
(In case you wonder why all languages aren't like this, it is because interpreted languages tend to be slower than compiled languages. However with the high performance of modern PCs, the trade-off for portability is worthwhile for many applications. Furthermore modern multi-level caches can mean that interpreted languages, which produce denser code, may actually not be that much slower anyway.)
By choosing to write ArgoUML in pure Java, it is immediately made available to the maximum number of users with the minimum amount of effort.
ArgoUML is an open source project. That means anyone can have a free copy of the source code, change it, use it for new purposes and so on. The only (major) obligation is that you pass your code on in the same way to others. The precise nature of what you can and can't do varies from project to project, but the principle is the same.
The advantage is that a small project like ArgoUML suddenly is open to a lot of additional help from those who can chip in their ideas for how the program might be improved. At any one time there may be 10, 15, 20 or more people making significant contributions to ArgoUML. To do that commercially would cost $1m+ per year.
Its not just a spirit of pure altruism. Contributing is a way of learning “hands-on” about leading edge software. Its a way of getting a lot of visibility (over 1,125,000 people had downloaded ArgoUML by the end of 2005). That's a lot of good experience on a résumé and a lot of potential employers seeing you!
And its great for the ego!
Open Source doesn't preclude making money. Gentleware www.gentleware.com sell a commercial version of ArgoUML, Poseidon. Their value proposition is not a piece of private code. Its the commercial polish and support that take risk out of using ArgoUML in a commercial development, allowing customers to take advantage of ArgoUML's leading edge technology.