separation of interface and implementation