NB 1 : The generated classes (Age, InvalidAge...) will define other properties and methods than the ones already defined by the superclasses. (Ex: map, maybeMap, copyWith... and all the others)
NB 2 : Notice how there is no association between ValidModddel/InvalidModddel and BaseModddel, and also no association between ValidValueObject/InvalidValueObject and ValueObject. That's on purpose because those interfaces can be directly implemented in some cases, and we don't want the BaseModddel methods to be inherited. (See the models that are always valid / invalid section).