Overview / Java

Intent

One of the most famous declarations of intent was JFK's speech to Congress in 1961:

"the goal, before this decade is out, of landing a man on the Moon and returning him safely to the Earth".

This demonstrates the key elements of intent:

  • simple
  • succinct, but expands out to produce a lot of work. In other words, it stands "above the details"
  • readily understandable by the intended audience
  • defines the goal precisely.

In JeeWiz, there are three steps in defining the intent:

  • a vocabulary that is simple, natural to the user, precise and as succinct as possible - the smaller it is, the easier it is to produce.
  • JeeWiz provides a very simple meta-modelling capability - simple XML - to allow you to define the concepts and actions that will be used to state the intent. This can be built up in layers (persistence tier, mid-tier, UI). Meta-models can be layered - in line with the transformations - to gradually create more powerful ways to express intent.

  • a language or modelling tool profile for expressing the intent.
  • In JeeWiz, the intent can come in a number of forms, such as text files, UML models, XML documents, CSV files or special-purpose programming languages such as DSLs (Domain-Specific Languages).

    JeeWiz provides a methodology and tools for turning a meta-model into a language or modelling 'profile' on a specific tool - like Eclipse or Rational System Modeler/Rational Rose. The profile incorporates all the relevant meta-model layers

  • conversions from the language/model into a standard format - Simple XML
  • JeeWiz is an engine, independent of modelling tools or IDEs, so we convert to a standard input format, which is the simplest possible XML - "Simple XML".

In the JeeWiz application generation systems, the intent is expressed as a UML model, covering all tiers of the architecture. Typically this model directly generates 93-97% of the application, the remaining 3-7% being written in Java. Currently there are some parts of the development that are too unstructured to benefit from the specify/generate approach (although you can do it if you want): for these, Java is as efficient as we can get (so far).

This approach allows analysts to quickly and cheaply refine the intent, all the time demonstrating to users how a "working" system operates. There is virtually no code development or system testing at this stage - it is all about discovering what makes sense to the eventual users of the system. This means that the delivered system is likely to do what the users want, and if the project is cancelled it fails quickly and cheaply.