UML (Unified Modelling Language) ist ein Satz von Regeln mit denen man den Aufbau und Ablauf von Programmen beschreiben kann. Grafisch. Dabei gehts übrigens nicht nur um objekt-orientierte Modelle sondern auch um z.B. den zeitlichen Ablauf von Programmen oder die Möglichkeiten mit denen ein Programm mit einem Benutzer interagieren kann. UML (ab Version 2 besonders) ist ziemlich voll, aufgeblasen und nicht immer leicht zu verstehen. mMn.

Kleine Projekte plane ich weniger und Code meistens einfach drauf los.

Größere Projekte (Davon hab ich bis jetzt 2.. (Ich zähl jetzt mal nur Yinc.VM :D)) plane ich meist erstmal im Kopf durch und mal mir dann das Modell in Form einer abgespeckten UML auf (Papier und Stift. Ihr glaubt gar nicht wie wertvoll sowas ist). Also ich male die Klassen, deren Member und wie die Klassen untereinander interagieren. Dabei immer nach der OO-Philosophie: Die Daten stehen im vordergrund, die Implementation ist nebensächlich..