separation of interface & implementation