I have been working as a C++ developer for some years now, and have lately gotten more interested in finding out what are the best practices for SW design. Think SW architecture, UML, design patterns etc. Can anyone recommend a good (and fairly new) book for modern SW design, preferably with UML examples?