UML

A UML (do inglês Unified Modeling Language, em português Linguagem de Modelagem Unificada) é uma linguagem-padrão para a elaboração da estrutura de projetos de software. Ela poderá ser empregada para a visualização, a especificação, a construção e a documentação de artefatos que façam uso de sistemas complexos de software. Em outras palavras, na área de Engenharia de Software, a UML é uma linguagem de modelagem que permite representar um sistema de forma padronizada (com intuito de facilitar a compreensão pré-implementação). A UML é adequada para a modelagem de sistemas, cuja abrangência poderá incluir desde sistemas de informação corporativos a serem distribuídos a aplicações baseadas na Web e até sistemas complexos embutidos de tempo real. É uma linguagem muito expressiva, abrangendo todas as visões necessárias ao desenvolvimento e implantação desses sistemas.

A UML (Unified Modeling Language)  não é uma metodologia de desenvolvimento, o que significa que ela não diz para você o que fazer primeiro e em seguida ou como projetar seu sistema, mas ela lhe auxilia a visualizar seu desenho e a comunicação entre os objetos (e em certos casos a identificação dos processos).

Basicamente, a UML permite que desenvolvedores visualizem os produtos de seus trabalhos em diagramas padronizados. Junto com uma notação gráfica, a UML também especifica significados, isto é, semântica. É uma notação independente de processos, embora o RUP (Rational Unified Process) tenha sido especificamente desenvolvido utilizando a UML.

É importante distinguir entre um modelo UML e um diagrama (ou conjunto de diagramas) de UML. O último é uma representação gráfica da informação do primeiro, mas o primeiro pode existir independentemente. O XMI (XML Metadata Interchange) na sua versão corrente disponibiliza troca de modelos mas não de diagramas.

Os objetivos da UML são: especificação, documentação, estruturação para sub-visualização e maior visualização lógica do desenvolvimento completo de um sistema de informação.

História 
Era uma vez um sistema UML que tinha origem na compilação das "melhores práticas de engenharia" que provaram ter sucesso na modelagem de sistemas grandes e complexos. Sucedeu aos conceitos de Grady Booch, OMT (James Rumbaugh) e OOSE (Ivar Jacobson) fundindo-os numa única linguagem de modelagem comum e largamente utilizada. A UML pretende ser a linguagem de modelagem padrão para modelar sistemas concorrentes e distribuídos.

A UML ainda não é um padrão da indústria, mas esse objetivo está a tomar forma sob os auspícios do Object Management Group (OMG). O OMG pediu informação acerca de metodologias orientadas a objetos que pudessem criar uma linguagem rigorosa de modelagem de software. Muitos líderes da indústria responderam na esperança de ajudar a criar o padrão.

Os esforços para a criação da UML tiveram início em outubro de 1994, quando Rumbaugh se juntou a Booch na Rational. Com o objetivo de unificar os métodos Booch e OMT, decorrido um ano de trabalho, foi lançado, em outubro de 1995, o esboço da versão 0.8 do Unified Process - Processo Unificado (como era conhecido). Nesta mesma época, Jacobson se associou à Rational e o escopo do projeto da UML foi expandido para incorporar o método OOSE. Nasceu então, em junho de 1996, a versão 0.9 da UML.

Finalmente em 2000, a UML foi aprovada como padrão pelo OMG (Object Management Group), um consórcio internacional de empresas que define e ratifica padrões na área de Orientação a Objetos.

Onde pode ser utilizada 
A UML se destina principalmente a sistemas complexos de softwares. Tem sido empregada de maneira efetiva em domínios como os seguintes:
 Sistemas de informações corporativos
 Serviços bancários e financeiros
 Telecomunicações
 Transportes
 Defesa/Espaço Aéreo
 Vendas de Varejo
 Eletrônica médica
 Serviços distribuídos

Visão geral 
UML 2.2, conforme o OMG, possui catorze tipos de diagramas, divididos em duas grandes categorias: Estruturais (7 diagramas) e Comportamentais (7 diagramas). Sete tipos de diagramas representam informações estruturais, e os outros sete representam tipos gerais de comportamento, incluindo quatro em uma sub-categoria que representam diferentes aspectos de interação. Estes diagramas podem ser visualizados de forma hierárquica, como apresentado no padrão de diagrama de classes abaixo:

Diagramas da UML 2.5

