user class, abstraction