Abstraction is a principle tenant of software engineering commonly known as polymorphism. It is a generalization of the idea of a concept to a set of related concepts. It's is incredibly powerful in building software, and it's a key part of the software engineering process. Learning to abstract software properly is a skill that takes time to master.