Types, whether built-in or user-defined, can be classified as mutable or immutable
The objects of a mutable type can be changed: that is, they provide operations which when executed cause the results of other operations on the same object to give different results.
Creators create new objects of the type.
A creator may take an object as an argument, but not an object of the type being constructed
Producers create new objects
The concat() method of String , for example, is a producer: it takes two strings and produces a new one representing their concatenation.
Observers take objects of the abstract type and return objects of a different type.
The size() method of List , for example, returns an int
Mutators change objects.
The add() method of List , for example, mutates a list by adding an element to the end.
// TODO constructor
Vertex.label = name;