Classes basically share a structural relationship which can be created using class diagrams. This is clearly specifed at compile time itself. However Objects mostly share a behavioural relationship. This can be shown using the Object diagrams. Thus i can have two Objects who do not know each other at the compile time reference each other at runtime.
There are certainly design pattern issues, but I think you can boil it down to uninstantiated classes that offer static (i.e. utility functionality) methods or 'client' specific instances that contain unique data in every instance. In the design phase you won't have to specify how the class is used (really) except for qualifying the methods with static or not. I know this isn't much to go on but perhaps it will seed further discussion. Sean