By: D. Riehle, H. Züllighoven
Published in: PLoPD1
Summary: In the Tools and Materials Metaphor, people have the necessary skills for their work, so there is no need to define a fixed work flow. People decide how to organize their work and their environment.
In the Tools and Materials Metaphor, people have the necessary skills for their work, so there is no need to define a fixed work flow. People decide how to organize their work and their environment.
Category: Behavioral, Structural, Interactive Systems
Professionals use tools to work on materials. Materials are the objects of work, the focus of attention. The separation of tools from materials lets you flexibly combine tools with materials so the same tool can work on different materials and different tools can work on the same material.
Tools are the means of work. Unless a tool breaks down, it is peripheral to the user; the material is the focus. However, a tool always mediates the presentation of material to a user, thereby determining what a user may see. Separating tools from materials allows you to combine tools and materials flexibly.
Tools access materials through aspects. An aspect represents the qualities of a material that make it manipulable by a tool.
Users organize tools and materials in an environment. The environment (for example, a visual desktop) provides the spatial and logical dimensions in which to grab, put down, store, and retrieve tools and materials.
Assume tools and materials are represented as distinct objects. An aspect becomes an interface that provides the functionality a tool requires to handle a material according to the tasks defined by the aspect. This interface, called an "aspect class," is the simplest way to express the functionality of an aspect formally. This ensures that tools can be combined with materials flexibly.
Build software tools from a hierarchy of tool components. Have the tool components communicate using Mediator [Gamma+95], Observer [Gamma+95], and Chain of Responsibility [Gamma+95]. Structure the hierarchy using Composite [Gamma+95]. A parent tool delegates work to its child tool components. Child tool components notify their parent when they change state.
Structure a tool component into a functional part and one or more interface parts.
Make a source object (for example the functional part of a tool component), and provide information about possible state changes to clients. Let clients register their interest in these state changes and make the source object send events to clients when the changes occur.
Have the functional part of a tool component create the functional parts of its child components. Have each interface part create the interface parts of its child components. Have the functional part of a tool component notify its interface parts to create the interface parts of the child components. Each tool is thus composed of a hierarchy of tool components.
Group dependent materials into a single material container that acts as an enclosure so that constraints can be maintained in one place, independent from tools.
If a constraint changes a material's state, the tools's state and the material's visual presentation can become inconsistent. Notify tools about changes to their materials due to constraints.