Abstraction is a key principle in the process of designing flexible software. This process extracts only the most important aspects [...]