I have a homework and I need to evaluate which approach is better according to GRASP **"Protected Variation"**. I found this link that answers part of my questioning: In C++ why have header files and cpp files? However, what I want to know is how much c++ way of working is better for extensibility and for code reuse than JAVA because everything is defined in a conjoint file ? Thanks for the help ! Edit: Just to make sure that this is not a debate, I want to know why does JAVA does not do like in C and promotes the separation between class definitions and class implementations. Are there any advantages with that way of working or proceding, especially on reuse or extensibility ?