first draft for Model

also made constructors of collaborative objects protected, so only
classes in the same package can construct them, as only the Model
should be constructing them.