UML - Unified Modelling language is a standardized general-purpose modeling language in the field of object-oriented software engineering. The standard is managed, and was created by, the Object Management Group.UML includes a set of graphic notation techniques to create visual models of object-oriented software-intensive systems.

To examine the existing relationships and patterns in the code, you can generate dependency graphs. In mathematics, computer science and digital electronics, a dependency graph is a directed graph representing dependencies of several objects towards each other. It is possible to derive an evaluation order or the absence of an evaluation order that respects the given dependencies from the dependency graph. If the derivation of something is possible is dependent on dependencies of other elements, and the order of the. If there is no starting point, and every element depends on another, we have an impossible evaluation, and so a circular dependency. A dependency graph without such is called a directed acyclic graph.. To communicate intensions of software, create layer diagrams( In Visual Studio Ultimate, you can use a layer diagram to visualize the logical architecture of your system. A layer diagram organizes the physical artifacts in your system into logical, abstract groups called layers. These layers help you identify, describe, and differentiate the kinds of tasks that those artifacts perform. Each layer can also contain additional layers, or sub layers, that describe smaller specific tasks that discrete groups of artifacts perform).One can then use these diagrams to keep the code consistent with the design. To understand how the code implements a method, generate sequence diagrams. To explore the structure of existing classes, create class diagrams. To model and communicate different aspects of the system, draw Unified Modeling Language (UML) diagrams. These tools create a common glossary of sorts, for visualizing and discussing the inner workings of the software.

So how can this effect modern day design you say ? The answer is that software code is getting increasingly difficult to manage, because of sheer size and complexity. Also, it is a proven fact that a lot of people need to be able to visualize their ideas through some sort of figurative expression to be able to understand and develop. For explanatory and logic- developmental reasons, making simplistic figures can and will help you in a design process. This is true also when it comes to programming.

For a list of UML - tools and how they work, look here. In addition, Visual Studio(Microsoft) offers Visualization and Modelling feature packs that enable you to both model up your code, visualize your existing code or reverse engineer it, meaning visualizing, reconfiguring it through UML and recompiling it. Visual Studio Ultimate provides templates for five of the most frequent UML - type diagrams: activity, class, component, sequence and Use- case. In addition, you can create layer diagrams, which help you define the structure of your system. For reverse engineering, Visual studio has support for c#, but not C++ so here things get a bit tricky. In the case that you are developing in C++, the Visual Paradigm for UML - software has C++ support. Visual Paradigm for UML is part of the Visual Paradigm suite. In the visual Paradigm Suite is also components for the Visual Studio IDE. The bottom line - Get into the different software and find out how you plan to make use of them. Rather than building a UML- model from scratch, this takes time to set up, but will give great reward and understanding.

More to follow......