I have found that .NET really lacks in this space, needless to say I've been scouring the web for a decent free UML designer. Annoyingly most of the free UML tools have heavy restrictions on there use ( VP , MagicDraw ), oh and Visio is hopeless for complex...
I know that generally the design patterns promote programming to an interface not an implementation - and this provides more loose coupling, and helps keep inheritance trees down. My personal opinion is that component based programming is really nice...