Design patters are obviously important, but as with anything, you don't want to grab a powerful tool before you understand what the job at hand is. My approach to teaching the OO concepts is to concentrate on the basic, fundamental concepts and try to reinforce those using various tools like code in Java, C# and Objective-C, etc. Then I use very basic examples of specific technologies like XML, Design Patterns, etc.
Personally, I would focus on the basic concepts first: such as encapsulation, polymorphism, interfaces, composition and inheritance and get comfortable with those. You can then study some specific topics like design patterns to see how the concepts are applied.
As far as UML goes, in my writings and when I teach programming, I like to use UML class diagrams as a graphical way to assist in the learning process. I find that UML class diagrams are really good for demonstrating how to model systems and show relationships between classes.