1) use singletons. Creating instances all the time is not acceptable. [ Done ]
2) no empty classes. [ Done ]
3) no empty methods returning self. Leave those unimplemented or use #subclassResponsibility.
4) methods such as wrongClassIfFloatShape: and wrongClassIfCharacterShape: make no sense. Just override checkArgumentClass: instead.
5) #shape: not implemented yet using shapes, as a result #resolveShape: is unused. [ WIP ]
6) no class-method-only classes. Move those to Shape. [ Done ]