I have occasionally come across what I can only describe as the "interface-implementation idiom", where a class is separated into an "interface class" and an "implementation class".
What is the philosophy or reasoning behind this?
What is an example usage of this methodology? What does an example of such a class system look like and why would it be useful to separate a class into an interface and an implementation?