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?
I think what you're talking about is also known as the pImpl pattern. There is lots of discussion about it at Why Should the pImpl idiom be used. That question is also marked as a duplicate of an older question/answer with more information.