Abstraction
Abstraction is a concept of software design which places the complexity of various parts of the application into its own self contained objects. This is mostly commonly used on Hardware Abstraction Layers, which can allow for communicating with various hardware devices which all have common interfaces but have specific implementations.