This commit fixes the following problems:
- protected methods marked as public.
- inherited operations that are not overriden are repeated.
- one method had an invalid parameter (see attached image).
- abstract class not indicated as such.
This commit improves the following aspects:
- I did not like how the classes were arranged, so went ahead and made
some small chnges. I hope you don't mind the different distribution.