abstraction and composition