Why do we need both prototype and interface coded with almost no difference except that we can omit or use any name in prototype, need not to be an exact match with the interface. What is the exact use of these 2?