As the strategic value of software increases for many companies, software vendors continually seek out new techniques to automate the production of software and to improve quality and reduce cost and time-to-market. These techniques include component technology, visual programming, patterns and frameworks. As the complexity of software systems increase in scope and scale, companies seek techniques to manage and solve such complexities, which include recurring architectural problems, such as physical distribution, fault tolerance, replication, security, concurrency and load balancing. Additionally, the development for the Internet, while making some communications exchanges much simpler, exacerbates these architectural challenges.
One conventional technique called the Unified Modeling Language (UML) was designed to respond to these needs. The UML is a standard language for specifying, visualizing, constructing, and documenting the artifacts of software systems, as well as for business modeling and other non-software systems. The UML tool is used in developing object-oriented software and the software development process, and uses graphical notations to express the design of software projects.
One useful software architectural representation is a class diagram. A class diagram presents a graphic presentation which describes the static structure of the symbols in a system, and shows a collection of declarative (static) model elements, such as classes, types, and their contents and relationships. Classes are arranged in hierarchies that share a common structure and behavior, and are associated with other classes. Class diagrams model class structure and contents using design elements such as classes, packages and objects, and also displays relationships such as containment, inheritance, associations and others. A class, in the jargon of object-oriented programming, is an element that defines the structure and behavior of a set of objects in an object-oriented program. In an object-oriented application, classes have attributes (member variables), operations (member functions) and relationships with other classes.
Using UML to depict class diagrams has several limitations, as follows: laying a UML class diagram out automatically is a difficult algorithmic problem which rarely gives very satisfactory results; laying a UML class diagram out manually is time-consuming, especially with respect to limiting line crossing, and in placing semantically-significant adornments so that their meaning is readily apparent; a UML diagram of a set of classes pays little regard to the fact that these classes may naturally be organized in a tree structure; and finally, there is no systematic way to expand and collapse areas of a UML diagram.
Another popular approach to defining grammars is Backus-Naur Form (BNF). BNF and its extension Extended BNF (EBNF) are textual approaches to grammar definition used extensively in the formalization of programming languages. However, such conventional developmental tools such as UML, BNF, and EBNF, for example, are fraught with limitations that fail to satisfy a substantial unmet need in the art for development tools.