Solution (source code)

= Solution

In <model-view-controller>, the model owns application data and its rules: here it is the ordered `DataList` with its uniqueness condition on horizontal coordinates. A view renders those data, for example as a line plot or a bar plot. View-specific decisions such as whether to show axes need not change the model. A controller interprets actions such as entering a new sample or selecting a plot style, and requests the appropriate model or view operation.

This <separation of concerns> permits several views of the same data and allows model operations to be tested without drawing a window. When the model changes, affected views need a notification or another refresh mechanism. The <Observer pattern> in part (d) supplies one such mechanism, without making the model depend on every concrete view <software class>. The division is
$$
\boxed{\text{model: state and rules; view: presentation; controller: input interpretation}.}
$$