use abstraction