5.1 Everything is an entity
The user interface of Moose approaches analysis with an object-oriented design. The central focus of any analysis is data, and it typically boils down to a sequence of logical steps through which we take some input data and apply some action on it.
If in object-orientation everything is an object, in Moose everything is an entity. More specifically, everything you see is an entity representing data. Regardless of where you are, if you see it, you can interact with it. The simplest possible interaction is by clicking on it and spawning a contextual menu with the possible services that can be called on this entity. For example, if you see a class, you should be able to browse its source code or spawn a visualization.
When I say everything is an entity, I mean everything. Including collections of entities. We call these groups. Like any other entities, groups can have specific actions as well. For example, a group of classes will offer you the possibility to view their inheritance hierarchies.
A complementary design choice is that there should be no hard boundary between code and user interface. In other words, if you get your hands on an entity, you should be able to write a piece of code, get the result and if needed spawn another user interface on it. In its simplest form, this is achieved by providing access to the Smalltalk Inspector. For example, you can select a group of classes, spawn an inspector, write a piece of code that rejects all the interfaces, and then come back in a user interface by invoking a command that visualizes the System Complexity.
As writing code is integral part of the overall analysis process, it follows that the design of the user experience should not stop at the graphical user interface. As can be seen from the above, querying can be small and concise as well. This is achieved by combining the conciseness of Smalltalk with expressive APIs that offer fluent interfaces for querying and manipulating data (see Chapter 11), expressing visualizations (see Chapter 15 and Chapter 17) and even building browsers (see Chapter 18).
In essence, Moose keeps data at the center and gives the analyst complete control of what he wants to accomplish.