make the implementation hidden