The amateur software engineer is always in search of magic.
Hierarchy is a kind of order of abstractions.
All of life is iterative. It goes back to the point I made earlier, which is you can't a priori know enough to even ask the right questions.
UML is not dessert topping and floor wax.
The task of the software development team is to engineer the illusion of simplicity.
C++ also supports the notion of friends: cooperative classes that are permitted to see each other's private parts.