Seperating implementation and interface into their own files