Thoughts on Abstract and Concrete UI
This document was emailed by Bill Clare after the workshop
ended.
Abstract and Concrete
This note presents an outline for consideration of abstract and
concrete specifications for user interface elements. It is perhaps
a considerable simplification of other efforts, but it seems like
the right foundation.
Component
An abstract component
- is a type for which more specific components can be substituted
- has a substitution mechanism, such as inheritance or extension.
- can have multiple levels of abstraction and specificity.
- is composable in that it can contain other abstract components.
A concrete component
- can be substituted for an abstract component for which it
satisfies the type constraints.
- can be abstract relative to more specific components.
Function Component
- An abstract function component is an abstract component that
specifies a process type along with input and output data types.
- A concrete function component is a concrete component that
specifies a particular process, with possibly more specific input
and output data types.
User Interface Component
- An abstract user interface component is an abstract function
component that specifies:
- specifies a generic function (select an option, change attributes).
- specifies a set of fixed input types (labels, instructions).
- specifies a set of dynamic inputs and outputs with generic types.
- specifies a set of event types handled internally.
- specifies a set of event types raised externally.
- specifies a set of actions handled (e.g. update a presentation
with a specified value).
- can specify an extendable set of standard widget classes (e.g.
radio buttons) that it can be mapped to.
A concrete user interface component is a concrete function
component that specifies:
- a specific widget or other input control.
- a styling component (such as a CSS specification).
- fixed input data mapping.
- supporting metadata (such as descriptions and help).
- alternate presentations in limited contexts; e.g., just a
selectable label
- Placement of concrete components is probably specified at a
higher level, but the component might specify clues.
Some Examples
There are probably a fairly limited set of basic user components:
- Output only and editable components:
- Item
- List
- Table
- Tree
- Network
- Button elements:
- Insert a component at a cursor.
- Perform an action - globally or on currently selected elements.
- Dynamically link to a component
- Selection – one or more options from a list
- A list of option lists (menu / tree).
- Form – a title and list of entry fields
- Entry field - a label, a data type for the entry, set of value constraints.
- A group of abstract components