class abstraction