Diagramas estruturais 
Os diagramas estruturais tratam o aspecto estrutural tanto do ponto de vista do sistema quanto das classes. Existem para visualizar, especificar, construir e documentar os aspectos estáticos de um sistema, ou seja, a representação de seu esqueleto e estruturas “relativamente estáveis”. Os aspectos estáticos de um sistema de software abrangem a existência e a colocação de itens como classes, interfaces, colaborações, componentes. E é representado em 7 tipos, segue abaixo as descrições:

Diagramas de classes 
O Diagrama de Classes é utilizado para fazer a representação de estruturas de classes de negócio, interfaces e outros sistemas e classes de controle. Além disso, o diagrama de classes é considerado o mais importante para a UML, pois serve de apoio para a maioria dos demais diagramas. Se dá pela formação de conjunto de informações sobre determinadas classes, que unidas entre si formam um sentido geral do projeto.

Exemplos:

Diagramas de objetos 
O diagrama de objetos representa os objetos de um diagrama de classes em um determinado instante de tempo, representando suas instâncias e seus relacionamentos, conforme definidos no diagrama de classes. Os objetos e suas instâncias demonstradas são utilizados para fazer a modelagem da visão estática do projeto de um sistema, a partir de situações da realidade ou de protótipos. Quando mostrado graficamente, é perceptível que o diagrama de objetos seja parecido com o de classes.

Exemplo: Uma classe carro, e o modelo Nissan 2007. O Nissan 2007 é objeto da classe carro.

Diagramas de componentes 
Este diagrama mostra os artefatos de que os componentes são feitos, como arquivos de código fonte, bibliotecas de programação ou tabelas de bancos de dados.
 Modelar software baseado em componentes.
 Indicar os componentes do software e seus relacionamentos.

Diagramas de implementação ou instalação 
O diagrama de utilização, também denominado diagrama de implantação, consiste na organização do conjunto de elementos de um sistema para a sua execução.
 Mostra o layout físico de um sistema, revelando quais partes do software são executadas em quais partes do hardware.
 Enfoca a estrutura física sobre a qual o software irá ser implantado e executado em termos de hardware.
 Define como as máquinas estarão conectadas e através de quais protocolos se comunicarão.
 É útil quando o sistema a ser modelado for ser executado sobre múltiplas camadas.
 Seus elementos são os nós e os caminhos de comunicação.

Diagramas de pacotes 
Um diagrama de pacotes é composto de:
 Pacotes
 Relacionamentos entre pacotes.
 O diagrama de pacotes tem o objetivo de transformar as classes em pacotes. O critério para definir os pacotes é subjetivo e depende da visão e das necessidades do projetista. Este deve definir uma certa semântica e colocar os elementos similares e que tendem a serem modificados em conjunto num mesmo pacote. Como também, pode-se usar os pacotes para mostrar a arquitetura do sistema.

Diagramas de estrutura composta 
O Diagrama de Estrutura Composta é utilizado para modelar Colaborações. Uma colaboração descreve uma visão de um conjunto de entidades cooperativas interpretadas por instâncias que cooperam entre si para executar uma função específica. O termo estrutura desse diagrama refere-se a uma composição de elementos interconectados, representando instâncias de tempo de execução colaboram, por meio de vínculos de comunicação, para atingir algum objetivo comum. Esse diagrama também pode ser utilizado para definir a estrutura interna de um classificador.

Diagrama de perfil
O Diagrama de perfil, definido a partir da UML 2.5, destina-se a criar uma visão ( ou customização de um metamodelo existente com construções específicas para um determinado domínio) do relacionamento entre classes para atender determinado domínio.

Diagrama comportamental 
Utilizado para visualizar, especificar, construir e documentar aspectos dinâmicos de um devido sistema. Considerando aspectos dinâmicos de um sistema como representação das suas partes que passam por alteração, assim como aspectos dinâmicos de uma casa abrangem a passagem de pessoas pelos cômodos, e a circulação de ar, também os aspectos dinâmicos de um sistema de software envolve itens como fluxo de mensagem ao longo do tempo.

UML também permite a representação de um sistema de forma padronizada, para facilitar na compreensão, e ainda auxilia a comunicação entre os objetos, e a identificação de processos.

Existem cinco tipos de diagramas comportamentais

