UML sirve para representar sistemas orientados a objetos. En este breve tutorial se muestra el uso de UML para ilustrar los conceptos de la teorí de objetos

Clases

Una clase permite modelar, desde el punto de vista de cómputo, el concepto de objeto.
Una clase, con UML, se simboliza con un rectángulo, que se divide en tres secciones:

Nombre de la clase. Como tal, el identificador de la clase
Los atributos de la clase, que son sus propiedades
Las operaciones de la clase o métodos

Atributos y Métodos

UML permite especificar clases a un nivel de detalle en el cual se puede expresar el tipo de dato del atributo, por ejemplo, como los tipos de datos de Java

Los métodos, a un detalle fino, se componen de :
Nombre del método
Parámetros. Cada Parámetro tiene un nombre y un tipo
Tipo de dato del valor de retorno (si aplica)

Encapsulamiento

La capacidad de una clase para ocultar su implantación se conoce como encapsulamiento.
Al ocultar, se implica que un atributo o método no queda disponible o es manipulable por ciertas clases En lenguajes como Java,existen cuatro maneras de calificar a un atributo o método:
Privado. El elemento só es accesado por objetos de la misma clase que lo contiene (Simbolizado en UML con un -)
Público. El elemento es manipulado por cualquier clase. En UML se simboliza con un +
Protegido (Protected). El elemento es manipulado por la clase o sus descendientes. En UML es simbolizado por #
Visible al paquete. Por omision, si no existe ningun calificador, implica que solo clases que pertenecen al mismo paquete, lo pueden accesar

Paquetes

Cuando una o mas clases se introducen a un paquete, se esta creando un nombre de espacios el cual permite englobar varias clases en un solo paquete, con el fin de clasificarlas segun su utilidad o funcionalidad
En UML, un paquete se simboliza como:

Dentro de un paquete pueden ir varias clases o interfases, en el caso de Java, las clases son bautizadas con el nombre del paquete y el nombre de la clase

Relaciones

Una clase por si sola no puede realizar todo el trabajo, necesita de otras clases.
Existen varias técnicas para relacionar clases:
Asociación.
Consiste en que una clase conoce o tiene referencia a otra clase, con el fin de utilizar una propiedad o método. En UML se simboliza con una linea recta continua:

Agregación
Cuando una clase está compuesta por otras clases, se dice que la clase que es el todo está agregando a otra clase. En UML se representa como un asociación, salvo que se agrega un rombo vacio en la clase que agrega.

Multiplicidad
Una clase puede asociar o agregar mas de un objeto de otra clase (en términos de Java, puede tener un arreglo o Vector que tiene referencia a otros objetos)
La multiplicada puedes ser de uno a uno, uno a muchos o muchos a muchos

Generalización.
Esta manera de relacionarse, tambi&en conocida como herencia, implica que una clase ancestro permita tomar todos sus atributos y funciones protegidas y publicas para que otra clase las incorpore como parte de su estructura
En UML se simboliza como:

Cabe recordar que la herencia permite tomar tanto atributos y métodos, asi como el tipo de dato del ancestro; logrando asi la capacidad de incorporar nuevo código a sistemas existentes.
Delegación
Cuando una clase necesita ofrecer un servicio, pero no desea codificar de nuevo un algoritmo ya existente y tampoco quiere aplicar herencia, la delegación es una manera de lograrlo
Consiste en relacionar una clase que tenga una referencia a la clase que contiene el código implementado

Interfaces

Algunas veces existe una relación entre clases, en la que una clase se compromete a implantar los métodos de un interface.
Una interface es un tipo de datos que define QUE servicios deben ser prestados por dicho tipo de dato, sin embargo no lo implanta (es decir, no lo codifica).
Una interface, se representa como una clase, pero se incluye un estereotipo de UML, denominado "interface". De esta manera se puede describir en que consiste una interface


Otra manera de representar en UML una interfase, sin dar la descripción de los servicios es:

Cuando una clase toma la definición de una interface, se dice que implanta dicha interface. Se puede representar de dos maneras:
o

Las interfases son mecanismos muy utilizados por Java para lograr que una clase tome varios tipos de datos, sin necesidad de aplicar herencia múltiple.
De hecho, las interfases, permiten que un código nuevo se implante de tal manera que sea visto como un tipo de dato, permitiendo su incorporación a sistemas de objetos ya existentes

Jerarquía de Herencia

Cuando varias clases se organizan para construir una Jerarquía de Herencia se presentan nuevos roles o papeles.
Clases Abstracta. Uno o mas métodos se enuncia mas no se codifican.
Clase Base. Es aquella que no tiene ancestro.
Clase Hoja. Es una clase que no puede tener descendientes.
Clase concreta. Es aquella que extiende métodos de una clase abstracta.


Cuando una operación es polimorfica, implica que existe un método que se puede codificar de distintas maneras dentro de la jerarquía de herencia.

Comportamiento Dinámico

Los conceptos anteriores muestran la manera como se estructura de una manera estática una familia de clases.
Cuando una clase es utilizada, se crea un objeto, un repositorio de información
Entre objetos fluyen mensajes. En UML esto se representa asi:

Esto es el equivalente a que el objeto "a" de tipo Clase1 invoque al b.metodo()