Unified Modeling Language
(Pequeno Guia da Notação)
Instituto Superior de Engenharia do Porto
Instituto Politécnico do Porto
¾¨¾
Fevereiro de 2002
(draft v0.4)
14 de Março de 2002
A linguagem UML é uma linguagem gráfica para visualização,
especificação, construção e documentação de sistemas.
•
Visualização:
•
Modelos explícitos facilitam a
comunicação
•
Algumas estruturas transcendem a
representação fornecida pelas linguagens de programação
•
Cada símbolo possui associada uma
semântica bem definida
•
Especificação:
•
A linguagem UML permite a
especificação de todas as decisões importantes na análise, projecto e
implementação de sistemas
•
Construção:
•
Permite a geração de código a
partir de um modelo (forward engineering)
•
Permite a reconstrução de um
modelo a partir de código (reverse
engineering)
•
Permite
ambas as abordagens (round-trip
engineering)
•
Documentação
•
A modelação usando UML cria
documentação do sistema no que respeita requisitos, especificações funcionais e
planos de teste
A linguagem UML fornece um método padrão para escrever/descrever um sistema tendo em conta aspectos conceptuais (ex., processos de negócios, funcionalidades) e aspectos concretos (ex., classes java/C++, esquemas de bases de dados).
A linguagem UML define os seguintes tipos de diagramas:
•
diagramas estruturais – consideram os aspectos
estáticos do sistema
•
diagramas de classes – usados para modelar o
vocabulário do sistema; ou seja, quais os conceitos que fazem parte do sistema,
bem como o relacionamento entre esses conceitos;
•
diagramas de objectos – visualizam um conjunto
de objectos e as suas relações num determinado instante de tempo;
•
diagramas de componentes – visualiza um
conjunto de componentes e as suas relações;
•
diagramas de instalação – visualizam a
configuração de um conjunto de nós de processamento e dos componentes em
execução em cada nó.;
•
diagramas de comportamento – consideram aspectos dinâmicos
do sistema
•
diagrama de casos de utilização – visualiza os
casos de utilização (funcionalidades) do sistema e suas relações;
•
diagrama de sequência – é um diagrama que
enfatiza a ordenação temporal de mensagens trocadas entre objectos;
•
diagrama de colaboração – é um diagrama que
enfatiza a organização dos objectos que participam numa interacção;
•
diagrama de estados – especifica a sequência de
estados pelos quais um objecto passa, em resposta a eventos, durante o seu
tempo de vida;
• diagrama de actividades – semelhante a um fluxograma, é útil para modelar o fluxo e o detalhe das operações;
Na análise de um problema e desenvolvimento da respectiva solução, é costume seguir-se os seguintes passos:
A tabela seguinte apresenta uma legenda dos
elementos gráficos utilizados nos diagramas UML.
Tabela 1 – Elementos gráficos da linguagem UML
Símbolo |
Designação |
Descrição |
Utilização |
|
Actor |
Uma entidade (pessoas ou sistemas externos)
que interage com o sistema a modelar. |
Diagramas de casos de utilização, de classes,
de sequência e de colaboração. |
|
Use case |
Uma sequência de acções executadas pelo
sistema de forma a obter um resultado visível para um actor |
Diagramas de casos de utilização. |
<<texto>> |
Estereótipo |
Os estereótipos permitem a classificação de
elementos. Por exemplo, as classes que representam janelas da aplicação podem
ser classificadas com o estereótipo <<form>>*. |
Todos os diagramas. |
|
Associação |
Representa uma associação ou relação entre
dois elementos num diagrama. |
Todos os diagramas. |
|
Relação “uses” |
Tipo especial de relação que indica que um
caso de utilização usa obrigatoriamente as funcionalidades de um outro
caso de utilização |
Diagramas de casos de utilização. |
|
Relação “extends” |
Tipo especial de relação que indica que um
caso de utilização pode opcionalmente estender as funcionalidades de
um outro caso de utilização |
Diagramas de casos de utilização. |
|
Package |
Unidade lógica de agrupamento de elementos
para simplificar a leitura de um diagrama. Cada elemento num modelo pertence apenas a
um “package”. Adicionalmente, os nomes dos elementos devem ser únicops em
cada “package”. |
Todos os diagramas. |
|
Comentário ou nota |
Comentários textuais e/ou gráficos que se
podem adicionar aos elementos de um diagrama para explicar/detalhar certos
aspectos que possam ser dúbios. |
Todos os diagramas. |
|
Classe |
Uma classe é uma descrição de um conjunto de
objectos que partilham os mesmos atributos, operações, relações e semântica.
São uma forma de representar os diferentes conceitos existentes num
sistema/problema. |
Diagramas de classes. |
|
Classe abstracta |
Um tipo especial de classe que não possui objectos, servindo normalmente como base para especialização de outras classes. Denotada pelo nome em itálico. |
Diagramas de classes. |
|
Objecto |
Uma instância específica de uma classe. Corresponde à atribuição de valores concretos aos atributos da classe. Denotada pelo nome sublinhado. |
Diagramas de classes. |
|
Associação unidireccional |
Uma relação navegável entre dois
elementos mas apenas num sentido (ex., composição de classes). |
Todos os diagramas. |
|
Generalização |
Uma relação que indica a especialização
(herança) de um elemento a partir de outro. Isto é, o elemento apontado pela
seta é um caso mais geral do outro elemento. Denota uma relação “é um” ou “do
tipo”. |
Diagramas de classes e de casos de
utilização. |
|
Dependência |
Uma relação que indica a existência de uma
dependência entre dois elementos de tal forma que uma alteração num dos
elementos pode afectar o outro . |
Diagramas de classes, casos de utilização e
de instalação. |
|
Associação n-ária |
Uma associação entre n elementos. |
Diagramas de classes. |
|
Agregação |
Uma relação de agregação entre elementos. É
uma relação “todo/parte” onde um elemento é composto por vários outros elementos.
|
Diagramas de classes. |
|
Classe de associação |
Uma associação com as características de (e
representada por) uma classe. |
Diagramas de classes. |
|
Restrição |
Uma restrição é um mecanismo que permite a
criação de condições e restrições booleanas a aplicar a um ou mais elementos
(ex., associações). |
Todos os diagramas. |
|
“Interface” |
Este estereotipo não deve ser confundido com
interface com utilizador. Interface representa uma “vista” sobre as operações
de uma classe. |
Diagramas de classes. |
|
Interface |
Uma interface é uma colecção de
especificações de operações para definir um serviço sem ditar a sua
implementação. |
Diagramas de instalação. |
|
“Utility” |
Este estereotipo representa um agrupamento
de operações e atributos que não pertencem a nenhuma classe do problema (ex.,
funções de biblioteca) |
Diagrama de classes. |
|
Estado |
Representa o estado de um objecto durante o
seu tempo de vida, enquanto espera por um evento ou efectua alguma acção. |
Diagramas de estado. |
|
Estado inicial |
O estado inicial de um diagrama de estados,
onde se inicia a execução da máquina de estados. |
Diagramas de estado. |
|
Estado final |
O estado final de um diagrama de estados,
onde a execução da máquina de estados finaliza. |
Diagramas de estado. |
|
Actividade |
Representa uma actividade que o objecto
efectua. |
Diagrama de actividades. |
|
Transição |
Indica uma transição entre dois estados
devido à ocorrência de determindas condições ou eventos. |
Diagramas de estado e de actividade. |
|
Decisão |
Elemento que permite tomar uma decisão entre
dois ou mais fluxos alternativos. |
Diagramas de estado e de actividade |
|
Bifurcação ou confluência |
Permite a divisão ou reagrupamento de fluxos de controlo |
Diagramas de estados e de actividades |
|
Nodo |
Representa um elemento físico na instalação
do sistema. Normalmente com capacidade de processamento. |
|
|
Instância de um nodo |
Representa um dispositivo concreto da rede (ex., o computador do gabinete 23). Denotado pelo nome sublinhado. |
Diagramas de instalação. |
|
Componente |
Um componente é uma parte física do sistema
que corresponde à realização de um conjunto de interfaces e/ou classes. |
Diagramas de instalação. |
|
“boundary” |
Tipo de classe de análise usada para modelar
as interacções entre um sistema e os seus actores. Representam normalmente, janelas de
aplicação, APIs, etc. |
Diagramas de classes de análise. |
|
“control” |
Tipo de classe de
análise usada para encapsular modelar o fluxo de
controlo para um dado caso de utilização. Representam coordenação e sequenciamento de
outros objectos. |
Diagramas de classes de análise. |
|
“entity” |
Tipo de classe de análise usada para modelar
informação com grande duração (possivelmente persistente) |
Diagramas de classes de análise. |
|
Linha temporal |
Representa a linha temporal da existência de um objecto. Ao longo da linha serão representadas as
activações do objecto bem como as mensagens recebidas e enviadas. |
Diagramas de sequência. |
|
Mensagem síncrona |
Mensagem trocada entre dois objectos que vai activar o objecto chamado. Pelo facto de ser uma mensagem síncrona, o objecto chamador fica à espera que o objecto chamado termine o processamento antes de continuar. Corresponde normalmente à invocação de uma
operação do objecto chamado. |
Diagramas de sequência. |
|
Mensagem assíncrona |
O assincronismo permite que a mensagem seja
enviada ao objecto chamado, e que o objecto chamador continue imediatamente
a sua execução (i.e., sem esperar pela resposta) |
Diagramas de sequência. |
|
Chamada de procedimento |
Indicação explícita da invocação de um
método no objecto chamado. |
Diagramas de sequência. |
|
Mensagem de retorno |
Indica o retorno de uma mensagem. É omitida
nas mensagens síncronas. |
|
|
Activação |
Indica um tempo de processamento num
objecto. |
Diagramas de sequência. |
Uma classe divide-se em três partes: identificação, atributos e operações. Um atributo é uma propriedade da classe que descreve um conjunto de valores possíveis para essa propriedade (ex., o nome de uma pessoa). Uma operação por seu lado, é um serviço que pode ser requisitado a uma classe (ex., uma pessoa pode falar).
Figura 1 – Explicação de características do elemento classe
A Figura 1 representa uma possível classe Pessoa e identifica alguns atributos (ex., nome, telefone e bi) e uma operação (i.e., falar). Os símbolos +, - e # antes do nome dos atributos ou operações indicam o tipo de visibilidade do item em questão. Se um item é público é precedido pelo símbolo +, enquanto que se for privado é precedido pelo símbolo -. Um item protegido (ou seja, que apenas é visível pela própria classe e por classe derivadas) é precedido do símbolo #.
Os atributos de uma classe podem ter indicação do seu tipo de dados, indicado pelo identificador após o sinal de dois pontos (ex., o atributo nome é do tipo String). Adicionalmente pode-se indicar um valor inicial para um atributo (ex., o atributo telefone tem como valor inicial o valor zero).
Figura 2 – Explicação de características de operações de uma classe
As operações de uma classe podem aceitar argumentos e retornar valores conforme se pode ver na Figura 2. Além do nome e do tipo dos argumentos é possível indicar se se trata de um argumento de entrada (in), saída (out) ou ambos (inout).
Figura 3 – Explicação de características do elemento objecto
A Figura 3 representa o objecto Paulo do tipo Pessoa, onde se pode ver o valor real atribuído às suas propriedades (ex., nome).
|
|
|
Figura 4 – Representações alternativas para objectos
Representações adicionais de objectos podem ser vistas na Figura 4, onde se pode visualizar a representação de objectos sem tipo (1º caso) e sem nome (2º e 3º caso).
Figura 5 – Exemplo de adornos nas associações
As associações entre elementos podem ter adornos especificando a multiplicidade dos elementos bem como o nome da associação segundo o ponto de vista de cada elemento, conforme exemplificado na Figura 5.
A notação UML define vários estereótipos padrão, cuja explicação pode ser encontrada na especificação da notação ou no dicionário UML. De seguida são apresentados alguns desses estereótipos:
• copy – indica uma cópia exacta de um objecto;
• document – indica um documento;
• executable – indica um componente executável num nó;
• extend – usado para indicar uma extensão do comportamento padrão de um caso de utilização (ex., situações de erro);
• file – indica um ficheiro com código fonte ou dados;
• include – indica que um determinado caso de utilização inclui explicitamente um outro case de utilização (ex., comportamentos comuns);
• invariant – representa uma restrição sobre um elemento que deve ser sempre satisfeita (i.e., deve ser sempre verdadeira);
• postcondition – representa uma restrição sobre uma operação que deve ser sempre verdadeira após a execução da operação;
• precondition – representa uma restrição sobre uma operação que deve ser sempre verdadeira antes da execução da operação;
• system – estereotipo associado a um “package” que representa o sistema que se está a modelar;
• table – representa uma tabela de base de dados;
É possível criar novos estereótipos de acordo com as necessidades do sistema que se está a modelar. São em seguida apresentados algumas sugestões de estereótipos:
• form – indicando classes que implementam interfaces com o utilizador;
• COM – indicando objectos COM;
• CORBA – indicando objectos CORBA;
• DLL – indicando ficheiros do tipo DLL;
Figura 6 – Exemplo de um diagrama de casos de utilização
Figura 7 – Exemplo
de um diagrama de classes de análise
Figura 9 – Exemplo de um diagrama de sequência
Figura 10 – Exemplo de um diagrama de colaboração
Figura 8 – Exemplo de um diagrama de classes
Figura 11 – Exemplo de um diagrama de estados
Figura 12 – Exemplo de um diagrama de actividades
Figura 13 – Exemplo de um diagrama de componentes
Figura 14 – Exemplo de um diagrama de instalação
•
A livraria tem que aceitar
encomendas via internet.
•
A livraria deve manter uma lista
de contas de clientes até o limite de um milhão de clientes.
•
As contas dos clientes devem estar
protegidas por password.
•
Deve ser possível efectuar
pesquisas no catalogo principal da livraria.
•
Essas pesquisas devem poder ser
efectuadas por diversos métodos (ex., titulo, autor, ISBN).
•
A livraria deve fornecer um método
seguro de pagamento via cartão de crédito.
•
Devem existir ligações
electrónicas entre a aplicação web a base de dados e o sistema de expedição
(ex., DHL).
•
Devem existir ligações
electrónicas entre a aplicação web a base de dados e o sistema de gestão de
inventário.
•
A livraria deve manter um esquema
de comentários aos livros existentes no catalogo, sendo possível a qualquer
utilizador fazer um novo comentário.
• Os livros devem ser classificados segundo uma pontuação baseada nos inputs dos utilizadores.
Figura 16 – Diagrama
de casos de utilização para exemplo "Livraria na Internet"
Figura 17 – Diagrama
de análise do caso de utilização “Login” para exemplo "Livraria na
Internet"
Figura 18 – Diagrama de análise do caso de utilização “Edit shopping cart” para exemplo "Livraria na Internet"
Figura 19 – Diagrama de sequência do caso de utilização “Login” para exemplo "Livraria na Internet"
Figura 15 – Modelo
do domínio para exemplo "Livraria na
Internet"
Figura 20 – Diagrama de classes (1/3) para exemplo "Livraria na Internet"
Figura 21 – Diagrama de classes (2/3) para exemplo "Livraria na Internet"
Figura 22 – Diagrama de classes (3/3) para exemplo "Livraria na Internet"
Boggs, Wendy &
Boggs, Michael (1999). Mastering UML
with Rational Rose. Sybex.
Rocha, António (2000). Engenharia da Informação – acetatos prática. Unidade de ensino. ISEP/IPP.
Rosenberg, Doug
(2001).
UML for e-Commerce. Seminário Iconix.
Scott,
Scott,
Kendall (URL). Dicionário UML. http://www.usecasedriven.com/UML.htm
* A linguagem UML define alguns estereótipos padrão que podem ser consultados no Dicionário UML disponível em http://www.usecasedriven.com/UML.htm.
** Exemplo retirado do Seminário Iconix "UML for e-Commerce".