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()