Developing a user interface where the program model matches the user model is not easy. Sometimes, your users might not have a concrete expectation of how the program works and what it's supposed to do. There is no user model.
When the user model is incomplete or wrong, the program can use affordances or metaphors to show the user its model.
In these cases, you are going to have to find ways to give the user clues about how something works. With graphical interfaces, a common way to solve this problem is with metaphors. But not all metaphors are created equal, and it's important to understand why, metaphors work so you know if you've got a good one.
The most famous metaphor is the "desktop metaphor" used in Windows ...