Diagrama de caso de uso 
Organiza os comportamentos do sistema. Um diagrama de caso de uso mostra um conjunto de casos de uso e atores (um tipo especial de classe) e seus relacionamentos. Aplique esses diagramas para ilustrar a visão estática do caso de uso de um sistema. Os diagramas de caso de uso são importantes principalmente para organização e modelagem dos comportamentos de um sistema.
Exemplos:

Diagrama de sequência 
Enfatiza a ordem temporal das mensagens. Um diagrama de sequência é um diagrama de interação que da ênfase à ordenação temporal de mensagens. Um diagrama de sequência mostra um conjunto de papéis e as mensagens enviadas e recebidas pelas instâncias que representam os papéis. Use os diagramas de sequência para ilustrar a visão dinâmica de um sistema.

Diagrama de colaboração 
Enfatiza a organização estrutural de objetos que enviam e recebem mensagens. Um diagrama de comunicação é um diagrama de interação que da ênfase a organização estrutural dos objetos que enviam e recebem mensagens. Um diagrama de comunicação mostra um conjunto de papéis, as conexões existentes entre esses papéis e as mensagens enviadas e recebidas pelas instâncias que representam os papéis. Use os diagramas de comunicação para ilustrar a visão dinâmica de um sistema.

Diagrama de transição de estados 
Enfatiza o estado de mudança de um sistema orientado por eventos. Um diagrama de estados mostra uma máquina de estados, que consiste de estados, transições, eventos e atividades. Use o diagrama de estados para ilustrar a visão dinâmica de um sistema. Esses diagramas são importantes principalmente para fazer a modelagem do comportamento de uma interface, classe ou colaboração. Os diagramas de estados dão ênfase ao comportamento de um objeto, solicitado por eventos, que é de grande ajuda para a modelagem de sistemas reativos.

Diagrama de atividade 
Enfatiza o fluxo de controle de uma atividade para outra. Um diagrama de atividades mostra o fluxo de uma atividade para outro em um sistema. Uma atividade mostra um conjunto de atividades, o fluxo sequencial ou ramificado de uma atividade para outra e os objetos que realizam ou sofrem ações. Use os diagramas de atividades para ilustrar a visão dinâmica de um sistema. Esses diagramas são importantes principalmente para fazer a modelagem da função de um sistema. Os diagramas de atividade dão ênfase ao fluxo de controle na execução de um comportamento. Os diagramas de atividades dependem um do outro, há uma relação de dependência entre eles.

Metamodelagem 

A OMG desenvolveu uma arquitetura de metamodelagem para definir o UML, chamada de Meta-Object Facility. O MOF foi projetado como uma arquitetura de quatro camadas, como mostra a imagem à direita. Ele fornece um modelo meta-meta no topo, chamado camada M3. Este modelo M3 é a linguagem usada pelo Meta-Object Facility para construir metamodelos, chamados modelos M2.

O exemplo mais proeminente de um modelo Meta-Object Facility da camada 2 é o metamodelo UML, que descreve a própria UML. Esses modelos M2 descrevem elementos da camada M1 e, portanto, modelos M1. Esses seriam, por exemplo, modelos escritos em UML. A última camada é a camada M0 ou camada de dados. É usado para descrever instâncias de tempo de execução do sistema.

O meta-modelo pode ser estendido usando um mecanismo chamado estereótipo. Isso foi criticado por ser insuficiente/insustentável por Brian Henderson-Sellers e Cesar Gonzalez-Perez em "Uses and Abuses of the Stereotype Mechanism in UML 1.x and 2.0".

Elementos 
 De estrutura
 Colaboração
 De comportamento
 Interação
 Máquina de estados
 De agrupamento
 Pacote
 Modelo
 Associação (bidirecional)
 Subsistema
 Framework
 De anotação
 Notas

Ver também 
 RUP, processo extensamente desenvolvido sob a notação UML.
 Ambiente de desenvolvimento integrado
 Técnicas de modelagem de dados
 Generalização
 Arquitetura de dados
 ArgoUml, software livre para modelagem em UML
 XMI, um formato padronizado baseado em XML para troca de modelos de UML.

Ligações externas 

 (en) OMG/UML 
 (en) Understanding the Unified Modeling Language (UML)  –
Introductory article for UML. Consultado em 7 de fevereiro de 2011
 (en) Guia de UML
 (en) StarUML Open Source UML/MDA
 (en) UMLZone 

UML
Normas ISO
Sistemas de informação
Engenharia de software