Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

Modelagem de Sistemas em UML 
Marcio Quirino - 1 
 
SUMÁRIO 
Caminho do Brilho: Saiba Quais Conteúdos Você Irá Aprender Conosco........................................... 9 
Onboarding ......................................................................................................................................... 9 
Conceitos Básicos de Modelagem de Sistemas ................................................................................. 10 
Descrição .......................................................................................................................................... 10 
Propósito ........................................................................................................................................... 10 
Preparação ....................................................................................................................................... 10 
Introdução ......................................................................................................................................... 10 
Conceitos .......................................................................................................................................... 10 
O que são modelos e para que eles servem ................................................................................... 11 
Comunicação entre as pessoas envolvidas ............................................................................................. 12 
Redução nos custos do desenvolvimento ................................................................................................ 13 
Facilidade para alterações do sistema ..................................................................................................... 13 
Documentação do sistema ....................................................................................................................... 13 
Delimitar o escopo do sistema ................................................................................................................. 13 
Modelagem de sistemas .................................................................................................................. 13 
O processo de desenvolvimento de sistemas em fases ................................................................. 14 
Fases comuns e mais relevantes do processo de desenvolvimento .............................................. 15 
Explorando ferramentas e técnicas de levantamento de requisitos ............................................... 15 
Identificação dos requisitos ...................................................................................................................... 15 
Análise ..................................................................................................................................................... 15 
Projeto ...................................................................................................................................................... 15 
Implementação ......................................................................................................................................... 15 
Modelos como elementos de comunicação..................................................................................... 15 
Equipe levantando dados junto aos usuários ....................................................................................... 16 
Equipe construindo os modelos. .......................................................................................................... 16 
Equipe validando dados junto aos usuários. ........................................................................................ 16 
Conceitos .......................................................................................................................................... 17 
Paradigma orientado a objetos ........................................................................................................ 17 
Conceitos fundamentais da orientação a objetos ............................................................................ 18 
Objetos e classes ..................................................................................................................................... 18 
Operação, mensagem e estado ............................................................................................................... 19 
Operação.............................................................................................................................................. 19 
Mensagem ............................................................................................................................................ 19 
Estado .................................................................................................................................................. 20 
Objeto ....................................................................................................................................................... 20 
Os pilares da orientação a objetos .................................................................................................. 20 
Abstração ................................................................................................................................................. 20 
Encapsulamento ....................................................................................................................................... 20 
Modelagem de Sistemas em UML 
Marcio Quirino - 2 
 
Herança .................................................................................................................................................... 21 
Polimorfismo............................................................................................................................................. 21 
Exemplificando herança e polimorfismo ................................................................................................... 21 
Orientação a objetos como elemento de reusabilidade e extensibilidade ...................................... 22 
Análise de sistemas orientada a objetos ......................................................................................... 22 
Levantamento de requisitos ..................................................................................................................... 23 
Análise de requisitos ................................................................................................................................ 24 
Análise do domínio (ou do negócio) ..................................................................................................... 24 
Análise da aplicação ............................................................................................................................ 24 
Projeto (desenho) de sistemas orientado a objetos ........................................................................ 24 
Projeto da arquitetura ............................................................................................................................... 25 
Projeto detalhado ..................................................................................................................................... 25 
Desenvolvimento de sistemas em camadas ................................................................................... 25 
Vantagens ............................................................................................................................................ 26 
Desvantagens ...................................................................................................................................... 26 
Conceitos .......................................................................................................................................... 26 
O que é UML, afinal? .......................................................................................................................26 
Visões da UML ................................................................................................................................. 28 
Visão de casos de uso ............................................................................................................................. 28 
Visão de projeto (ou lógica) ...................................................................................................................... 28 
Visão de implementação (ou de desenvolvimento) .................................................................................. 28 
Visão de implantação (ou física) .............................................................................................................. 28 
Visão de processo .................................................................................................................................... 28 
UML e integração com processos de desenvolvimento .................................................................. 29 
Em cascata............................................................................................................................................... 29 
Iterativo .................................................................................................................................................... 29 
Ágil ........................................................................................................................................................... 29 
RUP (Rational Unified Process) ............................................................................................................... 29 
Visão geral dos diagramas UML ...................................................................................................... 29 
Diagramas UML e sua utilização nas fases..................................................................................... 31 
Considerações finais ........................................................................................................................ 32 
Referências....................................................................................................................................... 32 
Explore+ ........................................................................................................................................... 32 
UML para modelagem do domínio ...................................................................................................... 33 
Descrição .......................................................................................................................................... 33 
Propósito ........................................................................................................................................... 33 
Preparação ....................................................................................................................................... 33 
Introdução ......................................................................................................................................... 33 
Requisitos funcionais e não funcionais ............................................................................................ 34 
Modelagem de Sistemas em UML 
Marcio Quirino - 3 
 
Diagrama de casos de uso .............................................................................................................. 35 
Atores ............................................................................................................................................... 36 
Caso de uso ..................................................................................................................................... 38 
Casos de uso primários ............................................................................................................................ 38 
Casos de uso secundários ....................................................................................................................... 38 
Relacionamentos .............................................................................................................................. 38 
Relacionamento de comunicação ............................................................................................................ 39 
Relacionamento de inclusão .................................................................................................................... 39 
Relacionamento de extensão ................................................................................................................... 39 
Relacionamento de generalização ........................................................................................................... 40 
Especificação e formatos de casos de uso ..................................................................................... 41 
Formato contínuo ..................................................................................................................................... 41 
Formato numerado ................................................................................................................................... 41 
Formato tabular ........................................................................................................................................ 42 
Cenário principal e cenários alternativos ......................................................................................... 42 
Estrutura de especificação de casos de uso ................................................................................... 43 
Especificação de casos de uso com inclusão e extensão .............................................................. 44 
Conceito e elementos de uma classe .............................................................................................. 44 
Visão geral do diagrama de classes ................................................................................................ 46 
Modelo de classes de análise .................................................................................................................. 47 
Modelo de classes de projeto ................................................................................................................... 47 
Modelo de classes de implementação ..................................................................................................... 48 
Relacionamentos no diagrama de classes ...................................................................................... 48 
Nome ........................................................................................................................................................ 49 
Multiplicidades .......................................................................................................................................... 49 
Tipo de participação ................................................................................................................................. 50 
Direção da leitura ..................................................................................................................................... 50 
Papéis ...................................................................................................................................................... 50 
Classes associativas ........................................................................................................................ 50 
Autoassociação ........................................................................................................................................ 50 
Todo-parte ................................................................................................................................................ 51 
Herança ............................................................................................................................................52 
Visão geral do diagrama de objetos ................................................................................................ 52 
Visão geral do diagrama de pacotes ............................................................................................... 55 
Desdobramentos dos diagramas no pacote .................................................................................... 56 
Considerações finais ........................................................................................................................ 58 
Referências....................................................................................................................................... 58 
Explore+ ........................................................................................................................................... 59 
Utilizando UML Para Projetar o Software ............................................................................................ 60 
Modelagem de Sistemas em UML 
Marcio Quirino - 4 
 
Descrição .......................................................................................................................................... 60 
Propósito ........................................................................................................................................... 60 
Preparação ....................................................................................................................................... 60 
Introdução ......................................................................................................................................... 60 
Atividades do desenvolvimento de software.................................................................................... 61 
Diagramas de interação ................................................................................................................... 61 
Diagrama de sequência ................................................................................................................... 63 
Elementos do diagrama de sequência ..................................................................................................... 63 
Objetos ................................................................................................................................................. 63 
Linha da Vida ....................................................................................................................................... 65 
Mensagens ........................................................................................................................................... 66 
Mensagens de iteração ........................................................................................................................ 66 
Condições de guarda ........................................................................................................................... 67 
Autochamada ....................................................................................................................................... 67 
Ocorrência de interação ....................................................................................................................... 68 
Opt ....................................................................................................................................................... 68 
Loop ..................................................................................................................................................... 69 
Alt ......................................................................................................................................................... 69 
Diagrama de comunicação .............................................................................................................. 70 
Como construir um diagrama de interação...................................................................................... 71 
Em que momento construir o modelo de interações ....................................................................... 72 
Modelo de casos de uso ➔ Modelo de interações ................................................................................... 72 
Modelo de classes de análise ➔ Modelo de interações ........................................................................... 72 
Modelo de interações ➔ Modelo de casos de uso ................................................................................... 72 
Modelo de interações ➔ Modelo de classes ............................................................................................ 72 
Diagrama de classes de projeto....................................................................................................... 73 
Definição .................................................................................................................................................. 73 
Especificação de atributos ....................................................................................................................... 73 
Especificação de operações/métodos ...................................................................................................... 75 
Especificação de associações.................................................................................................................. 75 
Transformação de associações em dependências ......................................................................... 77 
Classes persistentes e transientes ........................................................................................................... 77 
Classes de interface ................................................................................................................................. 77 
Navegabilidade de associações ...................................................................................................... 78 
Transição entre estados ................................................................................................................... 79 
Diagrama de transição de estados .................................................................................................. 80 
Transições ................................................................................................................................................ 81 
Identificação dos elementos de um diagrama de estados ........................................................................ 82 
Construção de diagramas de transições de estados ...................................................................... 83 
Modelagem de Sistemas em UML 
Marcio Quirino - 5 
 
Diagrama de atividades.................................................................................................................... 84 
Fluxo de controle sequencial .................................................................................................................... 85 
Fluxo de controle paralelo ........................................................................................................................ 85 
Raias ........................................................................................................................................................ 86 
Modelagem da lógica de uma operação complexa ......................................................................... 86 
Diagrama de componentes .............................................................................................................. 87 
Componente ............................................................................................................................................. 87 
Interfaces ................................................................................................................................................. 88 
Conectores ...............................................................................................................................................88 
Camadas .................................................................................................................................................. 89 
Diagrama de implantação ................................................................................................................ 89 
Nós do diagrama de implantação ............................................................................................................. 90 
Considerações finais ........................................................................................................................ 92 
Referências....................................................................................................................................... 92 
Explore+ ........................................................................................................................................... 92 
Estudo de Caso de Modelagem de Sistemas em UML ...................................................................... 93 
Descrição .......................................................................................................................................... 93 
Propósito ........................................................................................................................................... 93 
Preparação ....................................................................................................................................... 93 
Introdução ......................................................................................................................................... 93 
UML (Unified Modeling Language) .................................................................................................. 94 
Levantamento de requisitos ............................................................................................................. 95 
Minimundo do estudo de caso ......................................................................................................... 96 
Descrição do Minimundo .......................................................................................................................... 96 
Requisitos funcionais (RF) ....................................................................................................................... 96 
Requisitos não funcionais (RNF) .............................................................................................................. 97 
Requisitos de domínio ...................................................................................................................... 97 
Modelo de casos de uso .................................................................................................................. 98 
Estudo de caso – Diagrama de casos de uso ................................................................................. 98 
Diagrama de Casos de Uso aplicando todos RF.................................................................................... 100 
Estudo de caso – descrições de casos de uso....................................................................................... 101 
Modelo de classes .......................................................................................................................... 103 
Estudo de caso – Modelo de classes ............................................................................................ 104 
Modelo de atividades ..................................................................................................................... 107 
Modelagem de processo de negócio ...................................................................................................... 107 
Modelagem da lógica de um caso de uso .............................................................................................. 107 
Modelagem da lógica de uma operação ................................................................................................ 107 
Estudo de caso ‒ Modelo de atividades ........................................................................................ 107 
Modelo de estados ......................................................................................................................... 109 
Modelagem de Sistemas em UML 
Marcio Quirino - 6 
 
Estudo de caso ‒ Modelo de estados ............................................................................................ 110 
Modelo de classes de análise ................................................................................................................ 111 
Modelo de atividades ............................................................................................................................. 111 
Modelo de estados ................................................................................................................................. 111 
Modelo de interação ....................................................................................................................... 111 
Diagrama de sequência ......................................................................................................................... 111 
Diagrama de comunicação ..................................................................................................................... 111 
Estudo de caso – Modelo de interação ......................................................................................... 112 
Diagrama de sequência ......................................................................................................................... 112 
Diagrama de comunicação ..................................................................................................................... 115 
Modelo de classes de projeto ........................................................................................................ 116 
Estudo de caso ‒ Modelo de classes de projeto ........................................................................... 116 
Modelo de implementação ............................................................................................................. 118 
Estudo de caso ‒ Modelo de implementação ................................................................................ 118 
Modelo de implantação .................................................................................................................. 118 
Estudo de caso ‒ Modelo de implantação ..................................................................................... 119 
Modelo de interação ............................................................................................................................... 119 
Modelo de classes de projeto ................................................................................................................. 119 
Modelo de implementação ..................................................................................................................... 119 
Modelo de implantação .......................................................................................................................... 119 
Considerações finais ...................................................................................................................... 119 
Referências..................................................................................................................................... 120 
Explore+ ......................................................................................................................................... 120 
Introdução a Padrões de Projeto - Design Patterns .......................................................................... 121 
Descrição ........................................................................................................................................ 121 
Propósito .........................................................................................................................................121 
Preparação ..................................................................................................................................... 121 
Introdução ....................................................................................................................................... 121 
O que é um padrão de projeto................................................................................................................ 123 
Vantagens e desvantagens do uso de padrões de projeto .................................................................... 124 
Principais padrões em linhas gerais ....................................................................................................... 125 
Especialista..................................................................................................................................... 125 
Problema: ............................................................................................................................................... 125 
Solução: ................................................................................................................................................. 126 
Consequências:...................................................................................................................................... 127 
Criador ............................................................................................................................................ 127 
Problema ................................................................................................................................................ 127 
Solução .................................................................................................................................................. 128 
Consequências....................................................................................................................................... 128 
Modelagem de Sistemas em UML 
Marcio Quirino - 7 
 
Baixo acoplamento ......................................................................................................................... 128 
Problema ................................................................................................................................................ 128 
Solução .................................................................................................................................................. 129 
Consequências....................................................................................................................................... 129 
Alta coesão ..................................................................................................................................... 130 
Problema ................................................................................................................................................ 130 
Solução .................................................................................................................................................. 130 
Consequências....................................................................................................................................... 131 
Controlador ..................................................................................................................................... 131 
Problema ................................................................................................................................................ 131 
Solução .................................................................................................................................................. 131 
Consequências....................................................................................................................................... 132 
Polimorfismo ................................................................................................................................... 132 
Problema ................................................................................................................................................ 132 
Solução .................................................................................................................................................. 133 
Consequências....................................................................................................................................... 133 
Princípios SOLID ............................................................................................................................ 134 
Princípio da Responsabilidade Única (SRP) .......................................................................................... 134 
Princípio Aberto Fechado (OCP) ............................................................................................................ 135 
Violação do princípio OCP (clonagem)............................................................................................... 135 
Reestruturação adequada ao princípio OCP. ..................................................................................... 137 
Princípio da Substituição de Liskov (LSP) .............................................................................................. 138 
Princípio LSP (Quadrado) .................................................................................................................. 138 
Violação do princípio LSP .................................................................................................................. 139 
Princípio da Segregação de Interfaces (ISP) ......................................................................................... 139 
Violação do princípio ISP ................................................................................................................... 140 
Segregação das interfaces ................................................................................................................. 140 
Princípio da Inversão de Dependências (DIP)........................................................................................ 140 
Violação do princípio da Inversão de Dependências .......................................................................... 141 
Por que essa dependência é inadequada? ........................................................................................ 141 
Factory Method ............................................................................................................................... 142 
Problema ................................................................................................................................................ 142 
Por que este padrão é importante? ........................................................................................................ 142 
Solução .................................................................................................................................................. 143 
Consequências....................................................................................................................................... 144 
Adapter ........................................................................................................................................... 144 
Problema ................................................................................................................................................ 144 
Solução .................................................................................................................................................. 145 
Consequências....................................................................................................................................... 146 
Facade ............................................................................................................................................146 
Modelagem de Sistemas em UML 
Marcio Quirino - 8 
 
Problema ................................................................................................................................................ 146 
Solução .................................................................................................................................................. 147 
Consequências....................................................................................................................................... 147 
Strategy .......................................................................................................................................... 147 
Problema ................................................................................................................................................ 147 
Solução .................................................................................................................................................. 147 
Consequências....................................................................................................................................... 148 
Template Method............................................................................................................................ 149 
Problema ................................................................................................................................................ 149 
Solução .................................................................................................................................................. 149 
Consequências....................................................................................................................................... 150 
Considerações Finais ..................................................................................................................... 150 
Referências..................................................................................................................................... 151 
Explore+ ......................................................................................................................................... 151 
Modelagem de Sistemas em UML 
Marcio Quirino - 9 
 
Modelagem de Sistemas em UML 
Caminho do Brilho: Saiba Quais Conteúdos Você Irá 
Aprender Conosco 
Onboarding 
Caro aluno, seja bem-vindo ao universo da Modelagem de Sistemas em UML, uma viagem fascinante 
pelo coração da Tecnologia da Informação, onde cada diagrama e modelo é um passo em direção à 
excelência profissional. 
Ao mergulhar nos Conceitos Básicos de Modelagem de Sistemas, você está se munindo de uma 
linguagem universal em TI, algo que transcende as fronteiras do código e entra no reino da abstração lógica. 
Aqui, é como se estivéssemos aprendendo o alfabeto de uma nova língua, uma que irá permitir que você 
converse sobre complexidades de sistemas com clareza cristalina. 
Quando você emprega a UML para Modelagem do Domínio, começa a ver além do óbvio; os objetos 
e entidades do mundo real transformam-se em blocos construtivos nas suas mãos. É mais do que desenhar 
diagramas; é sobre entender a essência dos sistemas que você irá criar e melhorar, uma competência 
inestimável que elevará suas condições de trabalho e reconhecimento profissional. 
À medida que você Utiliza a UML para Projetar o Software, você está, de fato, orquestrando a 
comunicação entre os diversos atores do desenvolvimento de sistemas. Com essa habilidade, seu perfil se 
destaca não apenas como um desenvolvedor, mas como um visionário capaz de antecipar necessidades e 
integrar soluções eficazes, tornando-se um candidato diferenciado no mercado de trabalho. 
E não apenas isso, ao analisar um Estudo de Caso de Modelagem de Sistemas em UML, você não 
apenas testemunha a teoria ganhando vida; você vivencia o processo, identifica os desafios e triunfa sobre 
eles. Cada caso é um conto de adaptação e sucesso, preparando-o para as nuances do mundo real da TI e 
reforçando sua competência. 
Por fim, ao se introduzir aos Padrões de Projeto – Design Patterns, você está decifrando o DNA de 
softwares eficientes. É como ter uma visão de raio-X das melhores práticas de programação e design, uma 
habilidade que te distingue como um profissional não só competente, mas inovador. 
Essa jornada de aprendizado, meu caro aluno, não é apenas sobre absorver conhecimento; é sobre 
transformar-se em um profissional que molda a própria realidade da TI. A Modelagem de Sistemas em UML 
é o seu pincel, e a vastidão da computação, a sua tela. 
Então, celebre cada nova descoberta, cada conexão que você faz, cada modelo que você aperfeiçoa, 
pois em cada um desses momentos, você está não só aprendendo - está evoluindo. E lembre-se sempre, a 
universidade é mais do que uma etapa; é o espaço onde suas aspirações tomam forma e seu futuro é 
forjado. Sinta-se especial, pois aqui, na graduação, você está não apenas estudando, mas construindo as 
fundações de um amanhã repleto de possibilidades. 
 
Modelagem de Sistemas em UML 
Marcio Quirino - 10 
 
Conceitos Básicos de Modelagem de Sistemas 
Descrição 
O desenvolvimento de sistemas orientado a objetos e a Linguagem Unificada de Modelagem (UML) 
para criação de modelos, sob a forma de diagramas, com representação dos requisitos e das soluções de 
análise e projeto de sistemas de qualquer porte e finalidade. 
Propósito 
Compreender a UML no contexto de desenvolvimento de sistemas orientado a objetos (ou não) como 
uma ferramenta de construção de diagramas padronizados para ajudar a equipe de desenvolvimento a 
entender o que o sistema deve fazer, num primeiro momento, e como o sistema deve fazer, num momento 
seguinte. Disponibilizar diagramas que permitam enxergar o sistema sob cinco diferentes perspectivas e 
usá-los da forma que convier, em consonância com qualquer processo de desenvolvimento de sistemas. 
Preparação 
Antes de iniciar este conteúdo, é indicado ter instalado em seu computador um programa que permita 
elaborar modelos sob a forma de diagramas da UML (Linguagem Unificada de Modelagem). Nossa sugestão 
inicial é o Astah Free Student License, e será necessário usar seu e-mail institucional para ativar a licença. 
Preencha os dados do formulário, envie e aguarde a liberação de sua licença em seu e-mail institucional. 
Ao receber a licença, siga as instruções do e-mail e instale o produto em seu computador. 
Sugestões de links adicionais de ferramentas livres para modelagem de sistemas em UML podem 
ser encontradas em buscas na internet. 
Introdução 
Aprenderemos os conceitos básicos de modelagem de sistemas para compreender a realidade do 
negócio inerente ao sistema e expor as soluções para atender às necessidades reais de seus usuários. 
Iniciaremos pelo conceito de modelo e mostraremos sua aplicabilidade no contexto de desenvolvimento de 
sistemas. Vamos compreender que existem diferentes modelos que devem ser aplicados, sob a forma de 
templates e diagramas, nas diferentes fases do processo de desenvolvimento do sistema. 
Focaremos no desenvolvimento de sistemas orientado a objetos, compreendendo suas bases 
conceituais e seus pilares de sustentação. Dentro desse contexto, conheceremos a Linguagem Unificada 
de Modelagem (UML, do inglês Unified Modeling Language) e suas visões integradas de modelos, sob 
diferentes perspectivas, para abarcar as diversas necessidades de modelagem para exposição dos 
requisitos, das soluções de análise e de projeto do sistema em construção. A UML é uma linguagem de 
modelagem independente de tecnologia, que pode ser aplicada em diferentes processos e metodologias de 
desenvolvimento de sistemas orientados a objetos. 
1. Modelos na exposição de requisitos e soluções sistêmicas 
Reconhecer a importância dos modelos na exposição de requisitos e soluções sistêmicas 
Conceitos 
Neste módulo, veremos por que são usados modelos,sob a forma de diagramas, durante o processo 
de desenvolvimento de sistemas computacionais para expor as necessidades dos usuários e as ideias dos 
desenvolvedores para a construção do novo sistema. Assim, vamos conceituar e compreender a relevância 
da modelagem de sistemas. 
Modelagem de Sistemas em UML 
Marcio Quirino - 11 
 
O que são modelos e para que eles servem 
Exemplo 
Uma família decide adquirir um imóvel na planta para moradia. Ela vai, então, a um lançamento imobiliário a 
convite de um corretor conhecido. Chegando lá, deparam-se com o terreno vazio e um stand de vendas. 
Imediatamente, vem a dúvida: como escolher o bloco e o apartamento para que não sejam devassados, considerando 
a vizinhança? 
O corretor então inicia seu trabalho e leva a todos para conhecerem a maquete do empreendimento − que 
nada mais é do que a representação do empreendimento em bloco único − e a infraestrutura do parque aquático. 
A maquete é uma representação, em miniatura, do condomínio real. É um modelo do empreendimento 
real. Ou seja, o empreendimento real será construído à imagem e semelhança da maquete construída. 
A maquete é, portanto, um modelo (a base) a partir do qual o empreendimento real será construído. 
É uma simplificação da realidade, de forma que decisões prévias possam ser tomadas antes de sua 
construção, sob a perspectiva da construtora, e de sua aquisição, sob a perspectiva do comprador. 
No exemplo a seguir, encontramos maquetes de um empreendimento imobiliário, mostrando a 
perspectiva externa, dando a visão clara da vizinhança, do posicionamento do imóvel, da piscina e área de 
lazer e da entrada. 
Podemos estabelecer, então, a primeira finalidade de um modelo: antecipar a existência de uma 
realidade para avaliar sua estrutura e seu comportamento. 
Voltando ao exemplo do imóvel: 
Analisando a maquete e o posicionamento do empreendimento no terreno, os integrantes da família 
verificam o bloco e a posição do imóvel que mais lhes interessam, avaliando as vizinhanças e respectivas 
distâncias entre eles. 
 
Maquete de um empreendimento 
Em seguida, eles se sentam à mesa com o corretor para escolher a unidade no bloco selecionado. 
O corretor então apresenta a tabela de preços de cada unidade do bloco selecionado, informando a 
metragem, o valor da unidade e as condições de pagamento. 
A família seleciona três unidades e pergunta sobre a disposição dos cômodos. O corretor então 
apresenta a planta baixa de cada unidade selecionada. A imagem a seguir mostra a planta de uma das 
unidades: 
Modelagem de Sistemas em UML 
Marcio Quirino - 12 
 
 
Planta de uma unidade de um empreendimento. 
A planta ilustrativa da unidade é um segundo exemplo de modelo usado no mercado imobiliário, que 
possibilita ao comprador avaliar o posicionamento e a dimensão de cada cômodo. 
A família decide-se pelo imóvel, fecha o negócio e recebe um pen drive contendo outras plantas da 
unidade: elétrica, hidráulica, dentre outras. Cada uma dessas plantas representa um modelo sob uma 
diferente perspectiva. 
Outro exemplo de modelo muito comum atualmente são os protótipos, usados para aumentar a 
chance de sucesso dos produtos. A partir de um protótipo inicial, outros modelos podem ser demandados e 
aprimoramentos podem ser desenvolvidos. Os setores automobilístico e o de desenvolvimento de sistemas 
usam com eficácia protótipos como modelos. 
Resumindo 
Modelo: 
✓ Representação abstrata e simplificada da realidade. 
✓ Uma realidade pode demandar diferentes modelos, dependendo da perspectiva com que precise ser 
observada. 
Finalidade principal: 
✓ Antecipar a existência de uma realidade de forma a avaliar sua estrutura e comportamento. 
Modelos se aplicam ao contexto de desenvolvimento de sistemas? 
Na construção ou desenvolvimento de sistemas computacionais, assim como na construção 
imobiliária, há uma gradação da complexidade no processo de construção, que depende de alguns fatores, 
sendo o tamanho (do sistema ou do empreendimento) um deles. 
Os modelos, além da finalidade inicial, funcionam também como instrumento de gerenciamento da 
complexidade, considerando a limitação humana em lidar com ela. Os sistemas grandes e complexos 
carecem de ser modelados para sua melhor compreensão em sua totalidade. 
Modelos são capazes de revelar as propriedades essenciais de um sistema, ajudando no processo de 
abstração (concentração nos pontos de interesse) e permitindo que foquem no que é relevante. 
Dentre os benefícios que podemos citar para o uso de modelos em desenvolvimento de sistemas 
computacionais, além de tentar prever o comportamento do sistema e gerenciar sua complexidade, 
destacam-se: 
Comunicação entre as pessoas envolvidas 
O modelo serve como elemento de comunicação ou difusão de informações entre as pessoas 
envolvidas em sua construção. 
Modelagem de Sistemas em UML 
Marcio Quirino - 13 
 
Redução nos custos do desenvolvimento 
A construção de modelos é bem mais barata que a construção do sistema em si. A descoberta de 
erros e falhas em modelos é bem menos onerosa e contribui para a redução dos custos finais do sistema 
computacional. Isso também vale para as eventuais necessidades de ajustes e melhorias no sistema. 
Facilidade para alterações do sistema 
Depois de pronto, seja ainda na fase de construção ou de manutenção, os sistemas carecem de 
ajustes e melhorias. A análise dessas melhorias tende a ser mais efetiva quando elaborada sobre os 
modelos construídos, aumentando a assertividade e diminuindo seus custos. Daí a relevância e a 
necessidade de manter os modelos sempre atualizados. 
Documentação do sistema 
Os modelos servem de consulta e orientação a toda a equipe na construção e na manutenção do 
sistema, incluindo pessoas que sejam integradas após o início do desenvolvimento do sistema. Servem 
ainda para documentar as decisões tomadas. 
Delimitar o escopo do sistema 
A modelagem ajuda na delimitação do escopo, ou seja, abrangência do sistema, definindo o que será 
ou não tratado pelo sistema. 
Modelagem de sistemas 
Assim como exemplificamos no mercado imobiliário, no contexto de desenvolvimento de sistemas 
computacionais podem ser usados diferentes modelos de um mesmo sistema, em que cada um apresenta 
uma perspectiva (uma visão). 
Exemplo 
Um sistema armazena e manipula dados através de funcionalidades e possui determinados controles. 
Poderíamos pensar então em três perspectivas e, dessa forma, construir modelos que representem os dados, as 
funcionalidades e os controles, cada um focando uma perspectiva diferente. 
Outra perspectiva seria a visão externa, a de um usuário, que enxerga as funcionalidades 
necessárias, mas desconhece o que ocorre internamente. Essa seria mais uma perspectiva e mais um 
modelo que ajudaria nessa compreensão. 
Outra forma de abordar os sistemas computacionais por meio de visões seria: 
A. Externa 
✓ modela-se o ambiente em que o sistema está inserido, mostrando sua relação com os usuários e 
demais sistemas com que interage. 
B. Comportamental 
✓ modela-se o comportamento dinâmico do sistema e como ele reage aos eventos que o afetam. 
C. Estrutural 
✓ modela-se sua estrutura organizacional ou os dados que o sistema processa. 
D. Interação 
✓ modela-se as interações de seus componentes ou ainda do sistema e seu ambiente externo. 
A construção dos diferentes modelos para um sistema compreende o que denominamos de 
Modelagem de Sistemas, onde: 
1. Os modelos são abstratos, deixando de lado os detalhes e concentrando-se nos aspectos 
de interesse que são relevantes. A esse processo chamamos de abstração. 
2. Cada modelo apresenta o sistema sob uma diferente visão ou perspectiva da realidade. 
Modelagem de Sistemas em UML 
Marcio Quirino - 14 
 
3. Os modelos são descritos em notações gráficas, que denominamos diagramas. 
Modelagem de sistema de software consiste na utilização de notações gráficas e textuais com o objetivo deconstruir modelos que representam as partes essenciais de um sistema, considerando-se várias perspectivas 
diferentes e complementares. (BEZERRA, 2015) 
Como veremos mais adiante, a UML é uma linguagem unificada de modelagem que permite a 
construção de um conjunto de modelos, na forma de diagramas, sob diferentes visões ou perspectivas que, 
em conjunto, integram a solução de modelagem do sistema quando desenvolvido usando o paradigma 
orientado a objetos. 
O processo de desenvolvimento de sistemas em fases 
O desenvolvimento de sistemas computacionais é um processo que envolve pessoas e a 
necessidade de compreensão de uma realidade muitas vezes complexa e obscura, principalmente no início 
do desenvolvimento (vide imagem a seguir), quando o nível de abstração é alto e pouco se conhece da 
realidade. 
Conforme as fases em que o processo de desenvolvimento é particionado se sucedem, o 
conhecimento sobre o sistema aumenta, diminuindo, consequentemente, o nível de abstração da realidade. 
Essa complexidade aumenta na medida em que o tamanho do sistema cresce, requerendo um maior 
planejamento dos recursos a serem usados. O principal recurso no desenvolvimento de um sistema são 
pessoas, profissionais capacitados. 
 
Realidade X Sistema 
Num primeiro momento, precisamos compreender com muita clareza as necessidades das pessoas que serão 
usuárias do sistema, o que elas precisam que o sistema faça para que possam cumprir suas funções. 
Esse entendimento passa, também, pela necessidade da confirmação dessa compreensão pelas pessoas que 
estão construindo o sistema (os profissionais especializados). 
Mas como entender e confirmar a compreensão numa linguagem ambígua como a nossa, tanto a 
falada como a escrita? 
Se construirmos o sistema diretamente na linguagem de programação, a partir de um suposto 
entendimento da realidade, certamente teremos problemas de interpretação inadequada, e o sistema tende 
a não atender às necessidades de seus usuários, sendo então abandonado. Para representar 
adequadamente a realidade e entender o que se passa no contexto do sistema a ser construído, precisamos 
traduzir a realidade em modelos. 
Modelagem de Sistemas em UML 
Marcio Quirino - 15 
 
Fases comuns e mais relevantes do processo de desenvolvimento 
Dentro desse raciocínio, os modelos nos ajudam a entender a realidade e discutir essa compreensão, 
reduzindo a complexidade e o nível de abstração. 
Os modelos são, portanto, uma representação simplificada da realidade, representando os elementos de 
interesse naquele momento, permitindo abstrair o que não interessa e concentrar naquilo que de fato é relevante para 
o desenvolvimento do sistema. 
Desde os anos 1960, muitos processos, métodos e diversas técnicas de desenvolvimento de 
sistemas foram criados e postos em prática, visando à construção de sistemas computacionais robustos, 
eficientes e de fácil manutenção. 
Objetivando um melhor gerenciamento da complexidade, os processos e as metodologias de 
desenvolvimento de sistemas costumam ser divididos em fases. 
Cada processo ou metodologia cria sua própria divisão, mas, de maneira geral, podemos citar que 
(haverá exceção, logicamente) compreendem as fases de: 
Explorando ferramentas e técnicas de levantamento de requisitos 
Identificação dos requisitos 
Requisitos podem ser entendidos como as necessidades que os usuários têm e que devem estar 
contidos nas funcionalidades e propriedades do sistema a ser construído. 
Análise 
Com base nos requisitos, compreende-se o que o sistema deve fazer em prol de seus usuários. 
Projeto 
Compreende a adequação dos requisitos a como eles serão implementados, usando a tecnologia 
adequada para tal, definindo sua arquitetura e seus componentes. Define-se ainda toda a infraestrutura do 
ambiente computacional que será usada na construção do sistema, como: redes de computadores, banco 
de dados, linguagem de programação, dentre outros elementos. 
Implementação 
Diz respeito à identificação dos programas necessários e sua codificação na linguagem de 
programação selecionada na fase de projeto, bem como o banco de dados que será usado. 
Modelos como elementos de comunicação 
Os modelos atuam em mão dupla enquanto elementos de comunicação no processo de 
desenvolvimento de sistemas, ajudando: 
1. No entendimento e na validação dos modelos junto aos usuários; e 
2. No entendimento do sistema por membros da equipe de desenvolvimento. 
Entendimento e validação dos modelos junto aos usuários 
A partir dos modelos, compreendemos e nos certificarmos do correto entendimento da realidade junto 
aos usuários, conforme ilustrado a seguir (Momento 1, Momento 2 e Momento 3): 
Modelagem de Sistemas em UML 
Marcio Quirino - 16 
 
 
Equipe levantando dados junto aos usuários 
• Momento 1: A equipe de desenvolvimento se reúne com os usuários e, usando técnicas de 
levantamento de dados, compreende a realidade e as necessidades que os usuários têm, visando 
a que sejam implementadas no sistema. Os dados levantados são registrados e usados na 
construção dos modelos. Esse momento acontece com maior intensidade na fase de requisitos, 
mas também se faz presente nas fases de análise e de projeto. 
 
Equipe construindo os modelos. 
• Momento 2: A equipe de desenvolvimento constrói os modelos que julga pertinentes para que se 
possa compreender e destacar os aspectos relevantes da realidade. Esse momento acontece 
nas fases de requisitos, análise e projeto. 
 
Equipe validando dados junto aos usuários. 
• Momento 3: A equipe de desenvolvimento se reúne com os usuários, apresentando e discutindo 
os modelos construídos, visando validá-los e responder à pergunta base: os modelos que 
construímos representam de fato a realidade dos usuários? Em caso positivo, prossegue-se no 
desenvolvimento; caso contrário, os modelos são ajustados e confirmados novamente junto aos 
usuários, até que estejam adequados. Esse momento acontece nas fases de requisitos, análise 
e projeto. 
Entendimento do sistema por membros da equipe de desenvolvimento 
Outra finalidade dos modelos no desenvolvimento de sistemas é orientar membros da equipe quanto 
a suas tarefas no processo. 
Exemplo 
Modelagem de Sistemas em UML 
Marcio Quirino - 17 
 
O programador deve construir os programas, mas não tem livre acesso aos usuários e nem precisa, pois os 
modelos servem como elementos de comunicação com todos da equipe. Os projetistas do software devem 
compreender a realidade dos requisitos para construir os modelos de projeto, por isso precisam ler os modelos das 
fases de requisitos e de análise. Os programadores consultam os modelos de seu interesse e conversam com os 
membros que fizeram o levantamento de dados e a modelagem para compreenderem melhor o contexto e 
desenvolverem com mais eficiência os programas necessários. 
Outro exemplo seria um projetista de interface, que precisa conhecer o funcionamento de 
determinado recurso para criar a interface necessária, então ele consulta o modelo que exibe a comunicação 
do usuário com o sistema para a referida funcionalidade. Esse momento acontece em todas as fases do 
projeto, pois sempre haverá desenvolvedores recebendo tarefas e consultando os respectivos modelos 
pertinentes. 
A imagem a seguir ilustra a consulta de diferentes pessoas da equipe aos modelos desenvolvidos. 
 
Equipe consultando os modelos 
2. Análise e projeto orientados a objetos 
Distinguir os conceitos e pilares de análise e projeto orientados a objetos 
Conceitos 
Neste módulo, compreenderemos os conceitos, pilares, princípios e as orientações do paradigma 
orientado a objetos. Veremos também as visões, os objetivos e as entregas dos momentos de análise, 
projeto e implementação (em camadas), independentemente de processo ou metodologia de 
desenvolvimento de software. 
Paradigma orientado a objetos 
Com o aumento do tamanho do código e da complexidade dos programas, o paradigma estruturado,que antecedeu o paradigma orientado a objetos, começou a apresentar limitações nos sistemas sob o ponto 
de vista da dificuldade de manutenção e reuso de programas e rotinas padronizadas. 
Vamos, inicialmente, definir o termo paradigma como a maneira de abordar um problema. 
A orientação a objetos surge como solução a esses problemas, permitindo − mediante propriedades 
como abstração, encapsulamento, herança e polimorfismo − maior organização, reaproveitamento e 
extensibilidade de código e, consequentemente, programas mais fáceis de serem escritos e mantidos. 
O principal foco do paradigma orientado a objetos é permitir o desenvolvimento de sistemas de forma 
mais rápida e confiável. 
Um dos criadores do paradigma orientado a objetos, Alan Kay, imaginou um sistema como um 
conjunto de agentes autônomos, os objetos, que interagem entre si. 
Ele definiu os princípios centrais da orientação a objetos: 
1. Qualquer coisa do mundo real é um objeto 
2. Objetos realizam tarefas requisitando serviços a outros objetos 
Modelagem de Sistemas em UML 
Marcio Quirino - 18 
 
3. Os objetos similares são agrupados em classes e cada objeto pertence a uma classe 
4. A classe determina o comportamento possível a um objeto 
5. Classes são organizadas em hierarquias 
O paradigma da orientação a objetos visualiza um sistema de software como uma coleção de agentes 
interconectados chamados objetos. Cada um deles é responsável por realizar tarefas específicas e, para cumprir com 
algumas das tarefas sob sua responsabilidade, um objeto pode ter que interagir com outros. É pela interação entre eles 
que uma tarefa computacional é executada. Um sistema de software orientado a objetos consiste, portanto, em objetos 
colaborando para realizar as funcionalidades desse sistema. É graças à cooperação entre os objetos que a computação 
do sistema se desenvolve. (BEZERRA, 2015) 
Atenção 
Observação: Ao longo do texto, abreviaremos o termo "orientação a objetos" como O.O. 
Conceitos fundamentais da orientação a objetos 
A orientação a objetos enfatiza a identificação, a representação e a organização dos objetos 
necessários ao funcionamento de um sistema. Tem por base os conceitos de objetos, classes, operação, 
mensagem e estado, e está calcada em quatro pilares fundamentais: abstração, encapsulamento, herança 
e polimorfismo, discutidos na sequência. 
Neste tópico, adentraremos nesses conceitos fundamentais da orientação a objetos. 
Objetos e classes 
Um objeto pode referenciar qualquer coisa do mundo real: um aluno, uma disciplina, um curso, um 
professor, entre outros, considerando um sistema acadêmico como contexto. Ou seja, um objeto é qualquer 
coisa do mundo real, de interesse no contexto em estudo. 
Quando analisamos os objetos pertinentes a um contexto, não estamos preocupados com um objeto específico 
como, por exemplo, o aluno “José Carlos Aragão”, e sim com todos os alunos envolvidos no estudo. Surge então o 
conceito de classe que, conceitualmente, reúne (agrupa) um conjunto de objetos com as mesmas propriedades. Ou 
seja, estamos interessados em todos os alunos e não apenas em “José Carlos Aragão”. Usando o princípio da 
abstração (que detalharemos mais adiante), temos que uma classe agrupa objetos com as mesmas características ou 
propriedades, que são seus dados (atributos) e seus procedimentos (métodos) que implementam os serviços que essa 
classe vai prestar. 
A classe ALUNO agrupa “José Carlos Aragão” e os demais alunos envolvidos. Um objeto é um 
elemento específico de uma classe, ou ainda uma instância de uma classe. 
As classes são, portanto, abstrações que definem uma estrutura que encapsula dados (chamados 
de atributos) e um conjunto de operações possíveis de serem usados, chamados métodos. Por exemplo, a 
classe ALUNO encapsula um conjunto de dados que identifique os alunos − matrícula, nome, endereço (rua, 
número, complemento, estado e CEP), CPF e Identidade − e um conjunto de métodos: Incluir Aluno, 
Matricular Aluno, Cancelar Matrícula, dentre outros. 
Resumindo 
A. Classe: 
✓ Abstração das características de um grupo de coisas do mundo real. 
B. Objeto: 
✓ Um elemento específico de uma classe ou uma instância de uma classe. 
A seguir, temos a representação de uma classe em três compartimentos: o nome da classe (ALUNO), 
seus atributos (Matrícula... Identidade) e métodos (Incluir Aluno... Cancelar Matrícula). 
Modelagem de Sistemas em UML 
Marcio Quirino - 19 
 
 
Classe ALUNO 
A seguir, temos a representação de dois objetos da classe ALUNO: 
 
Objeto - Aluno 1 da classe ALUNO. 
 
Objeto Aluno 2 da classe ALUNO 
Operação, mensagem e estado 
Um sistema orientado a objetos consiste na cooperação entre seus objetos. Cada um tem uma 
responsabilidade no sistema, correspondendo à parte das funcionalidades que lhes são atribuídas. Em 
outras palavras, uma tarefa computacional é realizada pela interação entre seus objetos, cada um executa 
parte da tarefa. 
Operação 
Operação é o nome dado a cada ação (função) que o objeto sabe realizar. Mas um objeto não realiza 
nenhuma ação sem uma motivação, sem um estímulo. 
Mensagem 
Chamamos esse estímulo de mensagem, que chega a um objeto e solicita que ele realize uma de 
suas operações. Uma operação, por sua vez, pode ser implementada por meio de pelo menos um método. 
Modelagem de Sistemas em UML 
Marcio Quirino - 20 
 
Em outras palavras, cada objeto presta um serviço. Quando um objeto precisa de um serviço da 
responsabilidade de outro, ele precisa enviar uma mensagem a ele. Cada mensagem ativa uma das 
operações do objeto. 
Estado 
Já sabemos que um objeto contém atributos, que são dados necessários para prestar os serviços 
que cabem a esse objeto. Por definição, chama-se estado do objeto o conjunto de valores de seus atributos 
em dado momento. Uma mensagem enviada a um objeto pode (ou não) alterar o seu estado, na medida em 
que pode alterar um ou mais valores de seus atributos. 
Objeto 
Imagine, por exemplo, que o objeto Notas_Aluno contenha as notas do aluno em determinada 
disciplina. Em dado momento, é recebida uma mensagem informando uma nova nota a ser armazenada. O 
estado desse objeto foi alterado, pois um de seus atributos recebeu a nova nota. Agora suponha que 
determinado objeto enviou uma mensagem a Notas_Aluno solicitando que seja exibida a média atual; nesse 
caso, não houve alteração de estado, pois as notas foram consultadas, e a média foi calculada (não fica 
armazenada) e exibida. 
 
Partes de um objeto 
Os pilares da orientação a objetos 
Dentre as principais características do paradigma orientado a objeto (O.O.), destacamos: 
Abstração 
É um processo mental que permeia toda a orientação a objetos, como um princípio básico que serve 
de base aos demais princípios. A abstração permite que, ao estudar algo, ponhamos nossa concentração 
nos aspectos relevantes e deixemos de lado os menos importantes. Permite, portanto, gerenciar a 
complexidade de um objeto para que possamos nos ater às suas propriedades essenciais. E os aspectos 
essenciais de um objeto dependem, claro, do contexto no qual os analisamos, podendo variar. Ou seja, uma 
propriedade de um objeto pode ser relevante em um contexto e não ser em outro. 
Encapsulamento 
O objeto esconde (encapsula) seus dados (atributos) do acesso indevido por outros objetos e 
somente permite que eles sejam acessados por operações implementadas pelos seus próprios métodos 
(funcionalidades que implementam o comportamento do objeto). Com isso, o encapsulamento protege os 
dados do objeto do uso arbitrário ou não intencional, como pode ser visualizado na figura seguinte. O 
encapsulamento é uma técnica para minimizar a interdependência entre as classes, pois apenas os métodos 
da respectiva classe podem alterar seus dados (atributos), facilitando a identificação de erros e a alteração 
dos programas. Em outras palavras, garante que apenas os métodos da própria classe possam alteraro 
estado de um objeto. 
Modelagem de Sistemas em UML 
Marcio Quirino - 21 
 
 
Encapsulamento 
Herança 
Mecanismo para derivar novas classes a partir da definição de classes existentes, com base em um 
processo de refinamento. Uma classe derivada ou descendente herda os dados (atributos) e o 
comportamento (métodos) da classe base ou ancestral ou ascendente. A implementação da herança garante 
a reutilização de código, que, além de economizar tempo e dinheiro, propicia mais segurança ao processo 
de desenvolvimento, posto que as funcionalidades da classe base podem ter sido usadas e testadas. 
Polimorfismo 
A palavra polimorfismo deriva do grego e significa “muitas formas”. A partir do momento em que uma 
classe herda atributos e métodos de uma (herança simples) ou mais (herança múltipla) classes base, ela 
tem o poder de alterar o comportamento de cada um desses procedimentos (métodos). Isso amplia o poder 
do reaproveitamento de código promovido pela herança, permitindo que se aproveite alguns métodos e se 
altere (redefina) outros. Dessa forma, um método com mesmo nome em classes distintas pode ter diferentes 
comportamentos. 
Exemplificando herança e polimorfismo 
Acompanhe o exemplo da imagem a seguir, na qual identificamos uma herança: Pagamento em 
Dinheiro, Pagamento em CC (Cartão de crédito) e Pagamento em Cheque herdam da classe Pagamento, o 
atributo Valor e o método Pagar. 
 
Herança e polimorfismo 
Observe que, em cada classe filha (Pagamento em Dinheiro, Pagamento em Cartão e Pagamento 
em Cheque), o método PagarConta é escrito de forma diferente, com distintos parâmetros e códigos 
Modelagem de Sistemas em UML 
Marcio Quirino - 22 
 
internos, conforme exige a respectiva forma de pagamento. Essa possibilidade ocorre pelo princípio do 
polimorfismo. 
Orientação a objetos como elemento de reusabilidade e 
extensibilidade 
A orientação a objetos minimiza a gestão da complexidade na medida em que permite uma 
organização mais adequada de seus componentes, além de seu reaproveitamento. Um dos principais 
motivos para a baixa produtividade na construção de sistemas computacionais é a dificuldade de reutilização 
de código. 
As hierarquias de classes (herança) são estruturas que permitem o seu reaproveitamento entre aplicações que, 
se bem projetadas, podem ser reutilizadas em vários sistemas, otimizando tempo e dinheiro. 
Além disso, tais estruturas podem ser estendidas (usando o princípio do polimorfismo) sem 
corromper o que já existe. Dessa forma, pode-se concluir que a orientação a objetos traz em si os seguintes 
benefícios: 
A. Reusabilidade 
✓ O uso de componentes já escritos pode ser a base para outros softwares (através da herança). 
B. Extensibilidade 
✓ Novos componentes podem ser desenvolvidos a partir de outros, já desenvolvidos, sem afetar o 
comportamento do componente de origem (mediante o princípio do polimorfismo) e permitindo que 
esse comportamento seja alterado, estendido para um novo contexto. 
Análise de sistemas orientada a objetos 
Antes de adentramos no universo da análise sob o enfoque do paradigma orientado a objetos, vamos 
tecer rápidos comentários acerca do que seja a atividade de análise no contexto do desenvolvimento de 
software. 
De forma simples, pode-se dizer que a atividade de análise visa identificar o que os usuários e os demais 
interessados (que juntos formam os stakeholders) precisam que o sistema faça. 
Análise de sistemas implica numa investigação dos problemas e dos requisitos (necessidades dos 
usuários) de um contexto, em particular, visando a construção de um sistema automatizado. 
Atenção 
O foco da atividade de análise é estudar e entender o funcionamento de um sistema sob pelo menos alguns 
pontos de vista: da estrutura que sustenta o sistema (os dados); dos procedimentos e processos intervenientes no 
sistema; da dinâmica de funcionamento do fluxo de informações e dados, dentre outros aspectos que podem ser 
adicionados, dependendo da especificidade do sistema em construção. 
A atividade de análise, por ser muito abrangente, costuma ser dividida em: levantamento de 
requisitos (investigação dos requisitos) e análise dos requisitos. 
1. Inicialmente, entendemos a realidade, identificamos a abrangência do sistema e capturamos 
as necessidades dos usuários desse sistema, usando técnicas específicas (levantamento 
de requisitos). 
2. Posteriormente, analisamos e entendemos essas necessidades e o funcionamento e a 
dinâmica da organização (análise dos requisitos), visando à construção de modelos que 
representem o sistema a ser desenvolvido, em sua concepção lógica, sem preocupação 
com qualquer recurso tecnológico que venha sustentar o seu funcionamento. 
Modelagem de Sistemas em UML 
Marcio Quirino - 23 
 
A atividade de análise não leva em consideração nenhum recurso tecnológico que possa ser utilizado 
pelo sistema em construção. A ideia é construir uma estratégia de solução sem considerar como (com que 
tecnologia) essa estratégia será construída. 
A preocupação da atividade de análise é identificar: O QUE o sistema deve fazer para atender às necessidades 
de seus usuários. 
A sua finalidade é construir a melhor solução, que possa ser implementada em qualquer tecnologia 
(plataforma operacional, linguagem de programação e banco de dados), de acordo com as disponíveis no 
mercado, naquele momento. 
No contexto da orientação a objetos, foca-se na identificação, no entendimento e na definição dos 
objetos de software e em como eles irão colaborar para que os requisitos dos usuários sejam respondidos 
satisfatoriamente. 
Levantamento de requisitos 
Nesta fase, o foco é conversar com as pessoas envolvidas com o sistema (patrocinadores, gestores, 
usuários atuais e futuros e demais envolvidos) e compreender as necessidades e desejos de cada um. O 
foco, portanto, é na compreensão do problema. 
As necessidades e os desejos que os usuários têm são, tecnicamente, chamados de requisitos. Os 
desenvolvedores e as demais pessoas envolvidas se reúnem, visando à identificação dos requisitos do sistema, 
considerando o contexto específico e o domínio do problema (área do conhecimento ou atividade específica) a que o 
sistema se aplica. 
Requisitos 
Requisito pode ser definido como sendo uma condição ou capacidade que deve ser alcançada por um sistema 
para satisfazer uma necessidade. 
Para que os desenvolvedores possam identificar as necessidades dos usuários do sistema, é usado 
um conjunto de técnicas de levantamento de dados, desde as tradicionais entrevistas, reuniões, observação 
do ambiente do usuário e questionários até técnicas mais sofisticadas como brainstorm. 
O produto gerado por essa fase é o documento de requisitos, que contém todos os requisitos 
necessários ao sistema, classificados em: 
1. Requisitos funcionais 
✓ Declaram as funcionalidades necessárias ao sistema. 
2. Requisitos não funcionais 
✓ Apresentam algumas características associadas a uma, algumas ou todas as 
funcionalidades, e dizem respeito a aspectos de qualidade, confiabilidade, desempenho, 
portabilidade, segurança e usabilidade do sistema. 
Exemplo 
Imagine um sistema financeiro, no qual haja a necessidade das seguintes funcionalidades: Cadastramento 
dos pagamentos, Quitação dos pagamentos, Cadastramento das receitas, Quitação das receitas e Emissão das 
faturas. 
Cada uma das cinco funcionalidades anteriores representa um requisito funcional do sistema. Imagine, então, 
que o sistema precise ser touch screen. Tal característica da funcionalidade Emissão das faturas é um requisito não 
funcional de usabilidade (relacionada com uma interface de qualidade). Outro requisito não funcional de segurança 
seria a necessidade de um backup diário da base de dados. 
A correta identificação e seu registro no documento de requisitos são cruciais para a precisão e a 
qualidade do processo de desenvolvimento do sistema. Um requisito faltante ou outro mal definidopode ser 
fatal para seu sucesso. 
 
Modelagem de Sistemas em UML 
Marcio Quirino - 24 
 
Dica 
O documento de requisitos seguirá como base da comunicação entre os desenvolvedores e os usuários, 
devendo ser validado por estes, uma vez que servirá de norte para as atividades subsequentes do desenvolvimento 
do sistema. É, portanto, fundamental a participação ativa e efetiva dos usuários do sistema na fase de levantamento 
de requisitos. 
No documento de requisitos estará definido, também, o escopo do sistema. 
O principal ponto da fase de levantamento de requisitos é compreender profundamente no sistema 
antes de iniciar a sua construção. 
Análise de requisitos 
A fase de análise de requisitos é a transposição dos registros dos requisitos funcionais e não 
funcionais para os modelos que a equipe pretende usar. 
A principal atividade é desdobrar os requisitos funcionais em funcionalidades do sistema, uma vez 
que não necessariamente há uma relação de 1 para 1, ou seja, um requisito funcional pode demandar mais 
de uma funcionalidade e uma funcionalidade pode agregar mais de um requisito funcional. 
A análise de requisitos tem, minimamente, duas perspectivas ou visões: 
Análise do domínio (ou do negócio) 
✓ Visa a identificar ou modelar os objetos que serão usados na aplicação. Por exemplo, Pagamento 
é um objeto no contexto do sistema financeiro, usado para exemplificar os requisitos funcionais. 
Logo, Pagamento é um objeto do domínio, assim como Recebimento e Fatura. 
Análise da aplicação 
✓ Em geral, sucede a análise do domínio. Nela, são identificados os objetos de análise que não 
fazem sentido para os analistas de domínio, mas que são fundamentais para atender às 
funcionalidades necessárias ao sistema, a aplicação em si (daí seu nome). Por exemplo, uma 
interface de cadastramento de pagamentos é um objeto de aplicação do sistema de controle 
financeiro. Nesse momento, o foco é apenas a identificação desse objeto, sem especificar sua 
implementação, o que será detalhado na fase de Projeto (descrita adiante). 
Análise do domínio 
Objetos do domínio (relacionado ao problema) 
 
Análise da aplicação 
Objetos da aplicação (relacionado a aspectos computacionais de alto nível) 
Os principais diagramas UML usados nas fases de análise são: diagramas de casos de uso e 
diagrama de classes. Além desses, ajudam também diagramas de interação e de estados, em alguns casos. 
Análise pode ser traduzida em “faça a coisa certa”. 
Projeto (desenho) de sistemas orientado a objetos 
A atividade de projeto denota uma solução, voltada a atender aos requisitos identificados na fase de 
análise, considerando os recursos tecnológicos necessários para implementar os objetos do domínio e os 
objetos da aplicação. 
O objetivo é decidir “como o sistema funcionará” para atender aos requisitos. Em geral, o projeto enfoca a 
definição da arquitetura do sistema, determinando suas partes e a relação entre elas, o padrão de interface gráfica, o 
Modelagem de Sistemas em UML 
Marcio Quirino - 25 
 
ambiente computacional (sistema operacional e computacional), a linguagem de programação o gerenciamento do 
banco de dados. 
O projeto, portanto, deriva da análise e produz uma descrição dos recursos computacionais e de 
como o sistema deve executar no dia a dia. Muitas vezes algumas restrições tecnológicas podem ser 
impostas como, por exemplo, desenvolver na linguagem X, pelo fato de os sistemas da organização estarem 
nessa linguagem (claro, se ainda existir no mercado), ou usar o sistema gerenciador de banco de dados Y, 
pelo fato de a base corporativa da organização estar nele. 
A fase de projeto pode ser dividida em: 
Projeto da arquitetura 
Ato de distribuir as classes de análise em subsistemas com seus componentes, bem como distribuir 
os componentes pelos recursos de hardware disponíveis. Dentre os diagramas da UML, usamos aqui os 
diagramas de pacotes, componentes e implantação. 
Projeto detalhado 
Compreende atividades como modelagem das colaborações entre os objetos, projeto da interface, 
projeto do banco de dados e aspectos computacionais de alto nível (concorrência e distribuição de 
processamento e dados). O projeto de algoritmos pode ser considerado aqui também, detalhando aspectos 
do que for relevante para o projeto. Dentre os diagramas UML usados aqui, destacam-se: diagrama de 
interação (sequência ou comunicação), atividades (se demandar detalhamento de um método ou método 
com processamento paralelo), detalhamento do diagrama de classes, de estados, dentre outros detalhados 
adiante. 
Observação: Projeto pode ser traduzido em “faça certo a coisa”. 
Desenvolvimento de sistemas em camadas 
Abordaremos, inicialmente, a arquitetura de projeto de software em camadas de uma forma geral, 
sem nos atermos a um modelo em especial. O foco é separar o desenvolvimento do código em camadas, 
diminuindo sua complexidade e facilitando a sua manutenção. Camadas separam as responsabilidades e 
gerenciam as dependências. 
1. No início da computação, os sistemas eram monolíticos, ou seja, todo o código ficava 
confinado numa única camada, onde misturavam-se comandos de processamento, de 
construção e manipulação de interface, bem como de acesso e persistência de dados em 
SGBD. “Tudo junto e misturado”. 
2. Quando era preciso fazer manutenção no código, havia dificuldade no entendimento e na 
separação do que de fato precisava ser alterado, sem contar a interferência em uma parte 
do código quando se alterava outra, em princípio sem relação entre si. 
3. À medida que os sistemas cresceram e se tornaram complexos, a manutenção ficou mais 
difícil e a divisão em camadas foi uma das soluções encontradas para o projeto de 
arquitetura de um software. 
Num primeiro momento, a rede cliente-servidor, naturalmente, dividiu o software em duas camadas: 
a camada de código que roda no cliente (camada de interface com usuário) e a camada servidor (camadas 
de lógica do negócio e persistência dos dados). Posteriormente, com o advento da web, separou-se em três 
e depois em quatro camadas. Atualmente, pode-se criar tantas camadas quantas sejam necessárias, em 
função do tipo de aplicação. 
As camadas em geral: 
✓ Possuem alta coesão e baixo acoplamento, ou seja, concentram atividades afins (coesão) e são 
independentes umas das outras. 
Modelagem de Sistemas em UML 
Marcio Quirino - 26 
 
✓ Possuem propósito bem definido. 
✓ A camada superior tem conhecimento apenas da imediatamente inferior, que fornece os serviços, por 
uma interface. 
No caso da orientação a objetos, as classes são organizadas em módulos maiores, as chamadas 
camadas. Uma camada somente pode usar serviço (de outras classes) da camada imediatamente inferior. 
A seguir, as vantagens e desvantagens do desenvolvimento de software em camadas: 
Vantagens 
• Torna o código mais organizado e legível. 
• Permite o desenvolvimento, o teste e a manutenção das camadas isoladamente. 
• Permite melhor reuso do código ou dos objetos. 
• Pode substituir uma tecnologia que implemente uma camada, de forma simples, sem interferir 
nas demais. Por exemplo, para trocar o SGBD de SQL Server para PostgreSQL, basta alterar 
a camada de persistência. As demais permanecem como estavam. 
• Disciplina as dependências entre as camadas. 
• Mais adaptável a uma quantidade maior de usuários. 
Desvantagens 
• Aumenta o número de classes do sistema. 
• A adição de camadas torna o sistema mais complexo. 
• Potencialmente, reduz o desempenho do software. 
Como exemplo, podemos citar o modelo de camadas mais usado nos últimos anos, o de três 
camadas, que engloba as camadas de: 
A. Apresentação 
✓ Compreende as classes do sistema que permitem a interação com o usuário, as chamadas 
classes de fronteira. 
B. Negócio 
✓ Compreende as classes responsáveis pelos serviços e pelas regras do negócio, ou seja, 
reúne as classes de controle e negócio. 
C. Dados 
✓ Responsável pelo armazenamentoe pela recuperação dos dados persistentes do sistema, 
ou seja, as classes de persistência de dados. 
3. Síntese geral e os diagramas da UML 
Descrever as visões, a síntese geral e os diagramas da UML 
Conceitos 
Neste módulo, conheceremos a UML (Unified Modeling Language ou Linguagem Unificada de 
Modelagem). Essa linguagem padronizada oferece um conjunto de diagramas, sob diferentes visões, que 
permitem a modelagem de sistemas orientada a objetos, independente de tecnologia e de processos e 
metodologias de desenvolvimento de sistemas, cabendo seu uso em qualquer contexto de desenvolvimento 
orientado a objetos. 
O que é UML, afinal? 
No final dos anos 1990, as linguagens de programação orientadas a objeto já eram uma realidade, e 
cada profissional que desenvolvia atividade de análise e projeto de sistemas criava seus próprios modelos, 
Modelagem de Sistemas em UML 
Marcio Quirino - 27 
 
baseados em suas necessidades e realidade. Ou seja, não havia consenso no mercado sobre os modelos 
a serem usados para modelagem de sistemas desenvolvidos sob a tecnologia de orientação a objetos. 
Três competentes profissionais despontavam com seus modelos naquele momento: 
✓ Ivar Jacobson, idealizador do método OOSE (Object-Oriented Software Engineering). 
✓ James Rumbaugh, criador do método OMT (Object, Modeling Technique). 
✓ Grady Booch, criador do método que leva seu nome. 
A UML foi então adotada pela OMG (Object Management Group), em 1997, oriunda da integração 
dos três métodos anteriormente descritos, como uma linguagem de modelagem padrão para sistemas 
desenvolvidos sob o paradigma orientado a objetos. 
UML tornou-se o padrão para modelagem gráfica, não apenas para objetos e, de fato, faz sentido essa 
afirmativa, pois a UML pode ser a linguagem de modelagem para diagramar sistemas concorrentes e distribuídos. 
(FOWLER, 2005.) 
Desde sua versão inicial, a UML sofreu mudanças substanciais e atualmente encontra-se em sua 
versão 2.5.1, de dezembro de 2017. 
A UML é, portanto, uma linguagem padrão para construção de projetos de sistemas, voltada para a 
visualização, a especificação, a construção e a documentação de artefatos de um sistema. Foi projetada para ser 
independente do método ou processo de desenvolvimento utilizado. 
A UML é uma linguagem de modelagem, não é um método de desenvolvimento nem tampouco uma 
metodologia ou um processo de desenvolvimento de sistemas, uma vez que não determina a ordem e nem 
como os diagramas devem ser usados. Simplesmente disponibiliza os diagramas, sob as várias visões 
necessárias ao desenvolvimento de sistemas, e cada empresa (ou equipe de desenvolvimento) a utiliza da 
forma como lhe convenha, ou seja, adequando a UML ao seu processo ou metodologia de desenvolvimento 
de sistemas. 
A UML é uma linguagem destinada a: 
A. Visualização 
• A modelagem gráfica facilita a compreensão do sistema e das decisões tomadas em análise 
e projeto, além de melhorar a comunicação entre a equipe, permitindo sua interpretação sem 
ambiguidades. 
B. Especificação 
• Permite a construção de modelos precisos, não ambíguos e completos sob diferentes visões 
e atendendo às necessidades de modelagem das diferentes fases do processo de 
desenvolvimento de software, independentemente do processo ou modelo usado. 
C. Construção 
• Os diagramas UML podem ser integrados às principais e mais populares linguagens de 
programação do mercado, tais como Java e C++. Mas, para isso, terá que buscar uma 
solução integrada de ferramenta CASE (Computer-Aided Software Engineering) que gere 
código fonte (para linguagens específicas) a partir de alguns diagramas UML. 
Resumindo 
1. A UML é uma linguagem de modelagem padronizada. 
2. A UML é independente de tecnologia, adequando-se a todo método, metodologia ou processo de 
desenvolvimento. 
3. A UML não diz quais diagramas usar e nem em que ordem, pois a metodologia de desenvolvimento 
ditará essa ordem. 
4. A UML disponibiliza diagramas sob diferentes visões ou perspectivas. 
A UML se tornou não somente a notação gráfica dominante dentro do mundo orientado a objetos, como 
também uma técnica popular nos círculos não orientado a objetos. (FOWLER, 2005) 
Modelagem de Sistemas em UML 
Marcio Quirino - 28 
 
Visões da UML 
Assim como vimos nos exemplos do empreendimento imobiliário, as plantas das unidades, a planta 
elétrica, a planta hidráulica, dentre outras, cada modelo tinha uma perspectiva de compreensão da mesma 
realidade (unidades residenciais em um empreendimento). No mundo de sistemas computacionais, o 
mesmo acontece com relação à modelagem de sistemas com UML. Os autores da UML entendem que um 
sistema deve ser visto sob cinco diferentes perspectivas ou visões, descritas a seguir: 
Visão de casos de uso 
• Assim como a maquete permite uma perspectiva geral do empreendimento imobiliário, sob o 
ponto de vista externo (visão do comprador), a visão de caso de uso permite olhar o sistema sob 
o ponto de vista externo, do usuário, descrevendo seu comportamento por conjunto de interações 
usuário-sistema. Tal qual a maquete, é a primeira perspectiva de um empreendimento; a visão 
de caso de uso é criada no estágio inicial do desenvolvimento e guia todas as demais visões, na 
medida em que captura os requisitos funcionais que definem o sistema. 
Visão de projeto (ou lógica) 
• Permite visualizar o sistema sob o ponto de vista de sua estrutura interna e seu comportamento, 
em resposta às funcionalidades externamente percebidas por seus usuários. Enfatiza os pacotes, 
as classes, as interfaces, os subsistemas (pacotes) e as colaborações. 
Visão de implementação (ou de desenvolvimento) 
• Compreende o gerenciamento das versões do sistema, ou seja, de suas implementações 
utilizáveis por seus usuários. Compreendem os componentes, subsistemas e arquivos que 
compõem fisicamente o sistema. 
Visão de implantação (ou física) 
• Enfatiza a distribuição física do sistema em suas partes (subsistemas e componentes) e as 
respectivas conexões entre elas. Enfatiza também a organização física dos computadores e as 
conexões entre eles (a rede de computadores). 
Visão de processo 
• Enfatiza aspectos físicos mais peculiares como concorrência, sincronismo entre sistemas e 
desempenho (performance, confiabilidade, tolerância a falhas e outros aspectos) do sistema, 
considerando os processos e os processadores. 
A UML implementa diagramas que atuam nas cinco visões descritas anteriormente, permitindo ampla 
modelagem sobre todos os aspectos (visões) relevantes do sistema. 
Nem todas as perspectivas ou visões são úteis em todo desenvolvimento, pois dependem das 
características, tipo e complexidade do sistema. A imagem a seguir mostra a ideia central da visão de casos 
de uso, influenciando todas as demais. 
 
Visões da UML 
Modelagem de Sistemas em UML 
Marcio Quirino - 29 
 
UML e integração com processos de desenvolvimento 
A UML é independente de metodologia e processo de desenvolvimento. Isso é positivo para os 
fabricantes de software que implementam UML, pois não limita seu mercado. 
Sendo assim, cabe a cada empresa ou equipe de desenvolvimento a integração da UML com sua 
metodologia de desenvolvimento de sistemas computacionais, permitindo uma modelagem eficiente. 
A UML pode ser usada de diversas formas, desde esboços manuais para interação com usuários ou equipe, 
passando pelo uso de ferramentas de diagramação UML até sofisticadas ferramentas CASE, que integram os modelos 
e geram código em linguagens específicas. 
A UML então pode ser adaptada em qualquer processo, seja ele: 
Em cascata 
• Com e sem retroalimentação, onde as fases se sucedem, a seguinte inicia quando a anterior 
termina. A desvantagem é que, se for sem retroalimentação, não há opção de retorno à fase 
anterior. Por exemplo, se na fase de projeto identificamos novos requisitos, estes não podem ser 
considerados, pois a fase de análise congelou os requisitos identificados.Se a retroalimentação 
for permitida, esse problema pode ser minimizado, mas não solucionado. O grande problema é 
que o usuário interage com a equipe de desenvolvimento no início do processo e ao final, quando 
o sistema é entregue. 
Iterativo 
• Onde o sistema é dividido em subconjuntos de funcionalidades (com mínimo de dependência 
com os demais conjuntos), e as atividades de análise, projeto, implementação, teste e 
implantação são realizadas a cada subconjunto. Isso significa que a cada subconjunto haverá a 
implantação de uma parte do sistema, permitindo que ajustes das partes encerradas ocorram em 
paralelo com o novo subconjunto de funcionalidades que está sendo construído. 
Ágil 
• Os processos são ditos ágeis porque compartilham um conjunto de valores e princípios definido 
pelo manifesto ágil. O foco aqui é permitir modificação sempre que preciso e no desenvolvimento 
de código. A modelagem existe, mas em menor escala e com ênfase na comunicação com 
usuário e equipe de desenvolvimento. Visa a pouca formalidade nos processos ágeis. Mais 
usados: Extreme Programming (XP), Scrum, FDD (Feature Driven Development). 
RUP (Rational Unified Process) 
• O mercado muito fala da integração UML e RUP, mas, como os demais processos, o RUP é 
independente da UML. O RUP, na verdade, é uma estrutura de processo, que vai usar casos de 
desenvolvimentos (processo a ser usado), a maioria deles iterativos. O RUP não se adapta a 
processo em cascata. 
Visão geral dos diagramas UML 
Vamos nos ater aqui à versão mais recente da UML, a 2.5.1, que traz 14 diagramas divididos em 
estruturais e comportamentais, conforme imagem a seguir. 
A. Os diagramas estruturais 
✓ Dizem respeito às estruturas estáticas necessárias ao sistema, como os pacotes, as classes, 
os objetos, os componentes e a estrutura de nós (estruturas computacionais). Também são 
chamados de estruturas estáticas. 
 
 
 
Modelagem de Sistemas em UML 
Marcio Quirino - 30 
 
B. Os diagramas comportamentais 
✓ Evidenciam o comportamento (funcionamento) de parte de um sistema ou processo de 
negócio relacionado ao sistema, segundo determinada perspectiva. Dizem respeito às 
funcionalidades do sistema, aos estados de um objeto em seu ciclo de vida, às interações 
entre os objetos, dentre outros aspectos. Também são chamados de diagramas dinâmicos. 
 
Diagramas da UML 
A seguir, uma breve descrição de cada diagrama da UML: 
Diagrama Especificação 
Diagrama de perfil 
Permite a definição de tipos padronizados, como estereótipos, restrições e valores 
rotulados. O foco é a adequação aos modelos UML para diferentes plataformas, por 
exemplo. 
Diagrama de classes 
Descreve, para cada classe, suas propriedades (atributos e métodos) e seus 
relacionamentos com as demais classes. Classe é a base estrutural dos sistemas 
orientados a objetos. 
Diagrama de estruturas compostas 
Possibilita a descrição de colaborações internas de classes, interfaces ou componentes, 
visando a especificação de uma funcionalidade. 
Diagrama de componentes Apresenta a estrutura e as conexões entre os componentes de um sistema. 
Diagrama de implantação 
Especifica o ambiente computacional sobre o qual o sistema vai operar, além de distribuir 
os artefatos (pacotes, classes e componentes) nos nós (elementos computacionais). 
Diagrama de objetos 
É um diagrama de classes instanciado, ou seja, mostra exemplos de instâncias de 
classes. 
Diagrama de pacotes 
Descreve estruturas hierárquicas que englobam outros elementos, como outros pacotes, 
casos de uso, classes. Usado para modularizar logicamente um sistema em suas partes 
relevantes (subsistemas). 
Diagrama de atividades 
Descreve o comportamento de procedimentos, processos de negócios e fluxos de 
trabalho, suportando processamento sequencial e paralelo. 
Diagrama de casos de uso 
Mostra como os usuários (atores) interagem com o sistema, do ponto de vista externo, 
evidenciando as funcionalidades com as quais interagem. 
Diagrama de estados 
Mostra como os eventos que afetam o sistema alteram o estado dos objetos ao longo de 
seus ciclos de vida. 
Diagrama de sequência 
Mostra como os objetos interagem, evidenciando a linha de tempo (a sequência das 
interações). 
Diagrama de comunicação Mostra como os objetos interagem, evidenciando as conexões e colaborações entre eles. 
Diagrama de visão geral de 
interação 
Um mix de diagrama de sequência e de atividades. Uma especialização do diagrama de 
atividades para interações. 
Diagrama de tempo 
Diagrama de interação, com foco nas restrições de temporização, como, por exemplo, 
para evidenciar as mudanças no estado de um objeto ao longo do tempo. 
Tabela: Marcelo Vasques de Oliveira 
Modelagem de Sistemas em UML 
Marcio Quirino - 31 
 
Diagramas UML e sua utilização nas fases 
O descrito a seguir não é recomendado ou estipulado pela UML, pois a UML não determina quais 
diagramas devem ser usados e tampouco em que ordem devem ser elaborados. São dicas práticas. 
Dificilmente usamos todos os diagramas da UML em um único sistema. Há um conjunto de 4 a 8 
diagramas que são os mais usados: pacotes, casos de uso, classes, sequência (ou comunicação), estados, 
atividades, componentes e implantação. Todos os mencionados são relevantes, mas os em negrito são os 
essenciais. 
No módulo 1, descrevemos as atividades das fases de análise (levantamento e análise de requisitos) 
e projeto independentemente do processo de desenvolvimento por entender que ambas estarão presentes 
em qualquer processo que usemos. Agora, partindo desse mesmo pressuposto, vamos descrever os 
diagramas UML que podem ser usados em cada uma dessas três fases. Citaremos apenas os diagramas 
mais usados. 
Diagramas UML na atividade de análise: 
Levantamento de requisitos Análise de requisitos 
Esboço inicial do diagrama de pacotes, para grandes 
sistemas, evidenciando a necessidade de particionamento 
Detalhamento e aprofundamento do diagrama de pacotes 
Esboço inicial do diagrama de casos de uso Detalhamento e aprofundamento do diagrama de casos de uso 
Esboço inicial do diagrama conceitual de classes, em alto 
nível (sem detalhes) 
Detalhamento e aprofundamento do diagrama conceitual de classes 
 Diagrama de estados, para os objetos mais complexos durante seu 
ciclo de vida 
 
Diagrama de atividades, para elucidar um processo ou fluxo de 
trabalho relevante ou ainda para elucidar um caso de uso mais 
complexo 
Tabela: Marcelo Vasques de Oliveira 
Nota: o diagrama conceitual de classes evidencia as classes (com principais atributos e inicialmente sem 
métodos) e os principais relacionamentos (em geral apenas associações, que são os relacionamentos de classes mais 
elementares). 
Os diagramas usados no levantamento de requisitos são, em geral, esboços para a própria pessoa 
ou para debater com colegas da equipe. Já na fase de análise de requisitos, alguns diagramas, em geral 
pacotes e casos de uso, são usados para conversas com usuários. 
Diagramas UML na atividade de projeto: 
1. Adição de detalhes ao diagrama conceitual de classes, que passa a ser o diagrama de 
classes de projeto. 
2. Diagrama de sequência ou diagrama de comunicação, para cenários de uso mais 
relevantes, o que ajuda a identificar métodos das classes envolvidas na interação. 
3. Detalhamento dos diagramas de estados elaborados na atividade de análise, podendo 
modelar de outros objetos percebidos. 
4. Diagrama de componentes, caso o software use algum já pronto ou a ser construído. 
5. Diagrama de implantação, evidenciando as unidades computacionais e alocando os 
componentes nelas. 
6. Diagrama de atividades, esclarecendo métodos de classes mais complexos ou que usem 
processamento paralelo. 
Nota: o diagrama de classes de projeto deriva do diagrama conceitual de classes, agregando novos atributos, 
todos os métodos necessários, identificando os corretos relacionamentos entre as classes (e não apenas associações), 
adicionando as multiplicidades eoutros elementos relevantes da UML. 
Modelagem de Sistemas em UML 
Marcio Quirino - 32 
 
Considerações finais 
Vimos que o desenvolvimento de sistemas é uma atividade complexa, que envolve pessoas 
estudando um sistema que também será usado por outras pessoas. Ou seja, existe muita subjetividade 
envolvida nesse processo. Para minimizar essa subjetividade, o processo de desenvolvimento de um 
software é divido em fases, de forma que inicialmente tenhamos uma visão geral do sistema e, à medida 
que nos aprofundamos, conhecemos mais detalhes da estrutura e do funcionamento desse sistema. 
Vimos ainda que os processos de desenvolvimento usam diagramas, que são modelos que 
expressam a realidade sob determinada perspectiva, para melhorar a comunicação com os usuários e entre 
os membros da equipe de desenvolvimento. 
Conforme apresentado, os sistemas foram crescendo em tamanho e complexidade, e as técnicas 
usadas passaram a não atender às demandas. Percebeu-se, então, uma nova forma de visualizar os 
sistemas, com objetos do mundo real que interagem. Nasceu, assim, um novo paradigma de 
desenvolvimento: o paradigma orientado a objetos. 
Esse novo paradigma, porém, precisou de modelos compatíveis, pois os modelos dos paradigmas 
anteriores não atendiam à nova forma de ver e de construir sistemas. Os melhores profissionais do mercado 
produziram seus próprios modelos e, em 1997, criaram uma linguagem unificada, em padrão relativamente 
aberto: a UML (em português, Linguagem Unificada de Modelagem), que vem evoluindo substancialmente 
desde sua criação, estando em sua versão 2.5.1, de 2017. 
A UML é uma linguagem de modelagem independente de tecnologia, que se aplica a qualquer 
processo de desenvolvimento (orientado a objetos ou não). Ela especifica um conjunto de diagramas sob 
cinco diferentes visões que podemos ter sobre um sistema: visão de casos de uso (central), visão de projeto 
ou lógica, visão de implementação (ou desenvolvimento), visão de implantação (ou física) e visão de 
processo. Os diagramas de cada versão da UML atendem a uma ou mais dessas perspectivas e são usados 
nas diferentes fases de um processo de desenvolvimento. 
Referências 
BEZERRA, E. Princípios de análise e projeto de sistemas com UML. 3. ed. Rio de Janeiro: Elsevier, 
2015. 
BOOCH, G.; JACOBSON, I.; RUMBAUGH, J. UML: guia do usuário. 2. ed. Rio de Janeiro: Elsevier, 
2005. 
FOWLER, M. UML essencial: um breve guia para a linguagem-padrão de modelagem de objetos. 
Trad. João Tortello. 3. ed. Porto Alegre: Bookman, 2005. 
LARMAN, C. Utilizando UML e padrões: uma introdução à análise e ao projeto orientados a objetos 
e ao processo unificado. 3. ed. Porto Alegre: Artmed, 2007. 
Explore+ 
Visão geral do desenvolvimento em camadas: trabalhando com desenvolvimento em camadas 
utilizando C#. 
Desenvolvimento em três camadas: conceitos. 
Modelagem de sistemas através da UML: uma visão geral. 
UML (Unified Modeling Language) e Unified Software Development Process (Unified Process). 
Pesquise na internet: 
O diagrama da arquitetura em camadas, publicado no cogle.it, sob forma de infográfico de domínio 
público. 
 
Modelagem de Sistemas em UML 
Marcio Quirino - 33 
 
UML para modelagem do domínio 
Descrição 
Visão geral da modelagem do domínio da aplicação com a UML, por meio de modelo de Casos de 
Uso, modelo de Classes, Diagrama de Objetos e Diagrama de Pacotes. 
Propósito 
Aprender as ferramentas básicas de modelagem conceitual de um sistema usando a UML é 
fundamental para a construção e a especificação sólida dos requisitos de um sistema, bem como o 
entendimento profundo sobre o domínio do negócio em que esse sistema esteja inserido. 
Preparação 
Antes de iniciar este conteúdo, instale em seu computador um programa que o permita elaborar 
modelos sob a forma de diagramas da UML (Linguagem Unificada de Modelagem). Nossa sugestão inicial 
é o Astah Free Student License, e será necessário usar seu e-mail institucional para ativar a licença. 
Preencha os dados do formulário, envie e aguarde a liberação de sua licença em seu e-mail institucional. 
Ao receber a licença, siga as instruções do e-mail e instale o produto em seu computador. 
Sugestões de links adicionais de programas livres para modelagem de sistemas em UML podem ser 
encontradas em buscas na internet. 
Introdução 
Aprenderemos técnicas e notação para modelagem de requisitos e conceitos de domínio de 
sistemas. A Unified Modeling Language (UML) ou Linguagem de Modelagem Unificada é uma linguagem ou 
notação visual para especificação de sistemas orientados a objetos. Essa notação vem sendo adotada como 
padrão para modelagem em organizações, pois tem como objetivo principal prover um conjunto de 
ferramentas poderosas para análise e projeto de sistemas. 
O foco deste conteúdo são os Diagramas de Casos de Uso, Diagrama de Classes e Objetos e 
Diagrama de Pacotes, com seus respectivos conceitos e elementos, muito úteis para arquitetos, analistas e 
projetistas de software na fase inicial do processo de desenvolvimento: a especificação de requisitos e 
modelagem conceitual do domínio. 
Em Engenharia de Software, a palavra domínio denota ou agrupa um conjunto de sistemas ou de 
áreas com funcionalidades similares dentro dos sistemas. Assim, é possível definir domínio aplicacional 
como uma coleção de aplicações de software com determinadas características em comum. Logo, domínio 
é um conjunto de características de uma família de problemas que determinada aplicação pretende 
solucionar. 
Atenção 
Como se observará ao longo do conteúdo, essa definição de domínio não deve ser confundida com o domínio 
de um atributo de classe, que é o conjunto de valores possíveis que esse atributo pode assumir. 
1. Requisitos funcionais de um sistema com uso de 
Diagrama de Casos de Uso 
Identificar requisitos funcionais de um sistema com uso de Diagrama de Casos de Uso 
Modelagem de Sistemas em UML 
Marcio Quirino - 34 
 
Requisitos funcionais e não funcionais 
O desenvolvimento de um sistema começa pelo entendimento do problema de negócio e o 
levantamento de quais requisitos esse sistema de software deve satisfazer para resolvê-lo. Não existe uma 
definição padronizada para requisito na literatura de Engenharia de Software. A norma ISO/IEC/IEEE (IEEE, 
1990) apresenta os seguintes enunciados para explicar o que é requisito: 
1. Uma condição ou capacidade do sistema solicitada por um usuário, para resolver um 
problema ou atingir um objetivo. 
2. Uma condição ou capacidade que deve ser atendida por uma solução para satisfazer um 
contrato, uma especificação, um padrão ou quaisquer outros documentos formais impostos. 
3. Documentação da representação das condições ou capacidades apresentadas nos dois 
anteriores. 
4. Necessidades quantificadas e documentadas, desejos e expectativas do patrocinador, 
clientes e outras partes interessadas. 
Os requisitos são o ponto de partida para todo o processo de desenvolvimento, sendo a base para 
as atividades de análise e projeto, bem como implementação e testes. De acordo com Sommerville (2011), 
a área de Engenharia de Software faz uma distinção, em termos de nível de detalhamento de requisitos, 
entre requisitos de usuário e requisitos de sistema. O primeiro expressa os requisitos abstratos de alto nível, 
e o segundo revela uma descrição detalhada do que o sistema deve fazer. 
Requisitos de usuário são declarações, em uma linguagem natural com diagramas, de quais serviços o sistema 
deverá fornecer a seus usuários e as restrições com as quais este deve operar. SOMMERVILLE, 2011 
Requisitos de sistema são descrições mais detalhadas das funções, serviços e restrições operacionais do 
sistema de software. SOMMERVILLE, 2011 
Em uma perspectiva mais técnica, os requisitos de software são normalmente classificados como 
requisitos funcionais e requisitos não funcionais. 
Requisitos funcionais são declarações de serviços que o sistemadeve fornecer, de como o sistema deve reagir 
a entradas específicas e de como o sistema deve se comportar em determinadas situações. SOMMERVILLE, 2011 
Atenção 
Requisito funcional é uma funcionalidade do sistema, é algo que o sistema deve realizar para prover um 
resultado para o usuário. Requisitos funcionais pressupõem interação do sistema com usuários. 
Veja uma lista com alguns exemplos de enunciados dos chamados requisitos funcionais: 
1. O usuário deve ser capaz de pesquisar por nome na base de dados disponível. 
2. O sistema deve designar um identificador único (NUMERO_PEDIDO) para cada pedido do 
usuário. 
3. O sistema deve apresentar o documento selecionado para leitura do usuário. 
Perceba que, em todos os exemplos, estamos definindo atividades que o sistema deve realizar, e, 
em todas essas atividades, o usuário está envolvido, seja fornecendo entradas ou recebendo saídas 
(resultados). 
A especificação de um sistema precisa considerar também como esses requisitos serão entregues. 
Ou seja, quais características de qualidade e quais restrições desejamos impor ao sistema. Assim, definimos 
os chamados requisitos não funcionais. 
Modelagem de Sistemas em UML 
Marcio Quirino - 35 
 
Requisitos não funcionais são restrições aos serviços ou funções oferecidos pelo sistema. Incluem restrições 
de timing, restrições no processo de desenvolvimento e restrições impostas pelas normas. Ao contrário das 
características individuais ou serviços do sistema, os requisitos não funcionais, muitas vezes, aplicam-se ao sistema 
como um todo. SOMMERVILLE, 2011 
Requisitos não funcionais (RNF) são frequentemente mais críticos do que os requisitos funcionais 
(RF). Deixar de atender a um RNF pode significar a inutilização de todo o sistema. Os RNF podem afetar a 
arquitetura geral de um sistema em vez de apenas componentes individuais. No caso de um website, um 
único RNF pode originar uma série de RF relacionados, que, por sua vez, definem os serviços necessários. 
Existem diversas classificações que visam a organizar e prover melhor entendimento sobre os RNF. 
Um exemplo desse tipo de classificação é apresentado na lista a seguir. 
1. Requisitos de produto: usabilidade, eficiência, desempenho, confiança, proteção. 
2. Requisitos organizacionais: ambientais, operacionais, processo de desenvolvimento. 
3. Requisitos externos: reguladores, éticos, legais, contábeis. 
Exemplo 
Aqui estão alguns exemplos de enunciados de requisitos não funcionais: 
✓ O sistema deve estar disponível durante todas as horas normais de trabalho (2ª a 6ª, 8h30 às 17h). 
Períodos de não operação dentro desses intervalos não podem ultrapassar 2 segundos em um dia. 
✓ O sistema deve requerer autenticação dos usuários para permitir acesso. 
✓ O sistema deve implementar disposições de privacidade dos usuários de acordo com a Lei Geral de 
Proteção de Dados. 
Você pode perceber, nesses exemplos, que esses requisitos não indicam o que o sistema realiza, mas como 
ele entrega uma ou mais de suas funcionalidades. 
Diagrama de casos de uso 
A visão de casos de uso da UML apresenta o conjunto de funções (ou usos) que o sistema deve 
executar para atender às necessidades dos usuários. No modelo de casos de uso, o sistema é visto sob a 
perspectiva do usuário. A documentação dos requisitos funcionais em um Diagrama de Casos de Uso dá 
início ao processo de análise do sistema e permite entender sua abrangência e complexidade. 
O objetivo do Diagrama de Casos de Uso é apresentar uma visão geral dos requisitos funcionais do sistema e, 
portanto, ele é o digrama mais abstrato, flexível e simples da UML. 
Esse diagrama é composto pelos seguintes elementos: casos de uso, atores e relacionamentos. A 
figura 1 mostra um exemplo de Diagrama de Casos de Uso para um sistema bancário. 
 
Figura 1 – Exemplo de Diagrama de Casos de Uso, elaborado com ferramenta ASTAH (2021). 
Modelagem de Sistemas em UML 
Marcio Quirino - 36 
 
Os possíveis usos de um sistema são representados pelos casos de uso no diagrama. Um Caso de 
Uso pode estar diretamente associado a um ou mais requisitos funcionais, identificados na etapa de 
levantamento de requisitos do processo de desenvolvimento. 
Conforme observado na figura 1, o caso de uso assume a forma gráfica de uma elipse contendo o 
seu nome no interior; nela, podemos observar quatro casos de usos representados: 
1. Abrir conta corrente 
2. Depositar dinheiro 
3. Sacar dinheiro 
4. Consultar saldo 
O caso de uso é o elemento fundamental do Modelo de Casos de Uso. 
Atenção 
Embora não exista um padrão para nomear casos de uso, a boa prática recomenda utilizar uma frase verbal 
iniciando com verbo no infinitivo, denotando a ação prevista na funcionalidade representada pelo Caso de Uso. 
O segundo elemento do Diagrama de Casos de Uso é o Ator, que é representado no Diagrama de 
Casos de Uso por um boneco palito, com o nome na parte inferior. 
O ator é quem utiliza ou interage em um caso de uso, ou seja, é uma entidade externa que interage com o 
sistema, mas que não faz parte dele. 
Interagir significa trocar informações com o sistema, seja fornecendo ou recebendo essas 
informações. Na figura 1, temos a representação do ator Cliente, que interage com os quatro casos de uso. 
Por exemplo, no caso de uso Consultar Saldo, o ator Cliente informa os dados de sua conta e recebe como 
resposta do sistema o valor de seu saldo. 
O terceiro elemento do Diagrama de Casos de Uso são os Relacionamentos, que permitem associar: 
✓ Casos de uso com seus atores 
✓ Casos de uso com outros casos de uso 
✓ Atores com outros atores 
Saiba mais 
A forma mais comum e obrigatória dos relacionamentos é entre atores e casos de uso, que assume a 
representação gráfica de segmento de reta (uma linha cheia) ligando o ator ao Caso de Uso no qual ele interage. 
Na figura 1, observamos que o ator Cliente interage com os quatro casos de uso presentes nesse 
modelo, portanto, esses elementos gráficos estão ligados por uma reta. 
A seguir, vamos detalhar cada um desses elementos. 
Atores 
Medeiros (2004) explica que atores atuam em casos de uso realizando atividades. O ator não é uma 
entidade específica, mas representa um papel ou aspecto particular de uma entidade. O ator pode 
representar papéis executados por usuários humanos, um componente de hardware, outros sistemas com 
os quais o sistema em desenvolvimento se comunica. Desse modo, o nome do ator deve expressar esse 
papel de forma clara. No exemplo da figura 1, o ator é o papel de cliente do banco. Esse papel pode ser 
assumido pelos diversos clientes do banco. 
Resumindo 
Durante a execução de uma funcionalidade do sistema (um ou mais requisitos funcionais), o ator precisa prover 
entradas (informações) para o sistema e deve receber respostas dele. 
Modelagem de Sistemas em UML 
Marcio Quirino - 37 
 
O ator não é uma entidade específica, mas representa um papel ou aspecto particular de uma 
entidade. O ator pode representar papéis executados por usuários humanos, um componente de hardware, 
outros sistemas com os quais o sistema em desenvolvimento se comunica. Desse modo, o nome do ator 
deve expressar esse papel de forma clara. No exemplo da figura 1, o ator é o papel de cliente do banco. 
Esse papel pode ser assumido pelos diversos clientes do banco. 
Tipos de atores que geralmente aparecem nos sistemas são: 
A. Cargos 
• Por exemplo: empregado, cliente, gerente, vendedor, comprador etc. 
B. Organizações e suas divisões 
• Por exemplo: fornecedor, agência reguladora, administradora de cartões, setor de vendas etc. 
C. Outros sistemas 
• Por exemplo: sistema de vendas, sistema de cobrança, sistema de pagamento etc. 
D. Hardware 
• Por exemplo: sensor de temperatura, leitora de código de barras etc. 
O relacionamento de generalização entre atores indica que uma instância do primeiro ator interage 
com os mesmos tipos de instância de casos de uso do segundo. Porém, o contrárionão é verdade. Os casos 
de uso associados ao ator mais específico nesse relacionamento são exclusivos desse ator, que herda os 
casos de uso associados ao ator mais genérico. A figura 2 mostra um exemplo desse tipo de relacionamento, 
no qual percebemos que tanto o ator Vendedor quanto o ator Supervisor interagem com o caso de uso Fazer 
pedido. No entanto, apenas o Supervisor participa do caso de uso Aprovar crédito. 
 
Figura 2 – Exemplo do relacionamento de generalização entre atores, elaborado com ferramenta ASTAH (2021). Imagem: Flavia 
Maria Santoro. 
Normalmente, o ator inicia a sequência de interações em um caso de uso. Portanto, a forma mais fácil de 
começar a construir um modelo de casos de uso é identificar todos os atores. 
O analista de sistemas pode observar as fontes que devem fornecer informações a serem 
processadas pelo sistema e para quem os resultados do processamento devam ser fornecidos. 
Bezerra (2015) sugere algumas perguntas úteis para guiar os analistas de sistemas: 
1. Que órgãos, empresas ou pessoas utilizarão o sistema? 
2. Que sistemas ou equipamentos vão se comunicar com o sistema a ser construído? 
3. Alguém deve ser informado de alguma ocorrência no sistema? 
4. Quem está interessado em certo requisito funcional do sistema? 
Modelagem de Sistemas em UML 
Marcio Quirino - 38 
 
A partir daí, durante a identificação dos casos de uso, o analista poderá perceber a existência de 
outros atores não identificados nessa etapa. 
Caso de uso 
Caso de Uso é a descrição de uma sequência de interações entre um sistema e um ou mais atores 
externos a esse sistema. De acordo com Bezerra (2015), os casos de usos permitem a um observador 
externo ao sistema entender quais são as funcionalidades fornecidas pelo sistema e quais são os resultados 
externos produzidos por elas. Porém, não é possível saber como o sistema trabalha internamente para 
produzir esses resultados. Um modelo de casos de uso pode conter vários casos de uso, dependendo do 
tamanho e da complexidade do sistema. 
Atenção 
Casos de uso não se limitam à sua representação gráfica; tão importante quanto isso é a sua descrição textual. 
As descrições devem explicar de forma clara, simples e de fácil entendimento, o que o sistema faz, sem entrar nos 
detalhes de como ele deve fazê-lo. Casos de uso facilitam o processo de comunicação com usuários e são utilizados 
para documentar a interação do sistema com eles. Desse modo, casos de uso são úteis, tanto para os profissionais 
envolvidos no desenvolvimento do sistema (analistas, projetistas, programadores, testadores) quanto para seus 
usuários e clientes. A descrição textual de um caso de uso é uma espécie de história por meio da qual contamos como 
um usuário realiza uma ação utilizando o sistema. 
Casos de uso podem relatar as diversas formas de utilização de uma funcionalidade do sistema. 
Assim, podemos definir cada uma dessas formas por meio de cenários. 
Cenário pode ser entendido como a instância de execução de um caso de uso. Portanto, diversos 
cenários para o mesmo caso de uso podem ser escritos. Os cenários podem ser usados para a especificação 
dos casos de testes do sistema. 
Para identificar os casos de uso, podemos pensar em dois tipos que sempre estarão presentes nos 
sistemas: primário e secundário. 
Casos de uso primários 
Estão relacionados diretamente aos objetivos dos atores, ou seja, são as funcionalidades que 
agregam valor aos usuários. Bezerra (2015) sugere uma lista de perguntas para auxiliar os analistas de 
sistemas na descoberta dos casos de uso primários de um sistema: 
✓ Quais são as necessidades e os objetivos de cada ator em relação ao sistema? 
✓ Que informações o sistema deve produzir? 
✓ O sistema deve realizar alguma ação que ocorre regularmente no tempo? 
✓ Para cada requisito funcional, existe um caso de uso (ou mais) para atendê-lo? 
Alguns casos de uso são iniciados não por um ator, mas por um evento temporal. Desse modo, 
normalmente o ator é o tipo de entidade que recebe a informação resultante (por exemplo, um cliente que 
receba uma notificação do sistema). 
Casos de uso secundários 
Esses casos não apresentam uma relação direta de valor para os atores, mas são imprescindíveis 
para o funcionamento do sistema. Por exemplo, a manutenção de cadastros (inclusão, alteração, consulta 
e exclusão das diversas informações que alimentam o sistema). Um sistema bancário precisa cadastrar as 
informações sobre os clientes. 
Relacionamentos 
Os relacionamentos são responsáveis por estabelecer as associações entre atores e casos de uso. 
Modelagem de Sistemas em UML 
Marcio Quirino - 39 
 
Todos os atores devem estar associados explicitamente aos casos de uso com os quais interagem. 
Além disso, podemos estabelecer relacionamentos entre os casos de uso ou entre os atores do sistema. O 
Modelo de Casos de uso permite os seguintes tipos de relacionamentos: comunicação, inclusão, extensão 
e generalização. 
Relacionamento de comunicação 
É uma linha simples que mostra a que caso de uso determinado ator está associado, ou seja, esse 
ator interage com o sistema por meio do caso de uso. Um ator pode se relacionar com mais de um caso de 
uso, e todos os atores devem estar associados a pelo menos um caso de uso. Esse relacionamento foi 
mostrado na figura 1. 
Atenção 
Um erro comum na elaboração de diagramas de casos de uso é estabelecer relacionamentos de comunicação 
entre casos de uso. Não existe troca de informações entre casos de uso, uma vez que são funcionalidades 
independentes entre si. 
Os relacionamentos de inclusão (include), extensão (extend) e generalização são estabelecidos entre casos 
de uso. 
Relacionamento de inclusão 
Tem como objetivo principal a reutilização. Suponha que uma parte dos passos de execução de um 
caso de uso se repita em diversos outros casos de uso. Podemos criar um caso de uso separado e “incluí-
lo” nos demais. A inclusão funciona de forma semelhante à chamada de uma função em um programa. A 
representação gráfica do relacionamento de inclusão é uma linha pontilhada com o estereótipo <<include>> 
apontando do caso de uso inclusor para o incluído. 
A figura 3 mostra um exemplo desse tipo de relacionamento. 
 
Figura 3 – Exemplo do relacionamento de inclusão entre casos de uso, elaborado com ferramenta ASTAH (2021) 
No exemplo da figura 3, o ator Médico participa de dois casos de uso: Fazer pedido de exame e 
Fazer pedido de consulta. Em ambos os casos de uso, é necessário realizar os passos do caso de uso 
Solicitar prontuário. Portanto, este caso de uso é incluído nos dois primeiros. 
Relacionamento de extensão 
Tem como objetivo representar situações em que diferentes sequências de passos possam ser 
inseridas no mesmo caso de uso. Ou seja, dependendo de uma condição, o caso de uso segue um caminho 
diferente. Desse modo, um caso de uso estende outro, permitindo um comportamento eventual. Note que a 
existência do caso de uso estendido deve ser independente da existência de quaisquer casos de uso que o 
estendam. 
A figura 4 mostra um exemplo do relacionamento de extensão. 
Modelagem de Sistemas em UML 
Marcio Quirino - 40 
 
 
Figura 4 – Exemplo do relacionamento de extensão entre casos de uso, elaborado com ferramenta ASTAH (2021) 
Observe no exemplo da figura 4, em que o ator Cliente interage com o caso de uso Realizar compra. 
O caso de uso Validar limite de crédito pode ser necessário nesse contexto, portanto, é estendido para 
Realizar compra. Ambos os casos de uso representam funcionalidades independentes no sistema. 
Relacionamento de generalização 
Pode existir entre dois casos de uso ou entre dois atores (conforme vimos em Ator). Esse 
relacionamento permite que um caso de uso (mais específico) herde características de outro (mais genérico). 
Na generalização entre casos de uso, quando um caso de uso herda de outro, significa que as 
sequências de passos de execução do caso de usomais genérico (pai) valem também para o mais 
específico (filho). Além disso, o caso de uso herdeiro participa de qualquer associação do qual o caso de 
uso mais genérico participe. Isso significa que um ator que interage com o caso de uso pai pode também 
interagir em qualquer caso de uso filho. 
A figura 5 mostra um exemplo do relacionamento de generalização: 
 
Figura 5 – Exemplo do relacionamento de generalização entre casos de uso, elaborado com ferramenta ASTAH (2021) 
Como podemos observar na figura 5, o caso de uso Cadastrar empregado executa uma sequência 
de passos de cadastro para qualquer funcionário. Já os casos de uso mais específicos (Cadastrar vendedor 
e Cadastrar supervisor) herdam esses passos e ainda possuem passos específicos para os tipos de 
funcionários Vendedor e Supervisor, respectivamente. 
Os tipos de relacionamento entre casos de uso abordados permitem manter a descrição dos casos 
de uso mais simples e sem repetições. 
1. A inclusão deve ser usada quando um comportamento se repetir em mais de um caso de 
uso. 
2. A extensão é normalmente usada quando um comportamento que não é executado em 
todas as instâncias de um caso de uso deva ser descrito. 
3. A generalização deve ser aplicada em uma situação em que dois ou mais casos de uso 
possuam comportamentos comuns. 
Modelagem de Sistemas em UML 
Marcio Quirino - 41 
 
2. Especificações textuais 
Reconhecer casos de uso por meio de especificações textuais. 
Especificação e formatos de casos de uso 
Os casos de uso incluídos pelos analistas no Diagrama de Casos de Uso devem ser especificados 
em um formato de narrativa textual, para complementar a representação gráfica sob forma de diagramas. 
Desse modo, o Modelo de Casos de Uso é formado pelo diagrama e pelo conjunto de todas as descrições 
dos casos de uso. 
Atenção 
A descrição textual permite o entendimento mais preciso de qual funcionalidade do sistema trata aquele caso 
de uso. Ela serve como ponto de partida para construção de outros modelos, tais como, Modelo de Classes, ainda na 
fase de análise, e o Diagrama de Sequência, na fase de projeto do desenvolvimento do sistema. 
Comentário 
A UML não propõe uma descrição formal de casos de uso e não existe uma forma padronizada para a escrita 
dessa especificação. Os analistas e, muitas vezes, as empresas definem seus padrões com base em exemplos, boas 
práticas e necessidades particulares de cada projeto de desenvolvimento. As especificações podem ser bem simples, 
abstraindo os detalhes da execução do caso de uso, ou mais complexas, incluindo todo o passo a passo a ser seguido 
para obter os resultados esperados. 
Uma vez que não existe um padrão definido pela UML, a descrição textual de um caso de uso pode 
ser feita em diferentes formatos. O que há em comum em todos esses formatos é a forma de expressão 
narrativa. 
O texto de um caso de uso é uma história que conta as ações ou a sequência de passos de um ou 
mais atores e do sistema para atingir determinado objetivo. Essa narrativa pode ser escrita em um parágrafo 
contínuo, em passos numerados ou em uma tabela contendo uma coluna para cada ator e uma coluna para 
o sistema. 
Atenção 
A descrição de um caso de uso deve ser clara, livre de jargões e termos técnicos, portanto, de fácil 
entendimento não só para a equipe de desenvolvimento, mas para os usuários finais, pois o modelo de casos de uso 
é lido e validado por todos os envolvidos. 
Formato contínuo 
A narrativa é um texto livre. Como um exemplo, considere o caso de uso Consultar saldo na figura 
1. Uma especificação em formato contínuo para esse caso de uso seria: 
Este caso de uso inicia quando o Cliente chega ao caixa eletrônico e insere seu cartão. O Sistema 
requisita a senha do Cliente. Após o Cliente fornecer sua senha e esta ser validada, o Sistema exibe as 
opções de operações possíveis. O Cliente opta por consultar saldo. O Sistema exibe o saldo da conta e o 
caso de uso termina. 
Formato numerado 
Aqui, a descrição desse caso de uso seria: 
1. O Cliente insere cartão no caixa eletrônico. 
2. O Sistema solicita a senha. 
3. O Cliente digita senha. 
4. O Sistema valida a senha e exibe menu de operações disponíveis. 
5. O Cliente seleciona a opção consultar o saldo. 
6. O Sistema exibe o saldo da conta. 
Modelagem de Sistemas em UML 
Marcio Quirino - 42 
 
Formato tabular 
Cliente Sistema 
Insere cartão no caixa eletrônico. 
 Solicita a senha. 
Digita senha. 
 Valida a senha e exibe menu de operações disponíveis. 
Seleciona a opção consultar o saldo. 
 Exibe o saldo da conta. 
Cenário principal e cenários alternativos 
A especificação de um caso de uso descreve a sequência de passos de interação entre o sistema e 
seus atores. A descrição do exemplo do caso de uso Abrir conta corrente, na figura 1, mostra uma sequência, 
um fluxo ou passo a passo mais usual, ou seja, aquela em que acontece exatamente o que era esperado 
nessa interação. 
Saiba mais 
Essa sequência é chamada de cenário (ou fluxo) principal do caso de uso. Nesse cenário, o ator consegue 
atingir seu objetivo seguindo o caminho “feliz”; em outras palavras, nada de excepcional acontece. De acordo com 
Lima (2005), é o fluxo mais óbvio, no qual todas as ações são bem-sucedidas. 
Cada caso de uso possui apenas um cenário principal e ele deve ser descrito de forma clara e 
concisa, sem uso de jargão computacional. Não se esqueça: casos de uso devem ser escritos do ponto de 
vista do usuário e, sempre que possível, com os termos que os usuários possam compreender. 
Agora, imagine que, em nosso exemplo, o Cliente digitou a senha errada. O que aconteceria no fluxo descrito? 
Nada, pois esse problema não é previsto nesse cenário! 
Para essa situação e algumas outras, o modelo de casos de uso prevê a especificação dos cenários 
alternativos e cenários de exceção. 
A. Cenários alternativos 
✓ Nesta situação, o ator pode escolher formas diferentes para chegar ao seu objetivo. Portanto, deve ser 
possível, apesar de não obrigatório, especificar cenários alternativos. Em nosso exemplo da consulta 
de saldo, o Cliente poderia optar por imprimir o saldo em vez de consultá-lo diretamente. 
✓ Um cenário alternativo não é uma exceção, é outra forma de fazer a mesma coisa! 
B. Cenários de exceção 
✓ Devem ser explicitados exceções, problemas ou possíveis erros. Um cenário de exceção representa 
uma anomalia não prevista no cenário principal, como o Cliente digitar sua senha errada. 0 analista 
deve escrever cenários para tratar esse e outros desvios do curso normal de um caso de uso, ou 
mesmo cancelar a realização do caso de uso em questão. 
De acordo com Bezerra (2015), esses cenários possuem as seguintes características: 
✓ Representam erros de operação no cenário principal. 
✓ Não têm sentido fora do contexto do caso de uso no qual ocorre (ou seja, não são casos de 
uso em si). 
✓ Precisam indicar em que passo o caso de uso continua ou, conforme for, indicar que o caso 
de uso está finalizado. 
No exemplo do caso de uso Abrir conta corrente, um cenário de exceção para a situação em que o 
Cliente digitasse sua senha errada poderia ser especificado da seguinte forma: 
A. Cenário Principal 
✓ O Cliente insere cartão no caixa eletrônico. 
✓ O Sistema solicita a senha. 
✓ O Cliente digita senha. 
✓ O Sistema valida a senha e exibe menu de operações disponíveis. 
Modelagem de Sistemas em UML 
Marcio Quirino - 43 
 
✓ O Cliente seleciona a opção consultar o saldo. 
✓ O Sistema exibe o saldo da conta. 
B. Cenário de exceção “Senha incorreta” 
✓ No passo 4, caso a senha seja incorreta: 
o 4a. O Sistema informa que a senha está incorreta e solicita que o Cliente digite novamente. 
o 4b. O caso de uso retorna ao passo 3. 
Observe que o cenário de exceção indica o ponto do cenário principal no qual o problema pode 
ocorrer e o ponto exato para onde o fluxo deve retornar. O analista deve especificar todas as possíveis 
exceçõesou problemas usando esses tipos de cenários. 
Estrutura de especificação de casos de uso 
Como a UML não define um padrão para especificação de casos de uso, você já observou que 
existem algumas formas práticas de apresentar a narrativa ou o passo a passo de execução do caso de uso. 
No entanto, é comum as empresas ou as equipes de desenvolvimento definirem seus próprios padrões de 
estrutura e os tipos de informação a serem apresentados, de modo a manter a qualidade dos documentos 
de requisitos de software. Nesse sentido, você encontrará diversas sugestões de modelos em livros ou sites 
na internet. 
Um exemplo bastante útil é a estrutura descrita por Bezerra (2015). Veja, no quadro 1, uma 
adaptação dessa proposta, que destaca os campos que poderiam compor a descrição de um caso de uso. 
Você pode tomar como base essa proposta e criar um padrão para seus projetos. 
1. Identificador: código único para cada caso de uso que permite fazer a rastreabilidade com 
outros elementos e modelos. Por exemplo, com casos de teste e regras de negócio, UC01. 
2. Nome: cada caso de uso tem um nome único que o identifica; é o nome que aparece no 
Diagrama de Casos de Usos. O nome do caso de uso é uma frase verbal iniciada por verbo 
no infinitivo. É importante ter cuidado com coerência e clareza ao nomear um caso de uso. 
Por exemplo, o nome do caso de uso UC01 é “Criar conta corrente”. 
3. Objetivo: declaração sucinta do objetivo do ator no caso de uso. Para o caso de uso Criar 
conta corrente, o Objetivo seria: “O objetivo deste caso de uso é permitir que o Cliente do 
banco crie uma nova conta corrente”. 
4. Ator primário: nome do ator que inicia o caso de uso ou ator que recebe o resultado do 
caso de uso; um caso de uso possui apenas um ator primário. Para o caso de uso Criar 
conta corrente, o Ator primário seria: “Cliente”. 
5. Atores secundários: nomes dos demais atores que atuam no caso de uso. Para o caso de 
uso Criar conta corrente, um ator secundário seria: “Gerente da agência”. 
6. Pré-condições: condições assumidas como verdadeiras para que o caso de uso tenha 
início; um caso de uso pode conter zero ou mais pré-condições. Por exemplo, em um caso 
de uso Criar conta corrente, uma pré-condição poderia ser “Cliente cadastrado com CPF 
válido”. 
7. Cenário (ou fluxo) principal: sequência de passos que normalmente acontece quando o 
caso de uso é utilizado com sucesso; toda descrição de caso de uso deve ter um fluxo 
principal. 
8. Cenários (ou fluxos) alternativos e de exceção: sequência de passos que apresentam 
formas de execução diferentes da descrita no fluxo principal ou situações de exceções e 
erros que devem ser tratadas pelo sistema. Não há obrigatoriedade de existirem fluxos 
alternativos ou de exceção em um caso de uso. 
Modelagem de Sistemas em UML 
Marcio Quirino - 44 
 
9. Pós-condições: estado do sistema após o caso de uso ter sido executado; tipicamente, 
uma pós-condição descreve que uma informação foi alterada, excluída ou inserida no 
sistema. Uma boa prática é usar verbo no particípio passado para descrever pós-condições. 
Por exemplo, em um caso de uso Criar conta corrente, uma pós-condição seria “conta 
corrente criada”. 
10. Regras de negócio: a descrição de um caso de uso pode fazer referência a uma ou mais 
regras de negócio. Aprenda mais sobre Regras de Negócio em Explore +. 
Especificação de casos de uso com inclusão e extensão 
A UML também não define uma forma padrão para a escrita de casos de uso de inclusão ou extensão. 
No entanto, geralmente fazemos referência ao caso de uso incluído/estendido na descrição do caso de uso 
que o inclui/estende. 
A. Casos de uso com inclusão 
✓ Para a situação dos casos de uso de inclusão, a seguinte sintaxe pode ser usada: Include (nome do 
caso de uso incluso) no ponto da descrição da sequência de interações em que o caso de uso deve 
ser inserido. 
B. Casos de uso com extensão 
✓ Para a situação dos casos de uso de extensão, devemos lembrar que o caso de uso estendido existe 
independentemente de outros casos de uso que o estendam. Ele possui a descrição completa de sua 
sequência de passos. Se o ator escolhe acessar o caso de uso estendido, ele executa o fluxo de ações 
desse caso de uso e retorna para o ponto do cenário em que estava antes. 
A especificação dos pontos de extensão em um caso de uso é feita normalmente dentro da descrição 
textual do caso de uso extensor. A descrição de um ponto de extensão deve indicar em que ponto (ou 
pontos) do caso de uso estendido pode-se inserir o comportamento do extensor, e podem existir vários 
pontos no estendido em que o extensor pode ser ativado. 
Atenção 
Além da inclusão e extensão, um relacionamento de generalização requer uma forma de especificação, na 
descrição do caso de uso herdeiro, de quais passos do caso de uso pai estão sendo redefinidos. O analista pode criar 
marcadores no caso de uso pai. Esses marcadores podem, então, ser referenciados na descrição do caso de uso filho 
para especificar que passos estão sendo redefinidos ou onde está sendo definida uma extensão do comportamento do 
pai. 
3. Domínio de aplicação 
Identificar classes e seus relacionamentos em um domínio de aplicação com uso de Diagrama de 
Classes 
Conceito e elementos de uma classe 
A abordagem de desenvolvimento de sistemas orientada a objetos assume que um sistema é uma 
coleção de entidades – os objetos – que se comunicam e realizam ações. A interação entre objetos é a 
forma de execução de uma funcionalidade do software. 
Essa abordagem se baseia nos seguintes princípios listados por Bezerra (2015): 
✓ Qualquer coisa é um objeto. 
✓ Objetos realizam tarefas por meio da requisição de serviços a outros objetos. 
✓ Cada objeto pertence a uma classe, ou seja, classe é uma entidade que agrupa e abstrai 
objetos similares. 
✓ Uma classe funciona com repositório para comportamento associado aos objetos 
instanciados a partir dela. 
Modelagem de Sistemas em UML 
Marcio Quirino - 45 
 
✓ Classes são organizadas em hierarquias. 
Atenção 
A UML é a linguagem padrão que permite a elaboração dos diversos modelos e das perspectivas de um sistema 
na abordagem da orientação a objetos. Classes (e seus objetos) são os componentes básicos dessa abordagem. 
Objetos são entidades do mundo real que podemos observar. Por exemplo, um objeto pode ser um 
carro, uma fruta, uma empresa, um empregado da empresa, um concerto de música, um restaurante, um 
pedido de comida nesse restaurante, entre muitos outros. 
Quando pensamos nesses objetos em termos de grupos de coisas, por exemplo, cada pessoa que 
assiste a aulas em uma turma é um objeto diferente, mas, se abstrairmos esses objetos, observando suas 
características comuns, criamos o conceito de Aluno, o qual é denominado, então, de Classe. Uma classe 
de objetos com caraterísticas comuns, tais como: estão matriculados em uma turma e assistem a aulas. 
Uma classe pode ser definida como uma descrição de atributos (características) e serviços (ações) comuns a 
um grupo de objetos. 
Bezerra (2015) ressalta que uma classe pode ser entendida como uma espécie de molde, a partir do 
qual objetos podem ser construídos. Portanto, é comum afirmarmos que um objeto é uma instância de uma 
classe. Cada objeto do mundo real é único, uma classe abstrai o tipo de objeto e permite que novos objetos 
sejam criados a partir desse modelo. Se uma nova pessoa se matricula na turma, ela é um novo objeto 
instanciado a partir da classe Aluno. 
Quando estamos tratando da modelagem de um sistema, somente um subconjunto de características 
do grupo de objetos pode ser relevante. Portanto, uma classe representa uma abstração das características 
relevantes do mundo real para aquele conjunto de objetos. 
Exemplo 
Voltando aos nossos alunos, as características relevantes desses objetos, para um sistema acadêmico, 
poderiam ser número de matrícula, idade e estilo de aprendizagem; mas outras,tais como o esporte favorito ou número 
do calçado, talvez não façam parte do interesse desse sistema. 
A estrutura de uma classe é composta de atributos e de operações. 
Os atributos descrevem os dados que deverão ser armazenados pelos objetos dessa classe (suas 
características). Cada atributo de uma classe é de um tipo de dados e possui um conjunto de valores que 
esse atributo pode assumir, chamado de domínio. Veja um exemplo na figura 6. 
As operações apresentam as ações que os objetos de uma classe podem realizar. Como são ações, 
costumam ser nomeadas com uso de um verbo e um complemento, e terminam com um par de parênteses 
(funções em linguagens de programação). Ao contrário dos atributos, que para cada objeto têm o seu próprio 
valor, os objetos de mesma classe compartilham as suas operações. Em outras palavras, todos os objetos 
de uma classe realizam as mesmas ações. Veja o exemplo de uma operação da classe Aluno na figura 6. 
 
Figura 6: Exemplo de Classe e seus atributos e operações, elaborado com ferramenta ASTAH (2021) 
Modelagem de Sistemas em UML 
Marcio Quirino - 46 
 
Na figura 6, observamos que a representação de uma classe é feita por meio de um retângulo com 
três compartimentos: nome da classe, lista de atributos e lista de operações. Você também pode perceber 
a sintaxe de especificação dos atributos e operações. 
Um atributo é especificado no seguinte formato: 
[visibilidade] nome: tipo = valor_inicial 
Visibilidade de um atributo diz respeito ao seu nível de acesso, ou seja, permite definir quais atributos 
de um objeto são acessíveis por outros objetos. Essa propriedade serve para implementar o encapsulamento 
da estrutura interna da classe. A visibilidade de um atributo pode ser: 
 
Somente as propriedades que são realmente necessárias ao exterior da classe devem ser definidas 
com visibilidade pública. Todo o resto é escondido dentro da classe por meio das visibilidades protegida 
(visível para subclasses da classe em que o atributo foi definido) e privativa (invisível externamente à classe 
em que o atributo está definido). Com visibilidade de pacote, o atributo é visível a qualquer classe que 
pertença ao mesmo pacote no qual está definida a classe. Como veremos no módulo seguinte, um pacote 
é um agrupamento de diagramas UML. 
O elemento nome, única parte obrigatória na sintaxe do atributo, corresponde ao nome do atributo. 
O elemento tipo, que especifica o tipo do atributo, é dependente da linguagem de programação na qual a 
classe será implementada. Por exemplo: int, float, boolean. No exemplo da figura 6, o atributo matrícula é 
do tipo int. 
É possível declarar o valor inicial que o atributo assume quando um objeto daquela classe for 
instanciado. Desse modo, sempre que um objeto de uma classe é instanciado, o valor inicial declarado é 
automaticamente definido para o atributo. Em nosso exemplo, quando um novo aluno é inserido no sistema, 
assumimos que seu estiloAprendizagem é aula prática. 
Uma operação é especificada no seguinte formato: 
visibilidade nome(parâmetros): tipo-retorno {propriedades} 
O elemento nome corresponde ao nome dado à operação, em que normalmente usamos verbos que 
denotem a ação realizada por essa operação (no exemplo, assistirAula). Uma operação é ativada 
(executada) quando um objeto envia uma mensagem para outro, sendo essa mensagem o nome da 
operação. 
Do mesmo modo que os atributos, a visibilidade pode ser pública (+), privada (-), protegida (#) ou de pacote 
(~). 
Os parâmetros de uma operação são informações que ela recebe do objeto que envia a mensagem 
para requisitar a execução da operação. Uma operação pode ter zero ou mais parâmetros, que devem ser 
separados por vírgulas. Parâmetros têm seu tipo definido: tipo retorno representa o tipo de dados do valor 
retornado por uma operação. 
Visão geral do diagrama de classes 
O Diagrama de Classes da UML é o modelo em que representamos as classes de um sistema, 
incluindo os detalhes sobre seus atributos e suas operações, e como essas classes se relacionam. 
Modelagem de Sistemas em UML 
Marcio Quirino - 47 
 
Portanto, a elaboração do Diagrama de Classes é fundamental em todo o processo de 
desenvolvimento que segue a abordagem da orientação a objetos. 
Os diversos componentes de um Diagrama de Classes especificam as classes que serão realmente 
implementadas (ou seja, codificadas em uma linguagem de programação), sendo a base para a criação dos 
principais objetos e as interações entre eles. 
Atenção 
Góes (2014) explica que o Diagrama de Classes é o modelo mais importante da UML, pois permite a 
representação dos elementos da base de dados do sistema. Portanto, facilita a comunicação entre a equipe de 
desenvolvimento e com os usuários finais. 
O Diagrama de Classes também explicita as demandas de dados e informações dos atores, que são 
declaradas nos casos de uso. Diagramas de classes são usados para expressar graficamente os conceitos 
a serem manipulados por um sistema, bem como as ações esperadas, e para fornecer uma descrição 
independente de implementação dos tipos utilizados em um sistema, ou seja, os modelos de dados. 
Comentário 
Costumamos dizer que esse diagrama destaca um aspecto estrutural estático do sistema, pois representa a 
estrutura interna do sistema, mas não como os objetos do sistema interagem no decorrer do tempo. As operações 
mostram quais são as possíveis interações entre os objetos, mas não explicitam em que momento serão invocadas. 
O Diagrama de Classes é utilizado na construção do modelo de classes desde o nível de análise até 
o nível de especificação. O diagrama evolui à medida que o processo de desenvolvimento do sistema 
avança. 
O que queremos dizer com “evolui”? 
Resposta 
Significa que vamos acrescentando detalhes e refinando o diagrama, tanto em termos de atributos e operações 
quanto na forma como associamos as classes. 
É comum chamarmos esse diagrama que evolui sucessivamente de modelo de classes de análise, 
modelo de classes de projeto e modelo de classes de implementação, fazendo referência às etapas do 
processo de desenvolvimento. 
Modelo de classes de análise 
• É composto por elementos identificados na etapa de análise; é basicamente formado por classes 
relacionadas a conceitos do domínio da aplicação. Seu objetivo é descrever o problema 
representado pelo sistema a ser desenvolvido. É um modelo conceitual; com foco em o que o 
sistema deve tratar, não considera características técnicas da solução a ser utilizada. Em termos 
práticos, nesse modelo, incluímos as classes, a lista de atributos e a lista básica de operações, 
sem os detalhes de tipos de dados, ou parâmetros das funções, por exemplo. O modelo de casos 
de uso e o modelo de classes de análise são os dois principais modelos criados na fase de 
análise. 
Modelo de classes de projeto 
• É construído na atividade de projeto do desenvolvimento e considera alguns detalhes da solução 
de software a ser utilizada, mas ainda em um nível alto de abstração. Nessa etapa do processo 
de desenvolvimento, é comum percebermos a necessidade de criar novas classes, uma vez que 
o foco agora está em como o sistema deve funcionar. Ou seja, como o sistema vai entregar suas 
funcionalidades. Os detalhes incluídos são relacionados, por exemplo, com tipos e domínio dos 
atributos; parâmetros, entradas e saídas das operações etc. Novas classes criadas podem ser 
de interfaces do sistema, bancos de dados, entre outras. 
Modelagem de Sistemas em UML 
Marcio Quirino - 48 
 
Modelo de classes de implementação 
• É a codificação das classes definidas nas fases de análise e projeto em alguma linguagem de 
programação, normalmente uma linguagem orientada a objetos (por exemplo, C++, Java, C# 
etc.). O modelo de implementação é construído na atividade de codificação de um processo de 
desenvolvimento 
O exemplo da figura 7, extraído da obra de Bezerra (2015), ilustra a representaçãode uma classe 
em diferentes níveis de abstração. Observe que, em cada iteração do processo de desenvolvimento, são 
acrescentados mais detalhes sobre os atributos e operações. 
 
Figura 7 – Exemplo de Classe ContaBancária em diferentes níveis de abstração. 
Na especificação mais detalhada da classe ContaBancária do exemplo da figura 7, você pode 
observar a presença dos símbolos – e + antes dos nomes dos atributos e das operações, que representam 
sua visibilidade. Nessa mesma representação, temos as operações com seus parâmetros de entrada 
especificados (a Quantia em creditar e debitar). 
Relacionamentos no diagrama de classes 
Você já viu que especificar uma classe diz respeito a definir seus atributos e operações. Mas classes 
não existem isoladas, elas só fazem sentido quando se relacionam a outras, pois os objetos originados a 
partir delas trocam informações uns com os outros; e nisso reside a implementação de um sistema orientado 
a objetos. 
Dizemos que os objetos colaboram uns com os outros. O desenho do Diagrama de Classes mostra 
como os objetos instanciados a partir dessas classes podem se relacionar. Existem diferentes tipos de 
relacionamentos possíveis, bem como diversos detalhes que podem ser acrescentados no diagrama para 
melhorar sua semântica. Trataremos deles a seguir. 
A forma de relacionamento mais comum é chamada de associação e é representada no Diagrama 
de Classes por uma linha (normalmente um segmento de reta) ligando as classes às quais pertencem os 
objetos relacionados. 
A figura 8 ilustra associações entre classes: 
1. Cliente faz Pedido; 
2. Professor ministra Disciplina. 
Mas qual é o significado dessas associações? Quando ligamos as classes Cliente e Pedido significa 
que, durante a execução do sistema, haverá a possibilidade de troca de mensagens entre objetos dessas 
classes. 
Modelagem de Sistemas em UML 
Marcio Quirino - 49 
 
 
Figura 8 – Associações simples entre classes, elaborado com ferramenta ASTAH (2021) 
As associações possuem diversas características que podem ser representadas, por escolha do 
analista, para prover um melhor entendimento do modelo: nome, multiplicidades, tipo de participação, 
direção de leitura e papéis. 
Nome 
• Conforme a figura 8 mostra, os nomes das associações (ministra, faz) descrevem a relação que 
é estabelecida entre os objetos das classes associadas. Normalmente, são usados verbos ou 
expressões verbais para nomear associações. 
Multiplicidades 
• As associações permitem representar a informação dos limites inferior e superior da quantidade 
de objetos aos quais outro objeto pode estar associado: são as chamadas multiplicidades. Cada 
associação em um Diagrama de Classes possui duas multiplicidades, uma em cada extremo da 
linha que a representa. Os símbolos que representam uma multiplicidade são apresentados na 
tabela 1. 
Apenas 1 1..1 (ou 1) 
Zero ou Muitos 0..* (ou *) 
Um ou Muitos 1..* 
Zero ou Um 0..1 
Intervalo Específico li..ls 
Tabela 1 – Multiplicidades em um Diagrama de Classes. Tabela: Flavia Maria Santoro 
• Na figura 9, mostramos o exemplo com as multiplicidades correspondentes. Esses novos 
diagramas expressam mais do que o anterior. Eles informam que um professor pode ministrar 
nenhuma (zero) e no máximo três disciplinas (0..3). Uma disciplina precisa ser ministrada por 
pelo menos um professor, mas pode ser ministrada por muitos (1..*). Já um cliente pode fazer 
nenhum (zero) pedido, sem um limite máximo (0..*), e um pedido precisa ser feito por um cliente 
(1). 
 
Figura 9 – Associações simples entre classes com multiplicidades, elaborado com ferramenta ASTAH (2021) 
Modelagem de Sistemas em UML 
Marcio Quirino - 50 
 
Tipo de participação 
• Indica a necessidade ou não da existência dessa associação entre objetos. A participação pode 
ser obrigatória ou opcional. Se o valor mínimo da multiplicidade de uma associação é igual a 1 
(um), significa que a participação é obrigatória. Caso contrário, a participação é opcional. Por 
exemplo, a participação de Cliente e Professor nos exemplos da figura 9 é obrigatória, e a de 
Disciplina e Pedido é opcional. Isso significa que pode existir professores e clientes sem 
necessariamente estarem ministrando disciplinas ou fazendo pedidos. 
Direção da leitura 
• A direção de leitura indica como a associação deve ser lida. Essa direção é representada por um 
pequeno triângulo posicionado próximo a um dos lados do nome da associação (como nos 
exemplos da figura 9). 
Papéis 
• Quando um objeto participa de uma associação, ele tem um papel específico nela. Uma 
característica complementar à utilização de nomes e de direções de leitura é a indicação de 
papéis (roles) para cada uma das classes participantes em uma associação. 
Classes associativas 
São classes que estão ligadas a associações, em vez de estarem ligadas a outras classes. São 
também chamadas de classes de associação. Esse tipo de classe normalmente aparece quando duas ou 
mais classes estão associadas e seja necessário manter informações sobre a associação que existe entre 
elas. 
É muito comum a necessidade de classes associativas em relacionamentos muitos para muitos, ou 
seja 0..* 0..*. Uma classe associativa é representada pela mesma notação utilizada para uma classe comum. 
A diferença é que aquela é ligada por uma linha tracejada a uma associação. 
A figura 10 mostra um exemplo de classe associativa. Um professor ministra uma disciplina em 
determinada turma (que possui número, ano e semestre específicos). 
 
Figura 10 – Exemplo de classe associativa, elaborado com ferramenta ASTAH (2021) 
Autoassociação 
Tem como objetivo relacionar objetos da mesma classe, mas cada objeto tem um papel distinto nessa 
associação. Por exemplo, na figura 11, objetos da classe Empregado estão associados entre si, um 
empregado como supervisor, que supervisiona outros empregados. 
A figura 11 ilustra, também, o uso de papéis (roles) para distinguir o lado supervisor (multiplicidade 
1) do lado supervisionado (lado muitos) da autoassociação. 
Modelagem de Sistemas em UML 
Marcio Quirino - 51 
 
 
Figura 11 – Exemplo de autoassociação, elaborado com ferramenta ASTAH (2021) 
Todo-parte 
Existe uma categoria especial de relacionamento que possui uma semântica (significado) particular: 
todo-parte. 
Uma relação todo-parte entre dois objetos indica que um dos objetos está contido (é uma parte do) no outro, 
ou seja, o objeto do lado todo contém o do lado parte. 
A UML define dois tipos de relacionamentos todo-parte: a agregação e a composição. 
Atenção 
A agregação e a composição são casos especiais da associação, logo, todas as características válidas para 
uma associação valem para agregações e composições. Agregações/composições são assimétricas no sentido que, 
se um objeto A é parte de um objeto B, o objeto B não pode ser parte do objeto A. 
Agregações e composições propagam comportamento, pois um comportamento que se aplica a um 
todo, automaticamente se aplica às suas partes. Nas agregações/composições, as partes são normalmente 
criadas e destruídas pelo todo. 
Uma agregação é representada graficamente como uma linha que conecta as classes relacionadas, 
com um diamante (losango) branco perto da classe que representa o todo. Uma composição é representada 
por meio de um diamante negro. 
A figura 12 apresenta um exemplo de relacionamento de composição. Um pedido é composto de 
vários itens de pedidos. 
 
Figura 12 – Exemplo de relacionamento de composição, elaborado com ferramenta ASTAH (2021) 
A diferença entre agregação e composição é sutil, pois não é muito bem definida na UML. Ambas 
são relacionamentos todo-parte, mas pode-se dizer que, na agregação, a parte pode existir 
independentemente do todo; na composição, a existência da parte depende da existência do todo. 
No exemplo da figura 12, não faria sentido a existência de ItemPedido se não existisse Pedido. 
Exemplo 
Um exemplo de agregaçãoseria a associação entre Equipe e Jogador, em que este último é parte da Equipe; 
entretanto, um Jogador existe independentemente da existência da Equipe. Isso significa que a destruição de uma 
Equipe (todo) não implicaria na destruição do Jogador (parte), como ocorre na composição. 
Modelagem de Sistemas em UML 
Marcio Quirino - 52 
 
Herança 
Outro relacionamento com semântica específica é o de herança, ou relacionamento de 
generalização/especialização. Esse tipo de relacionamento, diferente dos que você estudou, significa um 
relacionamento de generalidade ou especialidade entre as classes envolvidas. Por exemplo, o conceito 
animais é mais genérico que o conceito mamífero, que, por sua vez, é mais genérico que o conceito macaco. 
Nesse tipo de relacionamento, as classes mais específicas herdam características das classes mais genéricas. 
Usamos o termo subclasse para denotar a classe que herda as propriedades de outra classe 
mediante uma generalização. A classe que possui propriedades herdadas por outras classes é chamada de 
superclasse. No Diagrama de Classes, a herança é representada por uma flecha partindo da subclasse em 
direção à superclasse. Um relacionamento de herança representa um conjunto de objetos que compartilham 
um conjunto comum de propriedades (atributos, operações, associações), características inerentes à 
superclasse, além de possuírem características próprias. 
A figura 13 mostra um exemplo do relacionamento de herança. 
 
Figura 13 – Exemplo de relacionamento de herança, elaborado com ferramenta ASTAH (2021) 
Nesse exemplo, um professor pode ser do tipo Tempo Integral ou Horista. Ambos possuem nome e 
matrícula, porém, o Professor Tempo Integral possui salário, e o Professor Horista possui valor de hora 
paga. Note que, além dos atributos da classe genérica (no exemplo, Professor), as classes especializadas 
herdam também as operações (não especificadas no exemplo), assim como os relacionamentos (no 
exemplo, a associação ministra) da classe genérica. 
4. Emprego de Diagramas de Objetos e de Pacotes 
Empregar Diagramas de Objetos e de Pacotes para apoiar a especificação de um sistema. 
Visão geral do diagrama de objetos 
Além do Diagrama de Classes, a UML define um segundo tipo de diagrama na perspectiva estática 
e estrutural do sistema: o Diagrama de Objetos. 
Assim como objetos são instâncias de classes, os Diagramas de objetos podem ser vistos como instâncias de 
Diagramas de Classes. 
Um Diagrama de Objetos UML representa uma instância específica de um Diagrama de Classes em 
determinado momento. Portanto, do ponto de vista gráfico, ele é bastante parecido com o Diagrama de 
Classes. 
 
 
Modelagem de Sistemas em UML 
Marcio Quirino - 53 
 
Saiba mais 
Bezerra (2015) afirma que um Diagrama de Objetos exibe uma “fotografia” do sistema em certo momento, 
mostrando as associações estabelecidas entre objetos, de acordo com suas interações e com os valores que seus 
atributos assumem. 
Um Diagrama de Objetos mostra os valores de atributos do conjunto de objetos que ele representa 
e como esses objetos se relacionam entre si. Um objeto, ou uma instância de uma classe, possui uma 
identificação única (não existem dois objetos iguais) e os seus atributos assumem determinados valores em 
um momento específico no tempo. 
Os valores dos atributos podem sofrer alterações e, nesse caso, dizemos que o objeto sofreu uma 
mudança de estado. 
Exemplo 
Por exemplo, o objeto Maria, criado a partir de uma classe Pessoa, possui como valor do atributo Endereço: 
Rua das Palmeiras. Quando Maria muda de endereço, o valor do atributo passa a ser o novo endereço: Avenida Vieira 
Souto. Assim, em um diagrama de estados, o objeto Maria seria representado com o valor do atributo Endereço quando 
o diagrama foi criado. 
No Diagrama de Objetos, não faz sentido falar em operações, que são as mesmas para todos os 
objetos de uma classe. Portanto, nesse diagrama, o elemento principal, o Objeto, possui apenas o nome e 
os atributos com seus valores. 
Em um Diagrama de Objetos, cada objeto é representado por um retângulo com dois 
compartimentos. O compartimento superior mostra a identificação do objeto na forma de texto sublinhado: 
:NomeClasse 
nomeObjeto: NomeClasse 
Lembre-se de que cada objeto é único e, portanto, esse nome identifica exclusivamente um objeto. 
A identificação do objeto pode ser omitida. 
Por exemplo: 
Marta: Professor 
:Professor 
No primeiro caso, o objeto da classe professor foi identificado com o nome Marta; no segundo, o 
analista optou por não caracterizar o objeto em si, significando que pode estar se referindo a qualquer objeto 
daquela classe. 
A segunda representação é frequentemente usada na etapa de projeto do processo de 
desenvolvimento de sistemas, quando se representa a interação entre objetos (instâncias de classes) nos 
diagramas de sequência ou de comunicação. 
No compartimento inferior (cuja utilização é opcional), aparecem os valores que os atributos definidos 
na classe assumem para este objeto. Dessa forma, deve mostrar uma lista de pares da forma: nome do 
atributo = valor do atributo. 
A figura 14 reproduz o exemplo de Diagrama de Objetos mostrado por Bezerra (2015). Nesse 
exemplo, uma instância de pedido é associada a três instâncias de ItemPedido. Cada item, por sua vez, está 
ligado a um produto. Os valores para cada atributo de cada objeto são apresentados nesse diagrama. 
Modelagem de Sistemas em UML 
Marcio Quirino - 54 
 
 
Figura 14 – Exemplo de Diagrama de Objetos (BEZERRA, 2015) 
Você pode observar também que não existem detalhes nos relacionamentos, tal como no Diagrama 
de Classes. Os relacionamentos no Diagrama de Objetos mostram uma situação específica em que aqueles 
objetos se encontram, não as possíveis relações entre eles. 
No diagrama da figura 14, temos um Pedido que possui 3 Itens associados a ele, e 1 Produto 
associado respectivamente a cada Item. 
A figura 15 mostra outro exemplo de Diagrama de Objetos, em que observamos que o Cliente Pablo 
está associado a 2 contratos de aluguel de carros diferentes. Cada contrato tem seu identificador e atributos 
próprios. Esse diagrama ajuda no entendimento da situação desse cliente. 
 
Figura 15 – Exemplo de Diagrama de Objetos 
Saiba mais 
De acordo com Bezerra (2015), Diagramas de Objetos não são muito utilizados na prática. Mas eles podem 
ser úteis na atividade de validação no processo de desenvolvimento, pois permitem ilustrar e esclarecer certos aspectos 
de um Diagrama de Classes. 
Mesmo antes de criar um Diagrama de Classes, você pode criar um Diagrama de Objetos para 
descobrir fatos sobre elementos específicos e suas associações ou para esclarecer dúvidas por meio de 
exemplos específicos. Além disso, ajuda na construção dos diagramas de interação (de sequência ou 
comunicação), pois estes utilizam a mesma notação. 
Em resumo, os Diagramas de Objetos podem ter as seguintes aplicações: 
✓ Ajudar na análise de uma interação específica. 
✓ Mostrar uma visão geral de alto nível do sistema. 
✓ Validar um Diagrama de Classes. 
Modelagem de Sistemas em UML 
Marcio Quirino - 55 
 
Os Diagramas de Objetos podem ser usados também para verificar se o sistema foi desenvolvido 
conforme os requisitos, e até mesmo para analisar se uma regra de negócio está sendo cumprida. 
Dica 
Para criar esses diagramas, procure exibir associações entre objetos somente com uma ligação (por exemplo, 
uma linha única juntando dois objetos, sem setas ou outros detalhes), pois um Diagrama de Objetos tem por objetivo 
mostrar somente a existência de associações e não os tipos de associações, como em um Diagrama de Classes. Além 
disso, evite representar todos os objetos em um único Diagrama de Objetos, pois ele apresenta apenas um estado do 
objeto. 
Visão geral do diagrama de pacotes 
Muitos sistemas possuem uma quantidade bastante grande de casos de uso e classes, portanto, 
representá-losem um único diagrama é inviável devido à sua complexidade para o entendimento. Para 
resolver esse problema, usamos o elemento da UML chamado de pacote (do inglês, package). 
Os pacotes servem para agrupar diagramas, tais como classes, casos de uso, ou mesmo outros 
pacotes. Normalmente, os grupos de classes são associados com módulos de programação do sistema. 
Uma classe só pode aparecer uma vez no mesmo pacote, mas pode estar presente em vários pacotes 
diferentes. 
Um pacote representa um grupo de elementos que pode se relacionar com outros pacotes por meio 
de uma relação de dependência. É possível definir a visibilidade (conforme estudamos no Módulo 3) de 
pacotes e dos elementos contidos nele. Pacotes são úteis para prover uma visão geral de um conjunto 
grande de objetos; para organizar um modelo grande e agrupar seus elementos. 
A representação gráfica de um pacote é um retângulo com uma aba no canto superior esquerdo, 
com o nome do pacote na aba ou no centro do retângulo. A figura 16 mostra um exemplo de pacotes que 
agrupam conjuntos de classes. O pacote Módulo Docente agrupa as classes relacionadas com professores, 
o Módulo Discente agrupa as classes relacionadas com alunos, e o Módulo Organização Curricular agrupa 
classes pertinentes à matriz curricular, em um sistema acadêmico. 
 
Figura 16 – Exemplo de representação de pacote, elaborado com ferramenta ASTAH (2021) 
Modelagem de Sistemas em UML 
Marcio Quirino - 56 
 
Desdobramentos dos diagramas no pacote 
As ligações entre pacotes são relacionamentos de dependência. Um pacote P1 depende de outro 
pacote P2, se algum elemento contido em P1 depende de algum elemento contido em P2. 
A figura 17 mostra o Diagrama de Pacotes do exemplo do sistema acadêmico sem os 
relacionamentos explícitos entre as classes internas; apenas com a representação de dependências 
existentes entre os próprios pacotes. Ou seja: 
Os pacotes se relacionam com outros pacotes por meio de um vínculo de dependência. 
 
Figura 17 – Exemplo de representação de dependências entre pacote, elaborado com ferramenta ASTAH (2021) 
As dependências entre pacotes mostram que um pacote depende ou influencia outro. As 
dependências podem ser divididas em dois tipos: acesso e importação. 
A. Dependência de acesso 
✓ Indica que um pacote requer assistência das funções de outro pacote. 
B. Dependência de importação 
✓ Indica que uma funcionalidade foi importada de um pacote para outro. 
Ambas são representadas por uma linha pontilhada com uma seta apontando para o pacote 
dependente. 
Pacotes também podem formar grupos de pacotes e hierarquias. A figura 18 (Bezerra, 2015) mostra 
como pacotes podem ser agrupados dentro de outros pacotes, formando uma hierarquia de contenção. 
 
Figura 18 - Agrupamento de pacotes (BEZERRA, 2015) 
Modelagem de Sistemas em UML 
Marcio Quirino - 57 
 
Além disso, como já vimos, existem três tipos de visibilidade de elementos dentro dos pacotes: 
A. + (público) 
✓ Visível por todos que importam ou acessam o pacote. 
B. # (protegido) 
✓ Visível só pelos pacotes filhos (por relação de generalização). 
C. – (privado) 
✓ Visível só por outros elementos do pacote. 
Atenção 
Note que aqui não se aplica a visibilidade de pacotes (~), que é aplicável tão somente a atributo de classe que 
seja visível a qualquer classe pertencente ao mesmo pacote no qual está definida a classe. 
No contexto da modelagem de casos de uso, os pacotes podem ser utilizados com diversos objetivos. 
Alguns desses objetivos são: estruturar o modelo de casos de uso com base nos grupos de usuários do 
sistema; definir a prioridade na qual os casos de uso serão desenvolvidos; e definir o grau de correlação 
entre os casos de uso. 
O critério para criar os pacotes é subjetivo e depende da visão e das necessidades do projetista. 
Comentário 
Normalmente, o projetista define uma semântica e aloca elementos similares em um pacote, pois esses 
elementos tendem a ser alterados em conjunto no mesmo pacote. 
Um pacote bem estruturado tem as seguintes características: 
1. É coeso em relação aos elementos incluídos. 
2. É fracamente acoplado em relação à exportação apenas dos elementos que os outros 
pacotes precisam enxergar. 
3. Não contém muitos alinhamentos, ou seja, possui um conjunto equilibrado de elementos. 
Ao especificar um pacote, é uma prática usar a forma simples de ícone retangular, obscurecendo o 
seu conteúdo. No caso da necessidade de apresentar o seu conteúdo interno (como nas figuras 16 e 17), 
deve-se mostrar apenas os elementos necessários para a compreensão do significado. 
Esse diagrama também é muito utilizado para ilustrar a arquitetura de um sistema, mostrando o 
agrupamento de suas classes. A figura 19 mostra um exemplo de Diagrama de Pacotes usado com o objetivo 
de organizar as classes de acordo com as camadas da arquitetura do sistema. Tipicamente, um sistema 
pode ser organizado conforme o padrão de projeto Model (Modelo), View (Visão) e Control (Controle). 
Modelagem de Sistemas em UML 
Marcio Quirino - 58 
 
 
Figura 19 – Exemplo de diagrama de pacotes 
O pacote tem uma grande similaridade com a agregação. O fato de um pacote ser composto de 
modelos de elementos cria uma espécie de agregação de composição, pois, se esse pacote for destruído, 
todo o seu conteúdo também será. 
Considerações finais 
Estudamos os conceitos básicos para você iniciar a modelagem de um sistema orientado a objetos 
usando a UML. Observamos que a representação de requisitos funcionais deve ser feita por meio de um 
Diagrama de Casos de Uso, em conjunto com suas descrições textuais. 
Você pode observar que a modelagem estrutural do sistema é feita com a identificação e 
representação de classes e seus objetos. Devemos definir seus atributos e operações e ficar atentos para 
os relacionamentos entre as classes, que podem ser associações simples, agregações e hierarquias. Vimos 
também que todos os elementos aprendidos podem ser agrupados em pacotes; além disso, podemos usar 
Diagramas de Objetos para apoiar no entendimento e análise de situações e interações específicas entre 
objetos. 
Vimos que os diagramas da UML abordados neste tema podem ser usados na modelagem do 
domínio da aplicação, produzindo artefatos que serão refinados ao longo do processo de desenvolvimento 
do sistema. Na prática, nem todos esses diagramas são necessários em todos os tipos de sistema, 
destacando-se a relevância do diagrama de classes, por ser a base para a construção do banco de dados 
do sistema. 
Referências 
ASTAH. Astah UML Modeling Tool. Consultado em meio eletrônico em: 31 jan. 2021. 
BEZERRA, E. Princípios de análise e projeto de sistemas com UML. Rio de Janeiro: Elsevier, 2015. 
Modelagem de Sistemas em UML 
Marcio Quirino - 59 
 
GÓES, W.M. Aprenda UML por meio de estudos de caso. São Paulo: Novatec, 2014. 
IEEE STANDARD GLOSSARY of Software Engineering Terminology. In: IEEE Std. 610.12-1990, 31 
dez. 1990. 
LIMA, A. S. UML 2.0: Do Requisito à Solução. São Paulo: Érica, 2005. 
MEDEIROS, E.S. Desenvolvendo software com UML 2.0: definitivo. São Paulo: Pearson Markron 
Books, 2004. 
SOMMERVILLE, I. Engenharia de Software. 9. ed. São Paulo: Pearson Prentice Hall, 2011. 
Explore+ 
Busque o artigo Regras do Negócio, um fator chave de sucesso no processo de desenvolvimento de 
Sistemas de Informação, dos professores Silvia Inês Dallavalle e Edson Walmir Cazarini, e aprenda sobre a 
importância das regras de negócio no desenvolvimento de sistemas. 
 
Modelagem de Sistemas em UML 
Marcio Quirino - 60 
 
Utilizando UML Para Projetar o Software 
Descrição 
Uso de diagramas de Linguagem Unificada de Modelagem (UML) na fase de projeto de sistemas de 
informação. 
Propósito 
Compreender os modelos que fazem parte da UML, empregando os diagramas de interação, de 
classes de projeto, de atividades, de estado, de componentes e de implantação, durante a fase de projeto 
desoftware. 
Preparação 
Antes de iniciar o conteúdo, é indicado que seja instalado em seu computador um programa que lhe 
permita elaborar modelos, sob a forma de diagramas da UML (Linguagem Unificada de Modelagem). Nossa 
sugestão inicial é o Astah Free Student License e será necessário usar seu e-mail institucional para ativar a 
licença. Preencha os dados do formulário no site do software, envie e aguarde a liberação de sua licença 
em seu e-mail. Ao recebê-la, siga as instruções e instale o produto em seu computador. 
Sugestões de links adicionais de programas livres para modelagem de sistemas em UML (UML 
Tools) podem ser encontradas em buscas na internet. 
Introdução 
A modelagem de um software pode, de fato, determinar a quantidade de problemas que terão que 
ser tratados durante o desenvolvimento. Softwares de sucesso, que têm sua implantação quase sem 
nenhum tipo de erro, certamente contaram com um bom processo de modelagem durante seu 
desenvolvimento. Ou seja, um bom produto de software é sempre concebido por um bom processo de 
desenvolvimento, iniciado com a modelagem do sistema. 
O processo de desenvolvimento conta com diversos métodos e técnicas para que o produto tenha a 
melhor qualidade possível, sendo a modelagem uma das técnicas utilizadas. Modelar algo é construir uma 
representação abstrata de um artefato do mundo real. 
A modelagem conta com diversas regras e diretrizes que têm que ser respeitadas para se construir 
um modelo de qualidade para o software. Todas as funcionalidades implementadas pelo software, assim 
como todos os elementos de dados que utilize e as regras que devem ser seguidas, precisam ser pensadas, 
discutidas e estruturadas antes do início de sua construção, de modo que haja um completo entendimento 
de todo esse universo, não só por parte dos usuários, mas também dos desenvolvedores. Saber identificar 
cada característica do software durante seu projeto é importante para que venha de fato atender às 
necessidades dos usuários e cumprir com todas as regras a serem executadas por ele. 
Vamos entender como construir os diagramas ao longo da etapa de projeto (ou design) de software. 
Nesta parte do desenvolvimento, alguns outros diagramas já terão sido construídos e precisam ser 
respeitadas suas regras e definições. Para isso, vamos ver as técnicas de concepção e de modelagem 
desses diagramas, assim como seus atributos e modelos. Por fim, vamos apresentar e discutir como aplicá-
los. 
 
 
Modelagem de Sistemas em UML 
Marcio Quirino - 61 
 
1. Empregar os diagramas de interação no projeto de 
sistema 
Atividades do desenvolvimento de software 
As atividades típicas de um processo de desenvolvimento de software compreendem, de modo geral, 
independentemente do processo adotado, as seguintes etapas: 
• Levantamento de requisitos 
• Análise 
• Projeto (design) 
• Implementação 
• Testes 
• Implantação 
Como se percebe, essas atividades são realizadas por etapas ou fases, em que uma etapa depende 
dos artefatos resultantes das anteriores. Neste conteúdo, o foco é a etapa de projeto (ou design) do sistema, 
na qual existe uma dependência de seus artefatos em relação aos artefatos elaborados na fase de análise 
(ou modelagem). A figura a seguir ilustra os diagramas da UML que, usualmente, são construídos nos 
modelos de análise e de projeto. Trata-se de uma visão prática, uma vez que a especificação da linguagem 
UML não determina quais diagramas devam ser usados em quais etapas e tampouco em que ordem devem 
ser elaborados. 
 
Modelos da fase de análise X modelos da fase de projeto 
Diagramas de interação 
Em um sistema computacional orientado a objetos, as funcionalidades (casos de uso) são fornecidas 
através de serviços resultantes da colaboração de grupos de objetos. Estes interagem através de 
comunicações, de forma que juntos realizem os casos de uso. 
Modelagem de Sistemas em UML 
Marcio Quirino - 62 
 
As comunicações são explicitadas através da representação da interação durante as comunicações. 
Para tal, temos na UML os diagramas de interação, usados para mostrar o comportamento interativo de um 
sistema. Os diagramas de interação descrevem o fluxo de mensagens e fornecem contexto para uma ou 
mais linhas da vida de objetos dentro de um sistema. Além disso, os diagramas de interação podem ser 
usados para representar as sequências organizadas dentro de um sistema e servir como um meio para 
visualizar dados em tempo real. 
Engenharia reversa 
Engenharia reversa, no contexto da Engenharia de Software, significa obter o modelo a partir do sistema 
implementado. 
Os diagramas de interação podem ser implementados em diversos cenários para fornecer um 
conjunto exclusivo de informações. Eles podem ser usados para modelar um sistema, como uma sequência 
de eventos organizada por tempo; fazer a engenharia reversa ou avançada de um sistema ou processo; 
organizar a estrutura de vários eventos interativos; mostrar, de forma simples, o comportamento de 
mensagens e linhas da vida dentro de um sistema e até identificar possíveis conexões entre elementos de 
linhas da vida. Seus principais objetivos são: 
• Obter informações adicionais para completar e aprimorar outros modelos (modelo de casos 
de uso e de classes). 
• Fornecer aos programadores uma visão detalhada dos objetos e das mensagens envolvidos 
na realização dos casos de uso do sistema. 
Existem dois tipos de diagrama de interação: 
 
Cada tipo de diagrama aborda uma perspectiva diferente do comportamento de um sistema. Vamos 
ver a seguir os conceitos básicos de cada diagrama, como construí-los e utilizá-los. 
Num diagrama de interação, as mensagens trocadas entre objetos, em geral, serão métodos da 
classe a que pertence o objeto receptor da mensagem, com os mesmos elementos oriundos das 
mensagens. Isso será percebido ao estudarmos os Diagramas de Classe de Projeto. 
Os diagramas de interação servem para refinar o diagrama de classes na etapa de projeto, com o 
detalhamento dos métodos. 
Isso nos mostra que os diagramas da etapa de projeto apresentados na figura anterior estão 
relacionados entre si e com os diagramas da etapa de análise, de modo que a construção de um diagrama 
depende de outros. 
Modelagem de Sistemas em UML 
Marcio Quirino - 63 
 
Diagrama de sequência 
Diagramas de sequência recebem esse nome porque descrevem, ao longo de uma linha do tempo, 
a sequência de comunicações entre objetos de um sistema de informação. Em geral, são construídos logo 
após os diagramas de caso de uso e de classes, pois têm como principais objetivos: 
 
• Documentar casos de uso. 
• Mostrar como os objetos do sistema se comunicam através de mensagens em ordem 
temporal. 
• Validar se todas as operações das classes foram identificadas e declaradas. 
• Validar a existência de um objeto necessário ao funcionamento do sistema. 
Atenção 
Não é necessário construir diagramas de sequência para todos os casos de uso do sistema. Apenas os mais 
complexos, relacionados com o negócio da aplicação, são explorados por esse tipo de diagrama. Ele pode ser bastante 
trabalhoso e criá-lo para todas as partes do sistema pode não ser produtivo e nem ter benefícios compensatórios. 
Dependendo da complexidade ou do número de objetos envolvidos ou da presença de desvios 
condicionais no caso de uso, vários diagramas de sequência serão necessários para representar as 
interações do sistema. Assim, devemos construir um diagrama de sequência principal, descrevendo as 
sequências normais entre os objetos (fluxo normal) e diagramas complementares, descrevendo sequências 
alternativas (fluxos alternativos) e tratamento de situações de erro (fluxos de exceção). 
Atenção 
Diagramas de sequência são complementares aos diagramas de caso de uso. 
Os diagramas de caso de uso são bastante completos nas descrições textuais, porém não são 
capazes de mostrar como os objetos do sistema se comunicam por intermédiode mensagens em ordem 
temporal, nem verificar se todas as operações das classes foram validadas e declaradas. Essas funções 
são muito mais bem executadas pelos diagramas de sequência. 
 
Exemplo esquemático de diagrama de sequência. 
Elementos do diagrama de sequência 
O diagrama de sequência é composto de diversos tipos de elementos. Vamos aqui apresentar cada 
um deles. 
Objetos 
São apresentados na parte superior do diagrama (um ao lado do outro) na dimensão horizontal. 
Modelagem de Sistemas em UML 
Marcio Quirino - 64 
 
Não há uma ordem específica de apresentação obrigatória. Sua ordem é relevante somente como 
forma de tornar o diagrama mais legível. Ou seja, por exemplo, uma boa prática pode ser colocar os 
elementos que têm mais interação mais próximos. Já no centro e abaixo dos objetos temos sua linha da vida 
(linha reta tracejada). Todo e qualquer objeto ou classe nesse diagrama pode ser representado com um 
retângulo com o seu nome, mas existem notações específicas para tipos especiais de objetos. São quatro 
tipos especiais, a saber: 
 
A. Ator 
É uma entidade externa que interage com o sistema enviando ou recebendo dados. Um ator é 
representado pelo estereótipo de boneco magro (“palito”), como nos diagramas de casos de uso. 
Mensagens podem ser trocadas entre atores, ou entre atores e objetos ou classes de fronteira. 
 
Exemplo de Ator. Elaborado na ferramenta Astah UML. 
B. Fronteira 
É uma classe ou um objeto responsável pela interface entre o sistema de informação e seus 
usuários, ou pela comunicação entre dois ou mais sistemas. Em geral, são programas 
(formulários, interfaces, janelas) que capturam, processam dados e exibem informações. É 
através da classe de fronteira que os atores (usuários) terão seus requisitos atendidos pelo 
sistema. 
 
Exemplo de Fronteira. Elaborado na ferramenta Astah UML. 
C. Controle 
É uma classe ou um objeto usado quando os desenvolvedores optam por separar as regras de 
negócio, as manipulações de dados e o sequenciamento de tarefas da interface de comunicação 
do sistema com o usuário, seguindo um padrão de projeto conhecido como MVC (do inglês 
Model – View – Controller). Dessa forma, a classe de fronteira (View) só existe como interface 
Modelagem de Sistemas em UML 
Marcio Quirino - 65 
 
para receber e exibir dados. Todas as outras tarefas são executadas pela classe de controle 
(Controller). 
 
Exemplo de Controle. Elaborado na ferramenta Astah UML. 
D. Entidades 
São classes ou objetos responsáveis por armazenar e gerenciar os dados do sistema, bem como 
por mostrar a estrutura lógica e estática dos dados (Model no padrão MVC). 
 
Exemplo de Entidade. Elaborado na ferramenta Astah UML. 
Linha da Vida 
Compõe a dimensão vertical (tempo) de cada objeto do diagrama. As linhas de vida representam a 
sequência na qual a vida do objeto transcorre durante a interação. Podem apresentar criação ou destruição 
de objetos. Quando são criadas interações entre os objetos, um retângulo sobre a linha é colocado 
(automaticamente pelas ferramentas de desenho de diagrama), identificando a interação. Mais de um 
retângulo pode existir em um único objeto. Esse retângulo é chamado de tempo de vida da interação. 
 
Exemplos de linhas de vida (destacados em vermelho). Elaborado na ferramenta Astah UML. 
Modelagem de Sistemas em UML 
Marcio Quirino - 66 
 
Mensagens 
São os serviços solicitados de um objeto a outro ou a ele mesmo, e as respostas a essas solicitações. 
Uma mensagem é representada por um segmento de reta, contendo uma seta em uma das suas 
extremidades. As mensagens são acompanhadas de um rótulo contendo seu nome. Pode conter também 
parâmetros da mensagem. As mensagens podem ser síncronas, assíncronas, de retorno e de criação de 
objeto. Para cada uma delas, a linguagem usa notações diferentes. Na UML, o rótulo de uma mensagem 
deve seguir a seguinte sintaxe: 
[[expressão-sequência] controle:] [v :=] nome [(argumentos)] 
Atenção 
Os colchetes [ ] indicam que o elemento é opcional. Note que o único termo obrigatório corresponde ao nome 
da mensagem. 
Muitas vezes é necessário indicar que o termo controle está associado a uma expressão lógica. 
Nesse caso, a sintaxe para o termo controle pode ser uma condição ou uma iteração: 
‘*’ ‘[’ cláusulaiteração ‘]’ 
‘[’ cláusulacondição ‘]’ 
Onde o símbolo * significa repetições da cláusula iterativa. Nessa sintaxe, os elementos entre aspas 
simples ‘ ‘ significam que fazem parte da expressão. 
 
Tipos de setas X tipos de mensagens 
 
Exemplos de Mensagens (destacadas em vermelho). Elaborado na ferramenta Astah UML 
Mensagens de iteração 
São mensagens que podem ser enviadas repetidas vezes. São precedidas de um asterisco e 
representadas dentro de colchetes. 
Modelagem de Sistemas em UML 
Marcio Quirino - 67 
 
 
Exemplo de Mensagens de iteração. Elaborado na ferramenta Astah UML 
Condições de guarda 
São mensagens que tem indicada uma condição para seu envio. 
 
Exemplo de condições de guarda. Elaborado na ferramenta Astah UML. 
Autochamada 
São mensagens que partem do objeto de origem e atingem a linha de vida dele mesmo disparando 
operações. 
Modelagem de Sistemas em UML 
Marcio Quirino - 68 
 
 
Exemplo de autochamada. Elaborado na ferramenta Astah UML. 
Ocorrência de interação 
São elementos de modelagem úteis quando se deseja simplificar um diagrama e extrair uma porção 
para outro, ou quando existe uma porção de ocorrência que se possa fazer reuso em outro diagrama. É 
representado por uma moldura com a etiqueta “ref” que se refere a outro diagrama de sequência. 
 
Exemplo de ocorrência de interação. Elaborado na ferramenta Astah UML. 
Opt 
São elementos que permitem tornar um trecho da interação opcional. 
Modelagem de Sistemas em UML 
Marcio Quirino - 69 
 
 
Exemplo de interação opcional “opt”. Elaborado na ferramenta Astah UML. 
Loop 
São elementos que permitem repetir um trecho da interação até “n” vezes. 
 
Exemplo de interação repetida “loop”. Elaborado na ferramenta Astah UML. 
Alt 
São elementos que permitem que um trecho da interação seja alternativo. 
Modelagem de Sistemas em UML 
Marcio Quirino - 70 
 
 
Exemplo de interação alternativa “alt”. Elaborado na ferramenta Astah UML. 
Diagrama de comunicação 
Diagramas de comunicação servem para mostrar como os objetos interagem para executar o 
comportamento de um caso de uso ou de parte dele, para determinar interfaces e responsabilidades de 
classes e definir os papéis dos objetos que executam determinado fluxo de eventos. Mostram a 
comunicação, ou seja, o fluxo de mensagens que ocorre entre os objetos de um sistema de informação, 
assim como o diagrama de sequência. Os dois expressam informações semelhantes, mas numa forma de 
exibição diferente. 
Então, qual diagrama usar? 
A. Diagrama de Sequência 
Se o objetivo for apresentar o fluxo de mensagens no decorrer do tempo, utilize o diagrama de 
sequência. 
B. Diagrama de comunicação 
Se a intenção for de dar ênfase a como os objetos estão vinculados e quais mensagens trocam 
entre si, use o diagrama de comunicação. 
No diagrama de comunicação, um vínculo é uma associação que identifica a ligação entre dois 
objetos envolvidos em um processo e é caracterizado pelo envio ou recebimento de uma mensagem ou de 
ambos. As mensagens enviadas de um objeto para outro são representadas por segmentos de retas com 
uma seta em uma das extremidades, indicando sua direção. 
Mensagens devem ter nome, parâmetros (opcional) e a sequência que é expressa por números, 
assim como no diagrama de sequência. 
Modelagem de Sistemas em UML 
Marcio Quirino - 71 
 
 
Exemplo esquemático de diagrama de comunicação correspondente ao diagrama de sequência, anteriormente apresentado. 
O exemplo esquemático acima ilustra a correspondência que existe entre o diagrama de sequência 
e o diagrama de comunicação. Os mesmos objetos são envolvidos, trocandoas mesmas mensagens. O 
fluxo de execução das mensagens, que no diagrama de sequência é determinado pela ordem temporal de 
cima para baixo, aqui no diagrama de comunicação é determinado pela numeração ordenada das 
mensagens. 
Como construir um diagrama de interação 
Para criação de um diagrama de interação (sequência ou comunicação), você pode seguir os 
seguintes passos (em geral): 
1. Determine o caso de uso que será modelado e identifique suas operações 
2. Para cada operação, identifique os objetos que farão parte de sua interação. 
3. Identifique as conexões e os relacionamentos entre eles e, em seguida, categorize-os. 
4. Identifique a sequência de fluxos de mensagens na interação entre os objetos. 
5. Identifique os tipos de mensagens, bem como sua sequência. 
6. Em seu software de diagramas UML, selecione as formas apropriadas para criar o diagrama. 
7. Insira um rótulo para todas as formas para representar cada evento, interação e mensagem em 
seu sistema. 
8. Dê nome ao seu diagrama usando algo que realmente o identifique. Com o volume, pode ficar 
complexa a busca pelo diagrama, caso use nomes sem muita semântica. 
Dica 
Não se recomenda incluir o ator nem o objeto de fronteira primeiramente, porque isso dificulta o entendimento. 
É mais recomendado iniciar a modelagem da interação com a representação do recebimento da mensagem para 
ativação da operação de sistema, no caso de uso. Essa recomendação ajuda a separar a lógica do domínio e a lógica 
da interface com o usuário. 
As classes conceituais identificadas, que participam em cada caso de uso, correspondem às 
entidades do mundo real envolvidas na tarefa do caso do uso, como se este fosse executado manualmente. 
Durante a modelagem de interações, objetos dessas classes participam da realização de um ou mais casos 
de uso. Por outro lado, durante a modelagem de interações, o projetista pode ter a necessidade de adicionar 
classes de software (ou seja, classes da aplicação que não têm correspondência no mundo real) que ajudem 
a organizar as tarefas a serem executadas. Essas classes de software normalmente são necessárias para 
manter a coesão e o acoplamento das demais classes em um nível adequado. 
Durante a aplicação do procedimento descrito acima, o projetista deve procurar construir diagramas 
de interação o mais inteligíveis possível. Por exemplo, é possível utilizar notas explicativas para esclarecer 
algumas partes do diagrama de interação. Essas notas podem conter texto livre ou pseudocódigo para 
orientar a programação. Outra estratégia que ajuda a construir um modelo de interações mais inteligível é 
utilizar os recursos de modularização (alt, loop, opt). 
Modelagem de Sistemas em UML 
Marcio Quirino - 72 
 
Atenção 
Sempre que for adequado, o projetista deve fazer, com base nos princípios de projeto, com que as classes de 
domínio enviem mensagens entre si. Dessa forma, o controlador envia uma mensagem para um objeto do domínio e 
este, por sua vez, dispara o envio de mensagens para outros objetos do domínio, o que evita que o controlador precise 
ter conhecimento desses últimos. 
Em que momento construir o modelo de interações 
Alguns textos sobre modelagem de sistemas orientados a objetos indicam o início da modelagem de 
interações já na atividade de análise. Outros defendem o início de sua construção somente na etapa de 
projeto. O fato é que a distinção entre essas duas fases não é tão nítida na modelagem orientada a objetos 
e a modelagem de interações pode ser realizada em ambas as fases. 
Na análise, podemos começar a construir o modelo de interações logo depois que uma primeira 
versão do modelo de casos de uso estiver pronta. Inicialmente, o modelo de interações pode ser utilizado 
para representar apenas os objetos participantes em cada caso de uso e com mensagens exibindo somente 
o nome da operação. Posteriormente (na etapa de projeto), esse modelo deve ser refinado, incluindo criação 
e destruição de objetos, detalhes sobre o tipo e assinatura completa de cada mensagem etc. 
No caso do processo incremental e interativo de desenvolvimento, onde os modelos evoluem em 
conjunto durante o desenvolvimento do sistema, embora esses modelos representem visões distintas do 
sistema, eles são interdependentes. Os itens a seguir demonstram como o modelo de interações se 
relaciona aos de casos de uso e de classes. 
Modelo de casos de uso ➔ Modelo de interações 
Utilizamos os cenários extraídos do modelo de casos de uso como fonte de identificação de 
mensagens na modelagem de interações. É adequado que se verifique se cada cenário relevante para todos 
os casos de uso foi considerado na modelagem de interações. 
Modelo de classes de análise ➔ Modelo de interações 
Utilizamos informações provenientes do modelo de classes para construir modelos de interações. 
Em particular, algumas responsabilidades já podem ter sido definidas durante a modelagem de classes de 
análise. A notação do diagrama de interações não precisa ser totalmente utilizada na fase de análise. Em 
particular, podemos definir diagramas de interação que apresentam as mensagens apenas com os seus 
nomes. Essa definição inicial deve ser refinada posteriormente com a utilização da sintaxe mais avançada. 
Modelo de interações ➔ Modelo de casos de uso 
A partir do conhecimento adquirido com a construção do modelo de interações, podemos aperfeiçoar 
e validar os cenários do modelo de casos de uso. 
Modelo de interações ➔ Modelo de classes 
É pela construção de modelos de interações que informações necessárias para a alocação e o 
detalhamento de operações (métodos) para classes surgem. Durante a construção de um diagrama de 
interação, pode ser que algumas informações necessárias em certa classe de análise ainda não existam, 
em virtude de não terem sido identificadas anteriormente. Portanto, além da identificação de operações, é 
provável que novos atributos sejam identificados durante a modelagem de interações. Outro elemento do 
modelo de classes que é comumente identificado ou validado pela construção do modelo de interações são 
as associações: uma mensagem entre objetos implica a existência de uma associação entre as classes 
envolvidas. Também é comum a situação em que identificamos novas classes durante a modelagem de 
interações, principalmente aquelas relacionadas ao domínio da solução do problema. 
Modelagem de Sistemas em UML 
Marcio Quirino - 73 
 
2. Revisar o diagrama de classes da análise no projeto de 
sistema 
Diagrama de classes de projeto 
Vamos tratar agora do diagrama de classes de projeto. Esse diagrama é um refinamento do diagrama 
de classes construído na fase de análise. Nesse refinamento, algumas classes sofrem alterações de suas 
propriedades com o objetivo de transformar o modelo de classes de análise no modelo de classes de projeto, 
assim como suas notações adicionais, transformações sobre atributos, operações e associações. 
Além disso, vamos abordar também os relacionamentos entre classes, apresentando outros 
elementos de notação e princípios de modelagem que não são usados na análise, mas que são importantes 
na construção do modelo de classes de projeto. 
Definição 
O diagrama de classes de projeto apresenta os dados que serão necessários para a construção do 
sistema de informação. Esse é o diagrama que possui o maior número de símbolos para sua diagramação. 
O seu principal objetivo é permitir a visualização dos componentes das bases de dados do sistema, 
ou seja, as classes e seus objetos, relações entre elas, suas operações, seus métodos, suas interfaces e 
seus pacotes. 
Também é papel desse diagrama atender às demandas dos casos de uso, armazenando as 
estruturas de dados projetadas para o sistema. 
Na fase de análise, o diagrama de classes pode ser usado para produzir o modelo conceitual por 
meio do qual representamos as classes e seus atributos e não levamos em consideração aspectos 
relacionados ao software. Apenasestamos interessados no domínio do problema, ou seja, na representação 
das informações necessárias ao sistema e nos conceitos e características observados no ambiente. Já na 
fase de projeto, definimos a solução do problema, ou seja, damos importância ao software por meio do qual 
as classes serão programadas, evidenciamos detalhes da implementação, como, por exemplo, os tipos de 
dados dos atributos (varchar, integer, date etc.) e suas operações e métodos. 
Especificação de atributos 
No modelo de classes de análise, os atributos são definidos somente pelo nome. No entanto, a 
sintaxe completa da UML para definição de um atributo é bem mais detalhada. Essa sintaxe, usada na fase 
de especificação do modelo de classes de projeto, é a seguinte: 
<atributo> ::= [/] [visibilidade] nome[: tipo] [= valor_inicial] 
Default 
O termo default diz respeito a um parâmetro configurado de forma automática sem intervenção do usuário, ou 
seja, um parâmetro utilizado como padrão pelo sistema. 
A visibilidade de um atributo indica seu nível de acesso. Ou seja, ela permite definir quais atributos 
de um objeto são acessíveis por outros objetos. A visibilidade de um atributo pode ser pública, protegida, 
privativa ou de pacote. A primeira é o que chamamos de default (se nenhuma visibilidade for especificada, 
essa é assumida). 
A propriedade de visibilidade serve para implementar o encapsulamento da estrutura interna da 
classe. Somente as propriedades realmente necessárias ao exterior da classe devem ser definidas com 
visibilidade pública. Todo o resto deve ser definido através das visibilidades protegida e privativa. Abaixo 
temos a lista de tipos de visibilidades, seus símbolos e significados: 
 
Modelagem de Sistemas em UML 
Marcio Quirino - 74 
 
A. Publica (+) 
Qualquer objeto externo pode obter acesso ao elemento, desde que tenha uma referência para 
a classe em que o atributo está definido. 
B. Protegida (#) 
O elemento protegido é visível para subclasses da classe em que este foi definido. 
C. Privativa (-) 
O elemento privativo é invisível externamente para a classe em que este está definido. 
D. Pacote (~) 
O elemento é visível a qualquer classe que pertence ao mesmo pacote no qual está definida a 
classe. 
O elemento nome na sintaxe do atributo corresponde ao nome do atributo. Na verdade, somente 
esse elemento é obrigatório na sintaxe de declaração de um atributo, visto que os demais são opcionais. 
O elemento tipo especifica o tipo do atributo. Esse elemento é dependente da linguagem de 
programação na qual a classe deve ser implementada. O tipo de um atributo pode ser definido pela utilização 
de um tipo primitivo da linguagem de programação a ser utilizada na implementação. 
Exemplo 
Se estamos utilizando a linguagem Java, temos, dentre outros, os seguintes tipos primitivos: int, float e boolean. 
Um valor inicial também pode ser declarado para o atributo. Dessa forma, sempre que um objeto de 
uma classe é instanciado, o valor inicial declarado é automaticamente definido para o atributo. Assim como 
o tipo, o valor inicial de um atributo também é dependente da linguagem de programação. 
Pode-se definir um atributo derivado em uma classe. Um atributo é derivado quando o seu valor pode 
ser obtido a partir do valor de outro(s) atributo(s). Por exemplo, o valor da idade de uma pessoa pode ser 
obtido a partir de sua data de nascimento. Um atributo derivado é representado com uma barra inclinada à 
esquerda (/). Atributos derivados normalmente são definidos por questões de desempenho. 
Os atributos também têm multiplicidade. Esta determina o número mínimo e máximo de valores que 
um atributo pode conter. Abaixo podemos ver as multiplicidades e seus significados, que são similares às 
multiplicidades dos relacionamentos entre classes: 
A. 0..1 
Indica que o atributo tem no mínimo zero (e opcional) e no máximo um valor. 
B. 1..1 
Indica que o atributo tem no mínimo um (e obrigatório) e no máximo um valor. 
C. 0..* 
Indica que o atributo tem no minimo zero (e opcional) e no máximo muitos valores. 
D. * 
Indica que o atributo tem muitos valores e equivale a 0..* (e opcional). 
E. 1..* 
Indica que o atributo tem no minimo um (e obrigatório) e no máximo muitos valores. 
F. 2..6 
Indica que o atributo tem no mínimo dois e no máximo seis valores. 
Modelagem de Sistemas em UML 
Marcio Quirino - 75 
 
Especificação de operações/métodos 
Na descrição do modelo de interações, declaramos que as operações de uma classe são 
identificadas em consequência da identificação de mensagens enviadas de um objeto a outro. No 
detalhamento dessas operações, devemos considerar diversos aspectos: seu nome, lista de parâmetros, 
tipo de cada parâmetro, tipo de retorno. As operações de uma classe correspondem a algum processamento 
realizado por essa classe. Em termos de implementação, uma operação é uma rotina associada a uma 
classe. A sintaxe definida na UML para uma operação é a seguinte: 
[visibilidade] nome([parâmetros]) [: tipo-retorno] [{propriedades}] 
A visibilidade segue a mesma simbologia das visibilidades para atributos. 
O elemento nome corresponde ao nome dado à operação. Se uma operação for pública, ela pode 
ser ativada com a passagem de uma mensagem para o objeto. Se for protegida, ela só é visível para a 
classe e para seus descendentes. Se for privativa, somente objetos da própria classe podem executá-la. 
Os parâmetros de uma operação correspondem às informações que ela recebe quando é executada. 
Normalmente, essas informações são fornecidas pelo objeto remetente da mensagem que pede a execução 
da operação no objeto receptor. Uma operação pode ter zero ou mais parâmetros, que são separados por 
vírgulas. Cada parâmetro da lista tem a seguinte sintaxe: 
[direção] nome-parâmetro: tipo-parâmetro 
O elemento direção serve para definir se o parâmetro pode ou não ser modificado pela operação. O 
modelador pode definir se o parâmetro é de entrada (IN), saída (OUT) ou ambos (INOUT). Se a direção for 
omitida, o valor assumido pelo parâmetro será IN, de entrada. As possíveis direções na definição de um 
parâmetro pela UML são: 
A. IN 
Parâmetro de entrada: não pode ser modificado pela operação. Serve somente como informação 
para o objeto receptor. 
B. OUT 
Parâmetro de saída: pode ser modificado pela operação para fornecer alguma informação ao 
objeto remetente. 
C. INOUT 
Parâmetro de entrada que pode ser modificado. 
O elemento nome-parâmetro corresponde ao nome do parâmetro. Cada parâmetro deve ter um nome 
único dentro da assinatura da operação. 
O elemento tipo-parâmetro corresponde ao tipo do parâmetro e é dependente da linguagem de 
programação. 
O elemento tipo-retorno representa o tipo de dados do valor retornado por uma operação. Esse tipo 
depende da linguagem de programação. 
Especificação de associações 
No modelo de classes de análise, relacionamentos entre objetos são normalmente definidos apenas 
com o uso da associação (ou como um de seus casos especiais, a generalização, a agregação ou a 
composição). As associações são os mecanismos que permitem aos objetos se comunicarem. Elas 
descrevem a conexão entre diferentes classes. Podem ter uma regra que especifica o propósito da 
associação e podem ser unidirecionais ou bidirecionais. Cada ponta da associação também possui um valor 
de multiplicidade que indica como os objetos de um lado se relacionam com os do outro lado. Existem 
diversos tipos de associação, que são modelados desde a etapa de análise: 
A. Unárias, reflexivas ou recursivas (autoassociação) 
Modelagem de Sistemas em UML 
Marcio Quirino - 76 
 
Representam relacionamentos que ocorrem entre objetos da mesma classe. 
B. Binárias 
Representam relacionamentos que ocorrem entre objetos de duas classes. 
C. Ternárias ou n-árias 
Representam relacionamentos que ocorrem entre objetos de mais de duas classes. 
D. Agregação 
Representa relacionamentos todo-parte ondea classe do lado parte pode existir 
independentemente da classe do lado todo. 
E. Composição 
Representa relacionamentos todo-parte onde a existência da classe do lado parte depende da 
existência da classe do lado todo. 
F. Generalização/ especialização 
Representa relacionamentos entre um elemento genérico e um ou mais elementos específicos, 
em que o mais específico possui todas as características do elemento genérico e contém ainda 
particularidades não encontradas no genérico. Essa característica também é chamada de 
Herança. 
G. Classe associativa 
Representa relacionamentos entre classes cuja multiplicidade é muitos para muitos e possuem 
propriedades próprias do relacionamento e não das classes associadas. 
Na etapa de projeto, uma espécie de associação relevante é a dependência, que representa 
relacionamentos entre classes, onde uma é dependente da outra. Qualquer modificação na classe 
independente afetará diretamente objetos da classe dependente. 
 
Exemplo de associação de dependência. Elaborado na ferramenta Astah UML. 
Uma dependência entre classes indica que uma classe depende dos serviços fornecidos pela outra. 
No modelo de análise, é suficiente para o modelador identificar a existência de associações entre classes, 
que é uma forma de dependência. Mas, na fase de especificação do modelo de classes, essa dependência 
precisa ser mais bem definida pelo projetista, uma vez que ela tem influência na forma utilizada para 
implementar as classes envolvidas. Vamos descrever, então, detalhes das possíveis formas de 
dependência. Para isso, considere duas classes, A e B, onde A depende de B. 
Modelagem de Sistemas em UML 
Marcio Quirino - 77 
 
Vários tipos de dependência entre essas duas classes podem existir. Esses tipos são descritos a 
seguir: 
A. Dependência por atributo 
A possui um atributo cujo tipo é B. A dependência por atributo é também chamada de 
dependência estrutural. 
B. Dependência por variável global 
A utiliza uma variável global cujo tipo é B. 
C. Dependência por variável local 
A possui alguma operação cuja implementação utiliza uma variável local de tipo B. 
D. Dependência por parâmetro 
A possui pelo menos uma operação, que possui pelo menos um parâmetro, cujo tipo é B. 
A notação da UML para representar uma dependência no diagrama de classes é de uma seta 
tracejada ligando as classes envolvidas. A seta sai da classe dependente e chega na classe da qual 
depende. Ainda com respeito à notação, as dependências podem ser estereotipadas para indicar o tipo de 
dependência existente entre duas classes. Os estereótipos da UML para rotular relacionamentos de 
dependência são: 
A. <<global>> 
Para variável global 
B. <<local>> 
Para variável local 
C. <<parameter>> 
Para parâmetro 
Transformação de associações em dependências 
No modelo de classes de análise, o modelador especifica uma ou mais associações entre uma classe 
e as demais apresentadas. Na passagem do modelo de classes de análise para o de projeto, o modelador 
deve estudar cada associação para identificar se ela pode ser transformada em dependências. A razão para 
essa transformação é definir melhor o encapsulamento. Quanto menos dependências estruturais houver no 
modelo de classes, maior será a qualidade do projeto (do ponto de vista do encapsulamento e do 
acoplamento das classes constituintes). De um modo geral, as associações que ligam classes de entidade 
permanecem como associações no modelo de projeto. 
Classes persistentes e transientes 
As classes são divididas em: 
A. Persistentes 
Presumem que seus objetos precisam, de alguma maneira, ser preservados mesmo após o 
encerramento da utilização do sistema. 
B. Não persistentes (transientes) 
Terão seus objetos destruídos durante ou na finalização do uso do sistema. Estas são 
diferenciadas por estereótipos <<transient>>. 
Classes de interface 
Uma classe de interface é uma coleção de operações com um nome e é utilizada para especificar 
um tipo de serviço sem especificar como será sua implementação. Essas classes não têm métodos 
concretos, apenas o declaram para que outra classe possa implementá-lo. Elas possibilitam que objetos 
externos ao sistema possam colaborar com uma ou mais classes do sistema. 
Modelagem de Sistemas em UML 
Marcio Quirino - 78 
 
São exemplos as interfaces gráficas, as de interações entre os usuários e as telas do sistema. Há 
um estereótipo para ela (<<interface>>) e sua implementação utiliza uma reta tracejada oriunda da classe 
de implementação, contendo a seta vazia na extremidade que aponta para a classe de interface, como ilustra 
o exemplo a seguir. 
 
Exemplo de classe de interface. Elaborado na ferramenta Astah UML. 
Navegabilidade de associações 
As associações podem ser classificadas em bidirecionais e unidirecionais. Uma associação 
bidirecional indica que há um conhecimento mútuo entre os objetos associados. Ou seja, se um diagrama 
de classes exibe uma associação entre duas classes C1 e C2, então as duas assertivas a seguir são 
verdadeiras: 
• Cada objeto de C1 conhece todos os objetos de C2 aos quais está associado. 
• Cada objeto de C2 conhece todos os objetos de C1 aos quais está associado. 
Graficamente, uma associação unidirecional é representada adicionando-se um sentido à 
associação. A classe para a qual o sentido aponta é aquela cujos objetos não possuem a visibilidade dos 
objetos da outra classe. 
Durante a construção do modelo de classes de análise, associações são normalmente consideradas 
“navegáveis” em ambos os sentidos, ou seja, as associações são bidirecionais. No modelo de classes de 
projeto, o modelador deve refinar a navegabilidade de todas as associações. 
Atenção 
Pode ser que algumas associações precisem permanecer bidirecionais. No entanto, se não houver essa 
necessidade, recomenda-se transformar a associação em unidirecional. Isso porque uma associação bidirecional é 
mais difícil de implementar e de manter do que uma associação unidirecional correspondente. 
Para entender isso, basta ver que o acoplamento entre as classes envolvidas na associação é maior quando 
a navegabilidade é bidirecional, prejudicando a modularização. Portanto, um dos objetivos a alcançar durante o projeto 
é identificar quais navegabilidades são realmente necessárias. 
A definição da navegabilidade se dá em função da troca de mensagens ocorridas nas interações 
entre objetos do sistema. Mais especificamente, devemos analisar os fluxos das mensagens entre objetos 
no diagrama de interações. Dados dois objetos associados, A e B, se há pelo menos uma mensagem de A 
para B em alguma interação, então a associação deve ser navegável de A para B. Da mesma forma, se 
existir pelo menos uma mensagem de B para A, então a associação deve ser navegável de B para A. 
Modelagem de Sistemas em UML 
Marcio Quirino - 79 
 
A definição do sentido da navegabilidade é feita em função das mensagens identificadas na 
modelagem de interação. Em particular, se um objeto do tipo A envia uma mensagem para outro do tipo B, 
então deve haver uma navegabilidade no sentido de A para B no diagrama de classes. 
Mesmo em situações em que a navegabilidade de uma associação precise ser bidirecional, é 
possível implementar apenas um de seus sentidos. 
 
Exemplo de navegabilidade. Elaborado na ferramenta Astah UML. 
3. Empregar os diagramas de estado e de atividades no 
projeto de sistema 
Transição entre estados 
Objetos de um sistema de software orientado a objetos se encontram em um estado particular a cada 
momento. Um objeto muda de estado quando acontece algum evento interno ou externo ao sistema. Quando 
um objeto muda de um estado para outro, diz-se que ele realizou uma transição entre estados. Os estados 
e as transições de estado de um objeto constituem o seu ciclo de vida. 
 
Exemplo de transição de estado. 
No momento de sua transição de um estado para outro, um objeto normalmente realiza determinadasações dentro do sistema. Cada objeto pode passar por um número finito de estados durante a sua vida. 
Quando um objeto transita de um estado para outro, significa que o sistema no qual ele está inserido também 
está mudando de estado. 
Pela análise das transições entre estados dos objetos de um sistema de software, é possível prever 
todas as possíveis operações realizadas, em função de eventos que podem ocorrer. 
O diagrama da UML utilizado para realizar essa análise é o diagrama de estados, também conhecido 
como diagrama de máquina de estado ou de transição de estado (DTE). 
Esse diagrama permite descrever o ciclo de vida de objetos de uma classe, os eventos que causam 
a transição de um estado para outro e a realização de operações resultantes. 
Modelagem de Sistemas em UML 
Marcio Quirino - 80 
 
Atenção 
Assim como diagramas de interação não são construídos para todos os casos de uso, os diagramas de 
transição de estado não devem ser construídos para todas as classes de um sistema, mas apenas para aquelas que 
possuem um número definido de estados conhecidos, e quando o comportamento das classes de objetos é afetado e 
modificado pelos diferentes estados. Nessas classes, um DTE pode ser utilizado para enfatizar os eventos que resultam 
em mudanças de estado. 
Diagrama de transição de estados 
A UML tem um conjunto rico de notações para desenhar um DTE. Os elementos básicos de um 
diagrama de transição de estados são os estados e as transições. Associados a estas últimas estão os 
conceitos de evento, ação e atividade. Um DTE pode também conter elementos menos utilizados, mas às 
vezes úteis, como transições internas, estados aninhados e estados concorrentes. A figura a seguir mostra 
um diagrama de estados para o objeto oferta de disciplina, que pode ter quatro estados: aberta, cancelada, 
lotada e fechada. 
 
Exemplo de diagrama de estados. 
Um estado é uma situação na vida de um objeto durante a qual ele satisfaz alguma condição ou 
realiza alguma atividade. Cada estado de um objeto é normalmente determinado pelos valores dos seus 
atributos e (ou) pelas suas ligações com outros objetos. 
A UML utiliza as seguintes notações para representar os estados: 
A. Estado 
O retângulo com as bordas arredondadas representa um estado. Em sua forma mais simples, o 
retângulo de um estado possui um único compartimento. 
 
B. Estado inicial 
O círculo preenchido indica o estado de um objeto quando ele é criado. Só pode haver um estado 
inicial em um DTE, restrição que serve para definir a partir de que ponto um DTE deve começar 
a ser lido. 
Modelagem de Sistemas em UML 
Marcio Quirino - 81 
 
 
C. Estado final 
Representado por um círculo parcialmente preenchido. Diferentemente do estado inicial, pode 
haver vários estados finais, dependendo dos estados terminais do objeto modelado. 
 
Transições 
Os estados estão associados a outros pelas transições. Uma transição é mostrada como uma linha 
conectando estados, com uma seta apontando do estado origem para o estado destino. Quando ocorre uma 
transição entre estados, diz-se que a transição foi disparada. Note que, em uma transição, o estado 
subsequente pode ser igual ao estado original. Uma transição pode ser rotulada com uma expressão: 
evento (lista-parâmetros) [guarda] / [ação] 
A seguir, vamos entender os elementos envolvidos nas transições entre estados: 
A. Evento 
Um evento é algo que acontece em algum ponto no tempo e que pode modificar o estado de um 
objeto, provocando a transição de estado. Um evento pode conter uma lista de parâmetros que 
são passados para fornecer informações úteis ao objeto receptor de evento. A lista de parâmetros 
é especificada entre parênteses. Na figura exemplo de diagrama de estados, realização de 
inscrição / qtdAlunos := qtdAlunos + 1 é um exemplo de evento. 
Os eventos relevantes a uma classe de objetos podem ser classificados em quatro tipos: 
1. Evento de chamada: recebimento de uma mensagem de outro objeto. Pode-se pensar 
nesse tipo de evento como uma solicitação de serviço de um objeto a outro. 
2. Evento de sinal: recebimento de um sinal. Este é um tipo especial do evento anterior. 
Nesse evento, o objeto recebe um sinal de outro objeto que pode fazê-lo mudar de estado. 
A diferença básica entre o evento de sinal e o evento de chamada é que neste último o 
objeto que envia a mensagem fica esperando a execução dela. No evento de sinal, o 
objeto remetente continua o seu processamento após ter enviado o sinal. O evento de 
sinal raramente é utilizado. 
3. Evento temporal: passagem de um intervalo de tempo predefinido. Em vez de receber 
uma mensagem específica, um objeto pode interpretar a passagem de um certo intervalo 
de tempo como sendo um evento. 
4. Evento de mudança: uma condição que se torna verdadeira. O fato de determinada 
condição se tornar verdadeira também pode ser visto como um evento. 
B. Condição de guarda 
Uma transição pode ter também uma condição de guarda. Uma condição de guarda, ou 
simplesmente guarda, é uma expressão de valor lógico, da mesma forma que a utilizada para 
diagramas de interação. A condição de guarda de uma transição pode ser definida utilizando-se 
Modelagem de Sistemas em UML 
Marcio Quirino - 82 
 
parâmetros passados no evento e atributos e referências a ligações da classe em questão. Além 
disso, uma condição também pode testar o valor de um estado. Uma transição na qual foi definida 
uma condição de guarda é disparada somente se o evento associado ocorre e a condição de 
guarda é verdadeira. Se uma transição não tiver uma condição de guarda, ela sempre será 
disparada quando o evento ocorrer. É importante não confundir a condição de guarda de uma 
transição com um evento de mudança (que também é definido com uma expressão de valor 
lógico). A expressão condicional de uma condição de guarda é sempre apresentada entre 
colchetes, como em [qtdAlunos < capacidadeMáxima] e [else], visto no exemplo de diagrama de 
estados. 
C. Ações 
Ao transitar de um estado para outro, um objeto pode realizar uma ou mais ações. Uma ação é 
uma expressão que pode ser definida em termo dos atributos, das operações ou das associações 
da classe. Os parâmetros do evento também podem ser utilizados. Uma ação pode corresponder 
igualmente à execução de uma operação. A ação é representada na linha da transição e deve 
ser precedida por uma barra inclinada para a direita (símbolo “/”). Note que a ação associada a 
uma transição é executada somente se a transição for disparada. No exemplo de diagrama de 
estados, são exemplos de ações: / qtdAlunos := qtdAlunos + 1 e / qtdAlunos := qtdAlunos – 1. 
D. Atividades 
Semelhante a uma ação, uma atividade é algo que é executado pelo objeto. No entanto, uma 
atividade pode ser interrompida (considera-se que o tempo de execução de uma ação é tão 
insignificante que ela não pode ser interrompida). Por exemplo, enquanto a atividade estiver em 
execução, pode acontecer um evento que a interrompa e cause uma mudança de estado. Outra 
diferença entre ação e atividade é que uma atividade sempre está associada a um estado (ao 
contrário, uma ação está associada a uma transição). 
E. Ponto de junção 
Em algumas situações, o próximo estado de um objeto varia de acordo com o valor da condição 
de guarda. Se o valor da condição de guarda for verdadeiro, o objeto vai para um estado E1; se 
for falso, o objeto vai para outro estado E2. É como se a transição tivesse bifurcações e cada 
transição de saída da bifurcação tivesse uma condição de guarda. Essa situação pode ser 
representada em um DTE por um ponto de junção. Um ponto de junção é desenhado como um 
losango em que chegam uma ou mais transições (provenientes de estados diferentes) e de onde 
partem uma ou mais transições. A cada transição de saída do ponto de junção está associada 
uma condição de guarda. A transição que o objeto segue é aquela para a qual a condição de 
guarda é verdadeira.Note que há um ponto de junção no exemplo de diagrama de estados. 
F. Estados aninhados 
Podem existir estados aninhados dentro de outro estado. Um estado que contém diversos outros 
é dito composto. Todos os estados dentro de um estado composto herdam qualquer transição 
deste último. Isso significa que o uso de estados compostos geralmente torna um DTE mais 
legível. 
G. Estados concorrentes 
Um estado concorrente é um tipo especial de estado composto. Um objeto em um estado 
concorrente pode, na verdade, se encontrar em dois ou mais estados independentes. 
Identificação dos elementos de um diagrama de estados 
Os estados podem ser vistos como uma abstração dos atributos e das associações de um objeto. A 
seguir temos alguns exemplos (os nomes em negrito são possíveis estados). 
• Um professor está licenciado quando não está ministrando curso algum durante o semestre. 
Modelagem de Sistemas em UML 
Marcio Quirino - 83 
 
• Uma oferta de disciplina está aberta quando a capacidade máxima não for alcançada; caso 
contrário, a oferta estará lotada. 
• Um professor está licenciado quando não está ministrando curso algum durante o semestre. 
• Um pedido está atendido quando todos os seus itens estão entregues. 
Um bom ponto de partida para identificar estados de um objeto é analisar os possíveis valores de 
seus atributos e as ligações que ele pode realizar com outros objetos. No entanto, a existência de atributos 
ou ligações não é suficiente para justificar a criação de um DTE para uma classe. O comportamento de 
objetos dessa classe deve depender de tais atributos ou ligações. Em relação a transições, devemos 
identificar os eventos que podem gerá-las. Além disso, é preciso examinar também se há algum fator que 
condicione o disparo da transição. Se existir, esse fator deve ser modelado como uma condição de guarda 
da transição. Já que as transições dependem de eventos para ocorrer, devem-se identificar esses eventos 
primeiramente. 
Outro bom ponto de partida é a descrição dos casos de uso. Os eventos encontrados na descrição 
dos casos de uso são externos ao sistema. Contudo, uma transição pode também ser disparada por um 
evento interno ao sistema. Para identificar os eventos internos relevantes a um objeto, analise os diagramas 
de interação. Esses diagramas contêm mensagens sendo trocadas entre objetos e mensagens, que nada 
mais são do que solicitações de um objeto a outro. Essas solicitações podem ser vistas como eventos. De 
uma forma geral, cada operação com visibilidade pública de uma classe pode ser vista como um evento em 
potencial. 
Dica 
Outra fonte para identificação de eventos relevantes é analisar as regras de negócio definidas para o sistema. 
Normalmente, essas regras possuem informações sobre condições limites que permitem identificar estados e 
transições. 
Construção de diagramas de transições de estados 
Para sistemas bastante simples, a definição dos estados de todos os objetos não é tão trabalhosa. 
No entanto, a quantidade de estados possíveis de todos os objetos de um sistema complexo é grande. Isso 
torna a construção de um DTE para o sistema inteiro uma tarefa bastante complexa. 
Para resolver o problema da explosão exponencial de estados, os diagramas de estados são 
desenhados por classe. 
Geralmente, cada classe é simples o suficiente para que o diagrama de estados correspondente seja 
compreensível. Note, contudo, que essa solução de dividir a modelagem de estados por classes do sistema 
tem a desvantagem de dificultar a visualização do estado do sistema como um todo. Essa desvantagem é 
parcialmente compensada pela construção de diagramas de interação. 
Nem todas as classes de um sistema precisam de um DTE. Um diagrama de estados é desenhado 
somente para classes que exibem um comportamento dinâmico relevante. A relevância do comportamento 
de uma classe depende muito de cada situação em particular. No entanto, objetos cujo histórico precisa ser 
rastreado pelo sistema são típicos para se construir um diagrama de estados. Uma vez selecionadas as 
classes para cada uma das quais se deve construir um diagrama de estados, acompanhe essa sequência 
de passos: 
1. Identifique os estados relevantes para a classe. 
2. Identifique os eventos relevantes aos objetos de uma classe. Para cada evento, identifique 
qual transição que ele ocasiona. 
3. Para cada estado, identifique as transições possíveis quando um evento relevante ocorre. 
4. Para cada estado, identifique os eventos internos e as ações correspondentes relevantes. 
5. Para cada transição, verifique se há fatores que influenciam o seu disparo. Se esse for o caso, 
uma condição de guarda deve ser definida. 
Modelagem de Sistemas em UML 
Marcio Quirino - 84 
 
6. Verifique também se alguma ação deve ser executada quando uma transição é disparada 
(ações). 
7. Para cada condição de guarda e para cada ação, identifique os atributos e as ligações que 
estão envolvidos. Pode ser que esses atributos ou ligações ainda não existam. Nesse caso, 
eles devem ser adicionados ao modelo de classes. 
8. Defina o estado inicial e os eventuais estados finais. 
9. Desenhe o diagrama de estados. Procure posicionar os estados de tal forma que o ciclo de 
vida do objeto possa ser visualizado de cima para baixo e da esquerda para a direita. 
Atenção 
A construção de diagramas de estados de um sistema frequentemente leva à descoberta de novos atributos 
para uma classe, principalmente atributos que servem de abstrações para estados. Além disso, esse processo de 
construção permite identificar novas operações na classe, pois os objetos precisam reagir aos eventos que eles 
recebem, e essas reações são realizadas mediante operações. 
Diagrama de atividades 
Um diagrama de atividade pode ser considerado um tipo especial de diagrama de estados, em que 
são representados os estados de uma atividade em vez dos estados de um objeto. Ao contrário dos 
diagramas de estados, que são orientados a eventos, diagramas de atividade são orientados a fluxos de 
controle. 
Muitos autores dizem que o diagrama de atividades é um fluxograma. Na verdade, o diagrama de 
atividade pode ser visto como uma extensão dos fluxogramas. Além de possuir toda a semântica existente 
em um fluxograma (com notação ligeiramente diferente), o diagrama de atividade possui notação para 
representar ações concorrentes (paralelas), juntamente com a sua sincronização. 
 
Exemplo de diagrama de atividades. Elaborado na ferramenta Astah UML. 
Os elementos de um diagrama de atividade podem ser divididos em dois grupos: 
• Elementos utilizados para representar fluxos de controle sequenciais. 
• Elementos utilizados para representar fluxos de controle paralelos. 
Modelagem de Sistemas em UML 
Marcio Quirino - 85 
 
Veremos mais detalhes de cada tipo a seguir. 
Fluxo de controle sequencial 
Os elementos de um diagrama de atividade usados no controle sequencial são: 
A. Estado ação e Estado atividade 
Um diagrama de atividades exibe os passos de uma computação. Cada estado corresponde a 
um dos passos da computação, em que o sistema está realizando algo. Um estado em um 
diagrama de atividade pode ser um estado atividade ou um estado ação. O primeiro leva um certo 
tempo para ser finalizado. Já o segundo é realizado instantaneamente. 
B. Estados inicial e final e condição de guarda 
Assim como no diagrama de estados, um diagrama de atividade deve ter um estado inicial; ele 
pode ter também vários estados finais e guardas associados a transições. Um diagrama de 
atividade pode não ter estado final, o que significa que o processo ou procedimento sendo 
modelado é cíclico. 
C. Transição de término 
Uma transição de término liga um estado a outro. Essa transição significa o término de um passo 
e o consequente início do outro. Observe que, em vez de ser disparada pela ocorrência de um 
evento (como nos diagramas de estados), essa transição é disparada pelo término de umestado 
de ação. Pode haver uma transição rotulada com a condição de guarda especial [else], o que 
significa que, se todas as demais condições de guarda foram avaliadas como falsas, a transição 
associada a essa guarda especial é disparada. 
D. Pontos de ramificação 
Um ponto de ramificação possui uma única transição de entrada e várias de saída. Para cada 
transição de saída, há uma condição de guarda associada. Quando o fluxo de controle chega a 
um ponto de ramificação, uma e somente uma das condições de guarda deve ser verdadeira. 
E. Ponto de união 
Um ponto de união reúne diversas transições que, direta ou indiretamente, têm um ponto de 
ramificação em comum. 
Fluxo de controle paralelo 
Um diagrama de atividade pode conter fluxos de controle paralelos. Isso significa que é possível 
haver dois ou mais fluxos de controle sendo executados simultaneamente em um diagrama de atividades. 
Para sincronizar dois ou mais fluxos paralelos, as barras de sincronização são utilizadas. Há dois tipos de 
barra de sincronização: 
A. Barra de bifurcação (fork) 
Uma barra de bifurcação recebe uma transição de entrada e cria dois ou mais fluxos de controle 
paralelos. A partir desse momento, cada um dos fluxos criados é executado independentemente 
e em paralelo com os demais. 
 
 
Modelagem de Sistemas em UML 
Marcio Quirino - 86 
 
B. Barra de junção (join) 
Uma barra de junção recebe duas ou mais transições de entrada e une os fluxos de controle em 
um único fluxo. Essa barra tem o objetivo de sincronizar fluxos de controle paralelos criados 
anteriormente no diagrama. As transições de saída da barra de junção somente são disparadas 
quando todas as transições de entrada tiverem sido disparadas. 
 
Raias 
Algumas vezes, as atividades de um processo podem ser distribuídas por vários agentes que o 
executarão. Isso normalmente ocorre em processos de negócio de uma organização, onde as tarefas são 
executadas por pessoas ou departamentos diversos. Nesses casos, o processo pode ser representado em 
um diagrama de atividades com o uso de raias de natação. As raias de natação dividem o diagrama de 
atividades em compartimentos. Cada compartimento contém atividades que são realizadas por um agente 
específico. Além disso, as entidades de cada compartimento podem estar realizando atividades em paralelo. 
 
Exemplo de diagrama de atividades com raias e fork. Elaborado na ferramenta Astah UML. 
Modelagem da lógica de uma operação complexa 
Quando um sistema de software é adequadamente decomposto em seus objetos constituintes e as 
responsabilidades de cada objeto estão bem definidas, a maioria das operações é bastante simples. Essas 
operações não necessitam de modelagem gráfica para serem entendidas. No entanto, em alguns casos, 
notadamente quando uma operação de uma classe de controle implementa uma regra de negócio, pode 
haver a necessidade de se descrever a lógica dessa operação ou da própria regra de negócio. Diagramas 
de atividade também podem ser utilizados com esse objetivo, nisso se assemelhando a um fluxograma. 
 
Modelagem de Sistemas em UML 
Marcio Quirino - 87 
 
4. Empregar os diagramas de componentes e de implantação 
Diagrama de componentes 
O diagrama de componentes apresenta o relacionamento entre os diferentes componentes de um 
sistema de software. Na UML, o termo "componente" refere-se a um módulo que representa sistemas ou 
subsistemas com capacidade de interagir. Para isso, existe uma abordagem de desenvolvimento em torno 
de componentes. 
Nesse diagrama, são representados os diferentes componentes de software necessários para que o 
sistema funcione corretamente. 
Em uma abordagem de programação orientada a objetos, o desenvolvedor usa o diagrama de 
componentes para agrupar classes com base em um objetivo comum. Assim, é função do diagrama de 
componentes documentar como os componentes estão estruturados, organizados e como se relacionam, 
permitindo uma melhor compreensão e facilitando a sua reutilização. Também serve para modelar arquivos 
de processos de negócio, descrevendo as partes que participam dele e suas relações. 
Um diagrama de componentes suporta tanto a especificação dos componentes lógicos, como, por 
exemplo, componentes de negócio, de processo, entre outros. Os principais benefícios na construção desse 
diagrama são: 
• Permitir visualizar a estrutura lógica e física do sistema. 
• Identificar os componentes do sistema e como eles se relacionam. 
• Perceber o comportamento do serviço quanto à interface. 
Componente 
Um componente nada mais é do que uma caixa preta (artefato do sistema) que possui vida autônoma 
e que, somente por meio de suas interfaces, oferece ou requer serviços de outras caixas pretas, sem que 
para isso tenha que conhecer seus conteúdos. Um componente é modelado ao longo do ciclo de vida de 
desenvolvimento, incluindo a concepção da funcionalidade do sistema por meio de casos de uso, definição 
das classes, entre outros. 
Na UML, os componentes também fazem uso de estereótipos. Os mais utilizados são arquivos, 
tabela, banco de dados, executável e biblioteca. Assim sendo, podemos dizer que um componente é 
qualquer arquivo que seja necessário à execução do sistema de informação. 
Os componentes são elementos de alto nível que permitem o agrupamento de várias interfaces sem 
considerá-las um pacote. Cada componente é representado por um retângulo contendo um nome que deve 
traduzir sua função. Se necessário, pode conter um estereótipo. No canto superior do retângulo, há um ícone 
que é também um retângulo com dois menores sobrepostos. 
 
Representação de um componente 
Os componentes também podem ser descritos por meio da visão externa usando símbolos de 
interface colados na caixa do componente. Nesse caso, é interessante anexar uma máquina de estados 
para interfaces, portas e para o próprio componente para permitir uma descrição mais precisa. 
Modelagem de Sistemas em UML 
Marcio Quirino - 88 
 
 
Exemplo de diagrama de componentes. Elaborado na ferramenta Astah UML. 
Quando mais detalhes são necessários para a perfeita especificação de um componente, podemos 
definir uma estrutura interna de partes e conectores, usando o que podemos chamar de visão interna ou 
“caixa branca”. Nessa estrutura, geralmente estão contidos outros componentes. Esses componentes 
podem ser implementados por diferentes tipos de arquivo. No diagrama de componentes, esses tipos podem 
ser destacados por meio de estereótipos, representados por rótulos acima do nome do componente. Nas 
diretrizes da UML definidas pela OMG, um artefato é dito como sendo definido pelo usuário e representa um 
elemento concreto do mundo físico. Ele pode ter propriedades ou operações e pode ser instanciado ou 
associado com outros artefatos. 
Interfaces 
Interfaces são coleções de operações que especificam serviços de um componente. É por meio delas 
que os componentes se comunicam com o mundo externo, seja para oferecer ou receber serviços. Interfaces 
descrevem o comportamento visível externamente e não especificam qualquer estrutura (não podem incluir 
atributos), nem qualquer implementação. 
As interfaces fazem as associações entre os componentes do software. 
As interfaces podem ser chamadas quando requerem ou esperam serviços. Podem ser 
opcionalmente por meio de portas onde é possível haver informações adicionais, tais como requisito de 
desempenho ou políticas que determinem que a interface seja realizada de maneira adequada. 
Conectores 
São utilizados nos diagramas de componentes para incluir interfaces baseadas em restrições e 
notações. Existem dois tipos principais de conectores: 
A. Conector Assembly 
Conecta dois componentes para definir que um deles fornece os serviços que o outro requer. 
 
Modelagem de Sistemas em UML 
Marcio Quirino - 89 
 
B. Conector Delegate 
Indica que um sinal que chega para um componente será transferido para o outro para tratamentoou manipulação. Isso significa que quando colocamos um conector de delegação, estamos 
dizendo que naquela instância do componente o trabalho não será realizado, mas sim por outro 
componente. Esse tipo de conector é bastante usado para modelar decomposição hierárquica 
em serviços. 
Camadas 
A arquitetura de sistemas em camadas permite isolar a camada de apresentação das de regras de 
negócio e de armazenamento de dados. Isso permite aumentar o desempenho do sistema, além de facilitar 
a manutenção, atualização e substituição de componentes. Isso é muito interessante nos sistemas atuais 
que se caracterizam muitas vezes por atender grande número de usuários e áreas de negócio. 
Um exemplo clássico de arquitetura em camadas é o padrão de projeto MVC (Model – View – 
Controller), em que os componentes da aplicação consistem na interface (View) que invoca o controlador 
(Controller), o qual, por sua vez, acessa o banco de dados (Model). 
Essa separação das camadas de software permite a modularização e o reuso dos componentes do 
sistema. Um exemplo é ilustrado na figura a seguir, em uma aplicação hipotética (note que diversas outras 
formas de componentização poderiam ser adotadas, a critério do projetista). 
 
Exemplo de diagrama de componentes usando MVC. Elaborado na ferramenta Astah UML. 
Diagrama de implantação 
O diagrama de implantação especifica um conjunto de artefatos de infraestrutura que podem ser 
utilizados para definir a arquitetura física de execução de sistemas de informação. Ele foca a organização 
da arquitetura sobre a qual o software irá ser implantado e executado em termos de hardware, software 
básico e redes de comunicação, ou seja, quais máquinas (computadores, servidores, switches etc.), quais 
Modelagem de Sistemas em UML 
Marcio Quirino - 90 
 
programas de software básico (sistema operacional, sistema gerenciador de banco de dados, browser) serão 
necessários para suportar o sistema, bem como definir como essas máquinas serão conectadas, com qual 
velocidade de conexão e quais protocolos de comunicação são utilizados. 
O diagrama de implantação descreve a implementação física de informações geradas pelo programa 
de software em componentes de hardware. Na UML, um diagrama de implantação representa a estrutura 
física do sistema em si, o que, assim como o diagrama de componentes, pode ser feito de várias formas. 
 
Caixas tridimensionais representam os elementos básicos de software básico ou hardware, ou nós 
no sistema. 
 
As linhas de nós a nós indicam relacionamentos. 
 
As formas menores contidas dentro das caixas tridimensionais representam os artefatos de software 
contidos nos nós. 
Nós do diagrama de implantação 
São definidos de maneira aninhada e representam dispositivos de hardware e ambientes de 
execução de software. São os elementos mais básicos do diagrama de implantação; podem representar 
computadores pessoais e/ou servidores de bancos de dados, de aplicação ou de internet, sistemas 
operacionais, browser, sistemas gerenciadores de bancos de dados etc. Eles podem ser compostos de 
outros nós, sendo comum encontrar um nó que representa um item de hardware contendo outros nós que 
representam ambientes de execução. 
O nó representa um elemento físico capaz de oferecer recursos computacionais e, geralmente, 
possui pelo menos memória e processador. Também serve para representar topologias de rede por meio 
de ligações entre instâncias de nós. Podem ser conectados para representar uma topologia de redes usando 
caminhos de comunicação que podem ser definidos como servidor de aplicação, servidor web, entre outros. 
Atenção 
A elaboração do diagrama de implantação depende do porte do sistema a ser desenvolvido. Por exemplo, não 
faz muito sentido para um sistema que será executado dentro de um único computador. Em outros casos, porém, ele 
pode ser muito útil, principalmente para ser utilizado como meio de comunicação entre a equipe de desenvolvimento e 
de infraestrutura, pois servirá de base para a equipe de infraestrutura instalar e configurar servidores, gerenciadores 
de bancos de dados, entre outros. 
A figura a seguir ilustra um diagrama de implantação. 
Modelagem de Sistemas em UML 
Marcio Quirino - 91 
 
 
Exemplo de diagrama de implantação. Elaborado na ferramenta Astah UML. 
Podem ser usados estereótipos que são, como em outros diagramas da UML, uma maneira gráfica 
ou textual de diferenciar componentes dos diagramas (classes, casos de uso, associações etc.). Podem ser 
representados por meio de textos escritos entre dois sinais de maior e menor quando não modificam o 
modelo original do componente (<<>>) e, também, por meio de um novo componente visual, porém 
padronizado pela UML, como os nós que podem conter os seguintes estereótipos: <<device>>, 
<<artifact>>, <<execution environment>>. 
A. Device 
Representa um dispositivo computacional com capacidade de processamento em que artefatos 
podem ser implantados para execução. Os dispositivos podem ser complexos, isto é, podem ser 
constituídos por outros dispositivos. Para representar um device, utilizamos o estereótipo 
<<device>>. 
B. Artefatos 
Representam objetos concretos do mundo físico, usados e/ou resultantes de um processo de 
desenvolvimento. São exemplos de artefatos: programas fontes e executáveis, uma tabela de 
bancos de dados, scripts, um documento do sistema, uma mensagem de correio eletrônico etc. 
Para representar um artefato, é utilizado o estereótipo <<artifact>>. Artefatos são sempre 
implantados em nós. 
C. Ambiente de execução 
Representam uma subclasse de um nó. São exemplos de ambiente de execução: sistemas 
operacionais, sistemas gerenciadores de bancos de dados etc. Para representar um ambiente de 
execução utilizamos o estereótipo <<execution environment>>. 
D. Associação 
Os nós são conectados por meio de caminhos de comunicação para criar sistemas em rede, ou 
seja, possuem ligações entre si de forma que possam se comunicar e trocar informações. Essas 
ligações são chamadas de associações e são representadas por segmentos de reta ligando um 
Modelagem de Sistemas em UML 
Marcio Quirino - 92 
 
nó a outro. Uma associação pode conter estereótipos utilizados para determinar, por exemplo, o 
tipo de protocolo de comunicação usado entre os nós. 
Considerações finais 
Neste conteúdo, aprendemos a desenvolver diagramas usualmente empregados na fase de projeto 
de software. No primeiro módulo, vimos os diagramas de interação (sequência e comunicação). No diagrama 
de sequência, tivemos uma visão geral e sua relação com diagrama de classes e especificações de casos 
de uso. Também entendemos quais são os elementos que formam esse diagrama (básicos, decisões, 
repetições, criação e destruição de objetos). Falamos sobre as mensagens síncronas e assíncronas. Sobre 
o diagrama de comunicação, aprendemos sobre que elementos compõem esse diagrama e como ele pode 
ser utilizado em conjunto com o diagrama de sequência. 
No módulo seguinte, tratamos do diagrama de classes de projeto. Esse é um dos diagramas mais 
importantes da fase de modelagem do software, desde a fase de análise, passando pelo projeto até a 
implementação. Tratamos das responsabilidades das classes, do papel dos relacionamentos, do 
detalhamento de métodos e dos atributos. Aprendemos sobre navegabilidade, classes de interface, de 
controle e pacotes. 
Em seguida, falamos sobre diagrama de atividades e diagrama de estados. Em ambos, tratamos dos 
conceitos básicos e de suas respectivas finalidades. Cuidamos também de falar sobre seus elementos e o 
passo a passo para sua construção. Por fim, aprendemos também outros dois diagramas mais físicos, mas 
não menos importantes, que são o diagrama de componentes e o de implantação. Em ambos, vimos 
finalidades e conceitos. 
Referências 
BEZERRA, E. Princípios de análise e projeto de sistemas com UML. Rio de Janeiro, Brasil: Campus, 
2015. 
OMG. Unified ModelingLanguage - Versão 2.5. OBJECT MANAGEMENT GROUP, 2015. 
Explore+ 
Para aprofundar mais seu conhecimento sobre o conteúdo apresentado: 
VEJA 
O canal do YOUTUBE Estudo na Web, que tem como principal objetivo desmistificar e tornar mais 
fácil o aprendizado com exemplos simples e exercícios práticos, diversos materiais sobre UML, inclusive 
alguns específicos sobre os diagramas apresentados aqui. 
LEIA 
O artigo Os principais diagramas da UML – Resumo rápido apresentado pela revista Profissionais TI, 
da organização de mesmo nome, que traz um conjunto de diversas ferramentas que podem ser utilizadas 
para modelagem dos diagramas apresentados neste conteúdo. 
 
Modelagem de Sistemas em UML 
Marcio Quirino - 93 
 
Estudo de Caso de Modelagem de Sistemas em UML 
Descrição 
A modelagem de um projeto de software de acordo com o paradigma orientado a objetos, usando a 
linguagem UML (Unified Modeling Language). 
Propósito 
Aplicar os conceitos relacionados com a modelagem de um projeto de software, empregando os 
modelos da UML em um estudo de caso, é importante para a formação do profissional de Computação. 
Preparação 
Antes de iniciar o conteúdo deste tema, instale em seu computador um programa que lhe permita 
elaborar modelos, sob a forma de diagramas da UML (Linguagem Unificada de Modelagem). Nossa 
sugestão inicial é o Astah Free Student License, e será necessário usar seu e-mail institucional para ativar 
a licença. Preencha os dados do formulário, envie e aguarde a liberação de sua licença em seu e-mail 
institucional. Ao receber a licença, siga as instruções do e-mail e instale o produto em seu computador. Após 
a instalação, utilize o Astah para acessar os arquivos utilizados neste tema: estudoCasoPousada_analise e 
estudoCasoPousada_projeto. 
Sugestões de links adicionais de programas livres para modelagem de sistemas em UML (UML tools) 
podem ser encontradas em buscas na Internet. 
Introdução 
O presente tema trata do desenvolvimento de um estudo de caso que inclui as principais atividades 
de modelagem exigidas durante um processo de desenvolvimento de software. 
Na etapa de levantamento de requisitos, são identificados os serviços a serem fornecidos pelo 
sistema, bem como as restrições operacionais, ou seja, os requisitos funcionais e não funcionais, 
respectivamente. 
A etapa de análise inclui a geração do modelo de casos de uso a partir dos requisitos funcionais, 
sendo esse modelo composto de diagramas de casos de uso, artefatos gráficos, complementados por 
descrições de casos de uso, artefatos textuais. Ainda na etapa de análise, são gerados: o modelo de classes, 
composto de diagramas de classes, que representam as estruturas estáticas dos objetos; o modelo de 
atividades, composto de diagramas de atividades, que descrevem os aspectos dinâmicos do sistema 
exibindo passos de uma computação, sendo esses orientados a fluxos de controle; e o modelo de estados, 
composto de diagramas de estados, que também descrevem os aspectos dinâmicos do sistema, modelando 
o comportamento de objetos de uma classe na forma de uma máquina de estados, sendo esses orientados 
a eventos. 
Na etapa de projeto, podemos destacar: a geração do modelo de interação, que inclui os diagramas 
de sequência e/ou diagramas de comunicação, usados para modelar a interação entre os objetos das 
diversas classes identificadas nas fases de análise e projeto; o refinamento do modelo de classes, com os 
aspectos estáticos e estruturais do sistema, ou seja, os diagramas de classes de análise; a montagem do 
modelo de implementação, composto de diagramas de componentes; e a elaboração do modelo de 
implantação, composto de diagramas de implantação. 
 
Modelagem de Sistemas em UML 
Marcio Quirino - 94 
 
1. Produzir o documento de requisitos para um estudo de 
caso de modelagem de sistemas 
As atividades típicas que compõem o processo de desenvolvimento de software estão ilustradas a 
seguir, que mostra as atividades mais comuns dos processos de desenvolvimento de software, ou seja, 
qualquer processo deverá possuir as referidas atividades. 
 
Atividades típicas de um processo de desenvolvimento de software. 
UML (Unified Modeling Language) 
Considerando que o padrão atual da indústria de software é o paradigma orientado a objetos, a UML, 
ou seja, Linguagem de Modelagem Unificada, permite a geração de diversos documentos, de acordo com o 
referido paradigma, durante o processo de desenvolvimento de software, sendo esses documentos 
denominados artefatos de software, que podem ser textuais ou gráficos. 
Os artefatos gráficos produzidos em um sistema orientado a objetos são definidos através dos 
diagramas da UML. Como mostra a imagem a seguir, os diagramas da UML são classificados em diagramas 
de estruturas e de comportamentos, também conhecidos como diagramas estáticos e dinâmicos, 
respectivamente. 
 
Diagramas da UML. 
Segue, no quadro abaixo, breve descrição dos diagramas: 
Diagrama Especificação 
Diagrama de perfil 
Permite a definição de tipos padronizados, como estereótipos, restrições e valores rotulados. O 
foco é a adequação aos modelos UML para diferentes plataformas, por exemplo. 
Diagrama de classes 
Descreve para cada classe suas propriedades (atributos e métodos) e seus relacionamentos com 
as demais classes. Classe é a base estrutural dos sistemas orientados a objetos. 
Diagrama de estruturas compostas 
Possibilita a descrição de colaborações internas de classes, interfaces ou componentes visando a 
especificação de uma funcionalidade. 
Diagrama de componentes Apresenta a estrutura e conexões entre os componentes de um sistema. 
Modelagem de Sistemas em UML 
Marcio Quirino - 95 
 
Diagrama Especificação 
Diagrama de implantação 
Especifica o ambiente computacional sobre o qual o sistema vai operar, além de distribuir os 
artefatos (pacotes, classes e componentes) nos nós (elementos computacionais). 
Diagrama de objetos É um diagrama de classes instanciado, ou seja, mostra exemplos de instâncias. 
Diagrama de pacotes 
Descreve estruturas hierárquicas que englobam outros elementos, como outros pacotes, casos de 
uso, classes. Usado para modularizar logicamente um sistema em suas partes relevantes 
(subsistemas). 
Diagrama de atividades 
Descreve o comportamento de procedimentos, processos de negócios e fluxos de trabalho, 
suportando processamento sequencial e paralelo. 
Diagrama de casos de uso 
Mostra como os usuários (atores) interagem com o sistema, do ponto de vista externo, 
evidenciando as funcionalidades com as quais interagem. 
Diagrama de estados 
Mostra como os eventos que afetam o sistema alteram o estado dos objetos ao longo de seus 
ciclos de vida. 
Diagrama de sequência Mostra como os objetos interagem, evidenciando o tempo (a sequência das interações). 
Diagrama de comunicação Mostra como os objetos interagem, evidenciando o tempo das conexões entre eles. 
Diagrama de visão geral de 
interação 
Um mix de diagrama de sequência e de atividades. Uma especialização do diagrama de atividades 
para interações. 
Diagrama de tempo 
Diagrama de interação, com foco nas restrições de temporização, por exemplo, evidenciar as 
mudanças no estado de um objeto ao longo do tempo. 
Tabela: Alberto Tavares da Silva. 
Dica 
Nem todos os 14 diagramas serão utilizados no estudo de caso. Na verdade, alguns raramente são usados na 
prática. 
Processo de desenvolvimento de software 
Levantamento de Requisitos, Análise, Projeto, Implementação, Testes e Implantação. 
Levantamento de requisitos 
Considerando as atividades genéricas que compõem o processo de desenvolvimento de software, a 
atividade de levantamento de requisitos, também denominada elicitação de requisitos, corresponde à etapa 
de compreensão do problema por parte do engenheiro de software ou equipe. 
O principal objetivo do levantamento de requisitos é que usuários e equipe de desenvolvimento 
tenham a mesma visão do problema a ser resolvido.Nessa etapa, os desenvolvedores, juntamente com os clientes, tentam levantar e definir as 
necessidades dos futuros usuários do sistema a ser desenvolvido, sendo essas necessidades denominadas 
requisitos. Um requisito corresponde a uma descrição de um serviço a ser fornecido pelo sistema ou uma 
restrição operacional. 
Como podemos elicitar os requisitos? 
O engenheiro de software poderá utilizar determinadas técnicas: 
• Leitura de obras de referência e livros-texto 
• Observação do ambiente do usuário 
• Realização de entrevistas com os usuários 
• Entrevistas com especialistas do domínio 
Modelagem de Sistemas em UML 
Marcio Quirino - 96 
 
• Reutilização de análises anteriores 
• Comparação com sistemas preexistentes do mesmo domínio do negócio 
Minimundo do estudo de caso 
Para fins didáticos, escolhemos um estudo de caso simples o suficiente para entendimento do 
problema, porém, necessariamente completo para ilustrar todas as atividades do processo de análise e 
projeto do sistema, empregando os diagramas da UML mais frequentemente usados na prática. 
Aplicadas as técnicas de elicitação de requisitos, a equipe de engenheiros de software definiu a 
descrição do minimundo do estudo de caso a ser desenvolvido conforme a seguir. 
Descrição do Minimundo 
A empresa fictícia Pousadas Férias no Nordeste possui uma rede de pousadas e pretende contratar 
um sistema de software para a gestão de reservas de quartos online, incluindo a precificação das diárias e 
produtos disponíveis para consumo, bem como o pagamento dessas diárias e produtos consumidos pelos 
respectivos clientes. 
Uma reserva pode ser realizada de forma online ou por meio de contato telefônico com um 
funcionário da recepção da pousada. O cadastro do cliente é obrigatório para confirmação da reserva. O 
cancelamento da reserva pode ser realizado online ou por telefone. 
Os produtos disponíveis incluem bebidas, lanches e refeições diversas, sendo os consumos 
realizados pelos clientes registrados por funcionários atendentes de bar ou de cozinha da pousada. 
Os funcionários do setor administrativo da empresa mantêm atualizados os registros necessários à 
realização de reservas, tais como funcionários, pousadas, quartos e outros, bem como a precificação de 
diárias e produtos. 
A seguir, veremos os requisitos estabelecidos pela equipe de engenheiros de software. 
Requisitos funcionais (RF) 
A tabela a seguir lista os requisitos funcionais estabelecidos pela equipe de engenheiros de software. 
RF 1 
O sistema deve permitir que os clientes realizem reservas de quartos online ou por contato telefônico com a recepção da 
pousada. 
RF 2 
O sistema deve permitir que um cliente realize uma reserva somente se estiver cadastrado, podendo o referido cadastro 
ocorrer de forma online ou por contato telefônico. 
RF 3 
Quando o cliente realiza uma reserva online, o sistema realiza a cobrança de uma diária no cartão de crédito para 
confirmação da reserva. 
RF 4 
Quando o cliente realiza uma reserva por meio telefônico, o sistema exige uma pré-reserva para confirmação da reserva. 
Nesse caso, a recepção realiza a validação (inclui o registro do valor depositado) ou cancelamento da pré-reserva. 
RF 5 O cliente pode cancelar uma reserva. 
RF 6 O sistema deve permitir a precificação das diárias dos quartos das pousadas pelo setor administrativo da empresa. 
RF 7 
O sistema deve permitir a precificação dos produtos disponíveis para consumo pelos clientes pelo setor administrativo da 
empresa. 
RF 8 
O sistema deve interagir com um sistema terceirizado (operadora de cartão crédito) para pagamentos com cartão de 
crédito. 
RF 9 
Os consumos de produtos por parte dos clientes devem ser registrados pelos atendentes de bares e cozinha das 
pousadas. 
Modelagem de Sistemas em UML 
Marcio Quirino - 97 
 
RF 10 
Os funcionários do setor administrativo da empresa mantêm atualizados os registros necessários à realização de 
reservas, ou seja, funcionários, pousadas, quartos. 
RF 11 A quitação da reserva, realizada pela recepção da pousada e somente com cartão de crédito, deve ocorrer no check-out. 
RF 12 O setor administrativo gera relatórios periódicos das ocupações dos quartos das pousadas. 
RF 13 O gerente da pousada gera relatórios periódicos de ocupação dos quartos da pousada. 
Requisitos funcionais do estudo de caso. Tabela: Alberto Tavares da Silva. 
Requisitos não funcionais (RNF) 
Os requisitos não funcionais estão associados às restrições impostas ao sistema que podem ser 
categorizados como de produto, organizacionais e externos. A tabela a seguir lista os requisitos não 
funcionais definidos pela equipe de engenheiros de software. 
RNF 1 O sistema deve utilizar tecnologia WEB. 
RNF 2 O SGBD adotado é o MySQL. 
RNF 3 A linguagem de programação para desenvolvimento adotada é Java, sendo a IDE Eclipse.. 
RNF 4 O framework para o mapeamento objeto-relacional é o Hibernate. 
RNF 5 O padrão de arquitetura adotado é o MVC (model-view-controller). 
RNF 6 O processo de desenvolvimento de software adotado é o Scrum. 
RNF 7 O prazo estimado do projeto de software é de 04 (quatro) meses. 
RNF 8 
Atributo de qualidade crítico a ser considerado na seleção de um provedor de serviço na nuvem e de internet: 
confiabilidade. 
Requisitos não funcionais do estudo de caso. Tabela: Alberto Tavares da Silva. 
Requisitos de domínio 
Os requisitos de domínio, também conhecidos por regras de negócio (RN), originam-se do domínio 
de aplicação do sistema, em vez das necessidades específicas dos usuários do sistema. 
A tabela a seguir lista as regras de negócio definidas pela equipe de engenheiros de software. 
RN 1 Uma reserva é realizada por um único cliente. 
RN 2 Uma reserva pode incluir no mínimo 01 (um) quarto e no máximo 03 (três) quartos disponíveis no momento da reserva. 
RN 3 
A pré-reserva exigida na reserva por meio telefônico impõe um depósito bancário, por parte do cliente, correspondente a 
40% do total da reserva na conta da respectiva Pousada. Nesse caso, a validade ou cancelamento da reserva é realizada 
pela recepção. O cliente tem o prazo de 24h para envio do recibo de depósito via WhatsApp ou SMS. 
RN 4 O cancelamento de uma reserva pode ser realizado até 24h antes da data de check-in estabelecida na reserva. 
RN 5 No caso de cancelamento da reserva realizada por telefone, o valor da pré-reserva é estornado ao cliente. 
RN 6 No caso de cancelamento por período menor que 24h, ou não comparecimento, será cobrada uma diária. 
RN 7 Uma reserva realizada online somente é confirmada após a autorização da operadora de cartão (sistema terceirizado). 
RN 8 Os consumos de produtos por parte dos clientes são pagos no momento do check-out, com o valor restante das diárias. 
RN 9 O check-in é realizado a partir de 15h e o check-out, até 12h. 
javascript:void(0)
Modelagem de Sistemas em UML 
Marcio Quirino - 98 
 
RN 10 O sistema deve permitir o pagamento da reserva online e no check-out somente com cartão de crédito. 
Regras de negócio do estudo de caso. Tabela: Alberto Tavares da Silva. 
Vimos neste módulo que a etapa de levantamento de requisitos, ou elicitação de requisitos, permite 
o entendimento do problema por parte da equipe de engenheiros de software. 
Na etapa de levantamento de requisitos, é gerado o documento de requisitos categorizado em 
requisitos funcionais, não funcionais e de domínio, as denominadas regras de negócio. 
A identificação dos requisitos é realizada por meio de técnicas, tais como leitura de obras de 
referência e livros-texto, observação do ambiente do usuário, realização de entrevistas com os usuários, 
entrevistas com especialistas do domínio e outras. 
O documento de requisitos inclui os requisitos funcionais que correspondem aos serviços a serem 
fornecidos pelo sistema, os requisitos não funcionais, às restrições operacionais e os requisitos de domínio, 
que se originam do domínio de aplicação do sistema. 
2. Construir o modelode casos de uso para um estudo de 
caso de modelagem de sistemas em UML 
Modelo de casos de uso 
Vejamos agora a etapa de análise do processo de desenvolvimento de software genérico. 
 
Etapa: Análise. 
Nessa etapa, os engenheiros de software realizam um estudo detalhado dos requisitos levantados 
na etapa anterior, construindo modelos para representar o sistema a ser desenvolvido. Usualmente, a 
primeira abstração é a funcional, pois permite aos engenheiros de software moldar o sistema de acordo com 
as necessidades dos usuários. 
A referida abstração funcional é representada pelo modelo de casos de uso, que direciona diversas 
das atividades posteriores do ciclo de vida do sistema de software. 
O modelo de casos de uso é composto por um ou mais diagramas de casos de uso, artefatos gráficos, 
e pelas descrições de casos de usos, artefatos textuais. Os componentes do referido diagrama incluem 
casos de uso, atores, ou seja, elementos externos que interagem com o sistema, e relacionamentos entre 
os elementos anteriores. 
Estudo de caso – Diagrama de casos de uso 
Vejamos agora a construção do diagrama de casos de uso com base nos requisitos funcionais 
listados no módulo anterior. 
A. RF 1 
Inicialmente, vamos analisar o RF 1 a seguir: 
RF 1: O sistema deve permitir que os clientes realizem reservas de quartos online ou por contato 
telefônico com a recepção da pousada. 
Podemos identificar no texto um caso de uso denominado “Registrar Reserva”, interagindo com 
dois atores: Cliente ou Recepção. A referida abstração é representada a seguir. 
Modelagem de Sistemas em UML 
Marcio Quirino - 99 
 
 
Diagrama de caso de uso RF 1 gerado pela ferramenta Astah. 
O relacionamento entre ambos os atores é denominado de generalização, ou seja, o ator 
Recepção pode realizar também o caso de uso do ator Cliente. 
B. RF 3 
Vamos analisar o RF 3 a seguir: 
RF 3: Quando o cliente realiza uma reserva online, o sistema realiza a cobrança de uma diária 
no cartão de crédito para confirmação da reserva. 
Podemos identificar uma funcionalidade denominada “Registrar Cobrança de Diária”, interagindo 
com o caso de uso “Registrar Reserva” e com o ator Operadora Cartão Crédito. A abstração 
proposta está representada na imagem a seguir. Nesse caso, fizemos uso da abstração 
denominada “extend” que representa um relacionamento entre casos de uso, ou seja, o caso de 
uso “Registrar Reserva” (estendido) pode, na forma de um desvio condicional, incluir o 
comportamento representado pelo caso de uso “Registrar Cobrança de Diária” (extensor). 
 
Diagrama de casos de uso RF 3 gerado pela ferramenta Astah. 
C. RF 11 
Vamos analisar o RF 11 a seguir: 
RF 11: A quitação da reserva, realizada pela recepção da pousada e somente com cartão de 
crédito, deve ocorrer no check-out. 
Podemos identificar uma funcionalidade denominada “Realizar Check-out” e uma segunda, 
“Quitar Reserva”. A primeira interage com o ator Recepção. A abstração proposta está 
representada a seguir. 
Modelagem de Sistemas em UML 
Marcio Quirino - 100 
 
 
Diagrama de casos de uso RF 11 gerado pela ferramenta Astah. 
Nesse caso, fizemos uso da abstração denominada “include” que representa um relacionamento 
entre casos de uso, ou seja, o caso de uso “Realizar Check-out” (inclusor) utiliza, na forma de um desvio 
incondicional, o comportamento representado pelo caso de uso “Quitar Reserva” (incluído). Por sua vez, o 
caso de uso “Quitar Reserva” interage com o ator Operadora de Cartão de Crédito. 
Diagrama de Casos de Uso aplicando todos RF 
Aplicando as devidas abstrações para todos os requisitos funcionais listados na tabela de requisitos 
funcionais vista no módulo 1, propomos o diagrama de casos de uso, ilustrado a seguir, para nosso estudo 
de caso. 
 
Diagrama de casos de uso do estudo de caso gerado pela ferramenta Astah. 
Em sistemas complexos, representar todos os casos de uso do sistema em um único diagrama de 
casos de uso talvez o torne um tanto ilegível. Uma possibilidade é realizar o agrupamento de casos de uso 
em pacotes, podendo esse agrupamento lógico ocorrer por ator, por ciclo de desenvolvimento ou por área 
específica da empresa. 
Veja a seguir uma proposta de empacotamento por atores. 
Modelagem de Sistemas em UML 
Marcio Quirino - 101 
 
 
Diagrama de pacotes de casos de uso do estudo de caso gerado pela ferramenta Astah. 
Atenção 
Importante destacar que um dos desafios iniciais do engenheiro de software é a modularização da solução do 
problema, sendo que esse empacotamento permite visualizar os principais módulos que poderão compor a referida 
modularização. 
Também vale ressaltar que não existe uma solução única para o modelo de casos de uso e tampouco 
para o empacotamento, sendo muito provável que diferentes equipes produzam modelos diferentes para o 
mesmo minimundo. 
Estudo de caso – descrições de casos de uso 
Lembramos que cada caso de uso é definido por meio de uma descrição textual das interações que 
ocorrem entre ator(es) e o sistema, não sendo a forma dessa descrição definida pela UML. 
De acordo com Bezerra (2014), existem dois tipos de casos de uso: 
A. Primários 
Representam os objetivos dos atores e modelam os processos que estão sendo automatizados. 
B. Secundários 
Não agregam valor direto aos papéis dos atores, sendo, entretanto, necessários para o 
funcionamento do sistema. 
Vejamos um exemplo a partir de um caso de uso que apresente um objetivo bem específico para os 
atores Cliente e Recepção: “Registrar Reserva”. Nesse caso, temos dois cenários: um principal, que 
considera a reserva online realizada pelo cliente, e um alternativo, que considera a reserva realizada por 
telefone e registrada por um funcionário da recepção. 
 
Modelagem de Sistemas em UML 
Marcio Quirino - 102 
 
Caso de uso: Registrar Reserva. 
Atores: Cliente ou Recepção (funcionário) 
Pré-condição: Cliente ou Recepção deve estar identificado pelo sistema. 
Fluxo Principal: 
1. O sistema busca as pousadas disponíveis. 
2. O Cliente/Recepção informa a pousada destino e as datas de check-in e check-out. 
3. O sistema busca quartos disponíveis no período informado. 
4. O sistema lista os quartos disponíveis para o período informado por tipo, incluindo a quantidade máxima de pessoas a 
serem acomodadas. 
5. O Cliente/Recepção seleciona os quartos e informa a quantidade de pessoas por quarto selecionado, sendo no mínimo 
1 quarto e no máximo 3 (de acordo com RN 2). 
6. O sistema exige os dados de login do cliente para efetivação da reserva online. 
7. O cliente informa os dados para login no sistema. 
8. O sistema valida o cliente. 
9. O sistema calcula o valor total da reserva. 
10. O sistema gera um resumo da reserva incluindo a pousada, período, quantidade de pessoas acomodadas por quarto 
selecionado e valor a pagar. 
11. O Cliente/Recepção confirma a reserva. 
12. Obter confirmação de pagamento parcial de reserva online por meio de cartão de crédito <<extend Registrar Cobrança 
de Diária>>. 
13. O sistema registra a reserva e gera o código de reserva. 
Fluxo Alternativo (6): reserva realizada por contato telefônico (recepção da pousada) 
a. O sistema exige dados de login do funcionário da recepção para efetivação da reserva por contato telefônico. 
b. O funcionário da recepção informa dados para login. 
c. O funcionário da recepção informa o CPF do cliente. 
d. O sistema valida o cliente. 
e. Prosseguir no passo 9. 
Fluxo Alternativo (10): reserva realizada por contato telefônico (recepção da pousada) 
a. O sistema gera um resumo da reserva incluindo a pousada, período, quantidade de pessoas acomodadas por quarto 
selecionado, o valor total a pagar e o valor para depósito da pré-reserva pelo cliente (de acordo com RN 3). 
b. Prosseguir passo 11. 
Fluxo Alternativo (12): reserva realizada por contato telefônico (recepção da pousada) 
a. Prosseguir no passo 13. 
Fluxo de exceção (12): cartão de crédito não validadopela operadora. 
a. Se o cliente tiver outro cartão, repetir o passo 12, senão encerrar caso de uso. 
Pós-condição: o código da reserva deve ser informado ao cliente. 
Regras de negócio: RN 2 e RN 3. 
Tabela: Alberto Tavares da Silva. 
CRUD 
CRUD (acrónimo do inglês Create, Read, Update and Delete) são as quatro operações básicas (criação, 
consulta, atualização e destruição de dados) utilizadas em bases de dados relacionais (RDBMS) fornecidas aos 
utilizadores do sistema. 
Vejamos agora uma descrição de um caso de uso considerado secundário, cuja realização inclui as 
operações de CRUD. 
Caso de uso: Manter Pousada. 
Atores: Setor administrativo (funcionário). 
Pré-condição: O funcionário do setor administrativo deve estar identificado pelo sistema. 
Modelagem de Sistemas em UML 
Marcio Quirino - 103 
 
Fluxo Principal: 
1. O setor administrativo seleciona a operação: 
o Opção Inserir. 
o Opção Consultar. 
o Opção Alterar. 
o Opção Excluir. 
Fluxo Alternativo (1.1): Inserir 
a. O sistema busca os funcionários na função de gerente. 
b. O setor administrativo informa: CNPJ, nome, nome fantasia, endereço completo, telefone, e-mail de contato e seleciona 
o gerente da pousada. 
c. O sistema valida dados da nova pousada. 
d. O setor administrativo confirma o cadastro. 
O sistema registra a pousada com status de “ativa”. 
Fluxo Alternativo (1.2): Consultar 
a. O sistema busca as pousadas cadastradas. 
b. O setor administrativo seleciona a pousada. 
O sistema busca os dados da pousada, incluindo o gerente dela. 
Fluxo Alternativo (1.3): Alterar 
a. O setor administrativo seleciona a pousada. 
b. O sistema busca os dados da pousada, incluindo o gerente da pousada. 
c. O sistema busca os funcionários na função de gerente. 
d. O setor administrativo edita: CNPJ, nome, nome fantasia, endereço completo, telefone, e-mail de contato, seleciona novo 
gerente da pousada e/ou altera o status (ativa/inativa). 
e. O setor administrativo confirma a atualização. 
O sistema atualiza registro da pousada. 
Fluxo Alternativo (1.4): Excluir 
a. O sistema busca as pousadas cadastradas. 
b. O setor administrativo seleciona a pousada. 
c. O sistema busca os dados da pousada, incluindo o gerente da pousada. 
d. O setor administrativo confirma exclusão. 
e. O setor administrativo informa seus dados de login para confirmar a exclusão, pois serão excluídos todos os dados 
associados, tais como reservas, consumos, funcionários alocados. 
O sistema realiza a exclusão da pousada. 
Tabela: Alberto Tavares da Silva. 
Vimos neste módulo a geração do modelo de casos de uso de um estudo de caso, atividade da etapa 
de análise de um processo de desenvolvimento de software genérico, a partir de um documento de requisitos 
gerado na etapa levantamento de requisitos do referido processo. 
3. Construir os modelos de análise para um estudo de caso 
de modelagem de sistemas em UML 
Modelo de classes 
Após termos gerado o modelo de casos de uso com as funcionalidades a serem disponibilizadas aos 
usuários, e ainda na etapa de análise do processo de desenvolvimento de software genérico, vamos à 
construção do modelo de classes. 
As referidas funcionalidades necessitam, internamente, que objetos colaborem mutuamente para 
produção dos resultados esperados pelos respectivos usuários; essa colaboração possui um aspecto 
Modelagem de Sistemas em UML 
Marcio Quirino - 104 
 
estrutural estático que permite compreender como o sistema está estruturado internamente para que as 
citadas funcionalidades externamente visíveis sejam produzidas. 
A abstração que permite identificar o aspecto estrutural e estático dos objetos que compõem a 
solução do problema é a modelagem de classes. 
Um modelo de classes é composto por um ou mais diagramas de classes, mostrando a existência 
das classes e os seus relacionamentos numa visão lógica e estática do sistema. 
Atenção 
O modelo de classes evolui durante o processo de desenvolvimento. Portanto, o modelo de classes na etapa 
de análise não deve representar detalhes da solução do problema, limitando-se à identificação das classes, atributos 
e associações. 
Classes se relacionam com outras classes ou mesmo com a própria classe através de associações, 
que podem ser associações simples ou específicas, como a agregação, a composição e a 
generalização/especialização. Esta última é também conhecida como herança, pelo fato de as classes 
especializadas (subclasses) herdarem as propriedades das classes genéricas (superclasses). Quando uma 
subclasse for uma especialização de diferentes superclasses, ocorre a herança múltipla, prevista na 
orientação a objetos e implementada pela UML. 
Estudo de caso – Modelo de classes 
Daremos continuidade ao nosso estudo de caso a partir dos casos de uso identificados no módulo 
anterior, aplicando a técnica de identificação de classes denominada “Análise de casos de uso”, ou seja, a 
técnica de identificação dirigida por casos de uso. Nessa técnica, o engenheiro de software busca identificar 
as classes necessárias para produzir o comportamento que está documentado na descrição de caso de uso, 
de modo que quando todos os casos de uso tiverem sido analisados, todas as classes terão sido 
identificadas, ou a maioria delas. 
Selecionemos o caso de uso “Registrar Reserva” para início da criação do nosso modelo de classes. 
Analisando a descrição textual desse caso de uso, mostrada anteriormente, podemos identificar os seguintes 
objetos: 
• Cliente 
• Funcionário (reserva realizada por telefone) 
• Reserva 
• Pousada 
• Quarto 
• Tipo de quarto 
• Preço da diária (para cálculo do valor total da reserva) 
• Pagamento (no caso de reserva online) 
O diagrama de classes de análise para o caso de uso Registrar Reserva, a seguir, propõe uma 
solução para a estrutura estática dos objetos identificados, cabendo ressaltar que a tipagem de dados no 
modelo de classes de análise não é obrigatória. 
Modelagem de Sistemas em UML 
Marcio Quirino - 105 
 
 
Diagrama de classes de análise para o caso de uso Registrar Reserva gerado pela ferramenta Astah. 
Vejamos as principais abstrações aplicadas: 
• Pessoa é uma superclasse de Cliente e Funcionário. 
• Toda reserva está associada a 1 (um) cliente, que pode fazer 1 (uma) ou mais reservas. 
• Uma reserva e registrada por no minimo 0 (zero) funcionário (reserva online) e no máximo 1 
(um) funcionário (reserva por telefone). 
• Uma reserva pode possuir no mínimo 1 (um) e no máximo 3 (três) quartos (RN 2). 
• Uma pousada possui no mínimo 1 (um) e no máximo vários quartos, sendo utilizada a 
associação de composição, ou seja, o objeto parte (Quarto) só tem existência se o objeto todo 
(Pousada) existir. 
• Um quarto se associa com várias instancias da classe PrecoDiaria, sendo o valor cobrado 
dependente da data da reserva. 
• Uma reserva pode estar associada a no mínimo 0 (zero), caso de reserva por telefone, ou no 
máximo vários pagamentos por cartão, caso de reserva online. 
• Historicamente, um funcionário pode ter gerenciado 0 (zero) ou mais pousadas e uma 
pousada pode ter sido gerenciada por 1 (um) ou mais gerentes. 
Aplicando a mesma abstração, com foco nos objetos, para os demais casos de uso, temos como 
resultado o diagrama de classes de análise proposto para o nosso estudo de caso ilustrado a seguir. 
Modelagem de Sistemas em UML 
Marcio Quirino - 106 
 
 
Diagrama de classes do estudo de caso gerado pela ferramenta Astah. 
Atenção 
Assim como no modelo de casos de uso, é importante ressaltar que não há uma solução única para o modelo 
de classes, em face das diversas possibilidades de modelagem de classes, atributos e associações resultantes do 
modelo de casos de uso. 
Destacamos a abstração aplicada à classe Consumo, sendo essa uma classe associativa resultante 
da associação entre Quarto e Produto, e que depois se associa à classe Funcionário, responsável pelo 
registro do consumo. Normalmente,uma classe associativa é necessária quando duas ou mais classes 
estão associadas, sendo necessário manter informações sobre essa associação, ou seja, toda vez que 
ocorre um consumo é registrada a data e a quantidade do produto consumido por um funcionário. Essa 
solução foi aplicada à classe associativa Gerenciamento que permite identificar a data em que um 
Modelagem de Sistemas em UML 
Marcio Quirino - 107 
 
funcionário assume a função de gerente em uma pousada, bem como a respectiva data de liberação da 
função. 
Modelo de atividades 
O modelo de atividades é composto por diagramas de atividades que, entre outros, descrevem os 
aspectos dinâmicos de um sistema, ou seja, um diagrama de atividade exibe passos de uma computação. 
Os referidos diagramas possuem as seguintes aplicações: 
Modelagem de processo de negócio 
Cujo enfoque está em entender o comportamento do sistema no decorrer de diversos casos de uso 
(processos de negócio), ou seja, como determinados casos de uso do sistema se relacionam no decorrer 
do tempo. 
Modelagem da lógica de um caso de uso 
A realização de um caso de uso requer que alguma computação seja realizada e, nessas situações, 
é interessante complementar a descrição do caso de uso com um diagrama de atividade. 
Modelagem da lógica de uma operação 
Embora muitas das operações sejam simples, pode haver a necessidade de se descrever a lógica 
de uma operação mais complexa na forma gráfica. 
Estudo de caso ‒ Modelo de atividades 
Prossigamos no nosso estudo de caso construindo o diagrama de atividades que represente 
graficamente a modelagem da descrição de caso de uso “Registrar Reserva”, estabelecida anteriormente 
de forma textual em “Estudo de caso – descrições de casos de uso”. 
Analisando a referida descrição, podemos observar que a interação ocorre entre os atores 
Cliente/Recepção (que possuem um relacionamento de generalização) e o sistema, ou seja, o diagrama de 
atividades deve conter duas raias de acordo com a imagem a seguir, de modo que algumas atividades são 
de responsabilidade dos atores e outras, do sistema. 
 
Diagrama de atividades parcial do caso de uso Registrar Reserva gerado pela ferramenta Astah. 
No diagrama de atividades parcial do caso de uso Registrar Reserva, podemos ver as primeiras 
etapas de montagem do diagrama considerando os seguintes passos computacionais: 
 
 
Modelagem de Sistemas em UML 
Marcio Quirino - 108 
 
Fluxo Principal: 
a. O sistema busca as pousadas disponíveis. 
b. O Cliente/Recepção informa a pousada destino e as datas de check-in e check-out. 
c. O sistema busca quartos disponíveis no período informado. 
d. O sistema lista os quartos disponíveis para o período informado por tipo, incluindo a quantidade máxima de pessoas a 
serem acomodadas. 
e. O Cliente/Recepção seleciona os quartos e informa a quantidade de pessoas por quarto selecionado, sendo no mínimo 1 
quarto e no máximo 3 (de acordo com RN 2 – Tabela 3). 
f. O sistema exige os dados de login do cliente para efetivação da reserva online. 
... 
Fluxo Alternativo (6): reserva realizada por contato telefônico (recepção da pousada) 
a. O sistema exige dados de login do funcionário da recepção para efetivação da reserva por contato telefônico. 
Tabela: Alberto Tavares da Silva. 
Após a definição das raias, podemos inserir o elemento que representa o início do processo (círculo 
escuro). O primeiro passo a considerar é “Busca as pousadas disponíveis” sob responsabilidade do 
Sistema, sendo a próxima atividade “Informa a pousada destino e as datas de check-in e check-out”, do 
ator Cliente/Recepção. Interessante observar que no passo 6 “O sistema exige os dados de login do 
cliente para efetivação da reserva online” temos um fluxo alternativo (losango), ou seja, caso a reserva 
seja online, a atividade a ser realizada pelo sistema é “Exige os dados de login do cliente para efetivação 
da reserva online” e, no caso de reserva por telefone, a atividade será “Exige dados de login do 
funcionário da recepção para efetivação da reserva por contato telefônico”. Aplicando a mesma 
abstração nos demais fluxos da referida descrição, teremos o diagrama de atividades do caso de uso 
“Registrar Reserva” ilustrado na imagem a seguir, onde podemos observar que o fluxo de atividades tem 
quatro possíveis encerramentos, representados pelos círculos vazados. 
Modelagem de Sistemas em UML 
Marcio Quirino - 109 
 
 
Diagrama de atividades do caso de uso Registrar Reserva gerado pela ferramenta Astah. 
Modelo de estados 
Ainda na etapa de análise do processo, vejamos o modelo de estados. 
No contexto do paradigma orientado a objetos, um determinado objeto possui um estado particular, 
mudando de estado quando acontece algum evento interno ou externo ao sistema. 
Nessa transição de um estado para outro, um objeto realiza determinadas ações dentro do sistema. 
O modelo de estados é composto por diagramas de estados que descrevem os possíveis estados 
pelos quais objetos, instâncias de uma determinada classe, podem passar e as alterações dos estados como 
resultado de eventos que atingem esses objetos. 
Modelagem de Sistemas em UML 
Marcio Quirino - 110 
 
Estudo de caso ‒ Modelo de estados 
Dando continuidade ao nosso estudo de caso, podemos identificar, no diagrama de classes do estudo 
de caso, uma classe cujos objetos possuem mudanças significativas de estados, a classe Reserva. Uma 
reserva pode assumir estados durante a execução do software, tal como no diagrama de atividades do caso 
de uso Registrar Reserva. Uma reserva pode ter dois estados iniciais: 
A. Em validação 
Quando a reserva é realizada por telefone 
B. Confirmada 
Quando a reserva é realizada de forma online 
Analisemos a mudança de estado de “Em validação” para “Confirmada”, cuja expressão para 
transição é “Cliente deposita pré-reserva [até 24h depois da reserva] / Confirmar reserva”, ou seja, temos a 
expressão “evento [condição de guarda] / ação”. O evento corresponde a “Cliente deposita pré-reserva”, a 
condição para a mudança de estado inclui “[até 24h depois da reserva]” e, finalmente, a ação correspondente 
no sistema é denominada de “Confirmar reserva”. Aplicando a mesma expressão às demais mudanças de 
estados, temos o diagrama de estados ilustrado a seguir. 
 
Diagrama de estados para a classe Reserva gerado pela ferramenta Astah. 
Vimos, neste módulo, a construção dos artefatos da fase de análise, a saber: 
Modelagem de Sistemas em UML 
Marcio Quirino - 111 
 
Modelo de classes de análise 
Corresponde à estrutura estática dos objetos que irão colaborar mutuamente para a produção dos 
resultados esperados pelos respectivos usuários, ou seja, essa colaboração possui um aspecto estrutural 
estático que permite compreender como o sistema está estruturado internamente para que as citadas 
funcionalidades externamente visíveis sejam produzidas. 
Modelo de atividades 
Composto de diagramas de atividades, permite descrever os aspectos dinâmicos de um sistema 
tendo três possíveis aplicações: modelagem de processo de negócio, modelagem da lógica de um caso de 
uso e modelagem da lógica de uma operação ou método. 
Modelo de estados 
Composto de diagramas de estados, permite também identificar aspectos dinâmicos de um sistema, 
sendo que a transição entre estados ocorre a partir de um evento externo, incluindo uma ou mais condições 
de guarda e uma correspondente ação no sistema. 
4. Produzir o modelo de projeto para um estudo de caso de 
modelagem de sistemas em UML 
Daremos continuidade ao nosso estudo de caso, que trata do gerenciamento de uma rede de 
pousadas, desenvolvendo os principais modelos da etapa de projeto do processo de desenvolvimento de 
software genérico. 
 
Etapa: Projeto. 
Modelo de interação 
O modelo de interação é composto por diagramas de sequência e/ou diagramas de comunicação, 
podendo ser iniciado na fase de análise ou na fase de projeto para representar os aspectosdinâmicos do 
sistema. Consideremos que o início da sua construção ocorre na etapa de projeto do processo, tendo como 
finalidade principal detalhar os objetos e mensagens requeridas na realização de um caso de uso. 
Embora os modelos representem visões distintas do sistema, esses modelos são interdependentes, 
estando a modelagem de interação diretamente relacionada com a modelagem de casos de uso e a 
modelagem de classes. 
Diagrama de sequência 
Este diagrama organiza os objetos participantes da interação na horizontal, sendo que cada objeto 
possui uma linha de vida e as mensagens entre esses objetos são representadas com linhas horizontais 
rotuladas partindo da linha de vida do objeto remetente e chegando à linha de vida do objeto receptor. A 
posição vertical das mensagens permite deduzir a ordem na qual elas são enviadas. 
Diagrama de comunicação 
Este diagrama organiza os objetos em forma de nós, sendo adicionados setas e rótulos de 
mensagens nas ligações entre esses objetos; a ordem das mensagens é explicitada pela sua numeração 
sequencial no diagrama de comunicação. 
Atenção 
Os diagramas de comunicação e sequência representam as mesmas interações e devem estar consistentes 
com o diagrama de classes e com a respectiva descrição de caso de uso. 
Modelagem de Sistemas em UML 
Marcio Quirino - 112 
 
Estudo de caso – Modelo de interação 
Daremos continuidade ao nosso estudo de caso, gerando o diagrama de sequência do caso de uso 
“Registrar Reserva”. Como afirmado anteriormente, esse diagrama possui uma interdependência com os 
modelos de casos de uso e modelo de classes, portanto vamos iniciar nossa abstração “dinâmica” com a 
descrição do referido caso de uso desenvolvida no tópico Estudo de caso – modelo de casos de uso, sendo 
parcialmente replicada a seguir: 
Caso de uso: Registrar Reserva. 
Atores: Cliente e Recepção (funcionário) 
Pré-condição: Cliente ou Recepção deve estar identificado pelo sistema. 
Fluxo Principal: 
1. O sistema busca as pousadas disponíveis. 
2. O Cliente/Recepção informa a pousada destino e as datas de check-in e check-out. 
3. O sistema busca quartos disponíveis no período informado. 
4. O sistema lista os quartos disponíveis para o período informado por tipo, incluindo a quantidade máxima de pessoas 
a serem acomodadas. 
5. O Cliente/Recepção seleciona os quartos e informa a quantidade de pessoas por quarto selecionado, sendo no 
mínimo 1 (um) quarto e no máximo 3 (três) (de acordo com RN 2). 
6. O sistema exige os dados de login do cliente para efetivação da reserva online. 
... 
Fluxo Alternativo (6): reserva realizada por contato telefônico (recepção da pousada) 
a. O sistema exige dados de login do funcionário da recepção para efetivação da reserva por contato telefônico. 
b. O funcionário da recepção informa dados para login. 
c. O funcionário da recepção informa o CPF do cliente. 
d. O sistema valida o cliente. 
e. Prosseguir no passo 9. 
Tabela: Alberto Tavares da Silva. 
Temos que considerar na construção do modelo de interação o requisito não funcional “RNF 5 ‒ O 
padrão de arquitetura adotado é o MVC (model-view-controller)”, pois novos objetos serão incorporados, a 
fim de permitir que o projeto do sistema tenha um nível de detalhamento suficiente para sua implementação. 
Diagrama de sequência 
Retornando à nossa descrição, analisemos o passo 1, “O sistema busca as pousadas disponíveis”, 
estando a respectiva modelagem ilustrada a seguir. Nos diagramas de interação, por convenção de boa 
prática, empregamos os sufixos Model, View e Controller na denominação dos objetos, para indicar as 
camadas respectivas na fase de implementação do modelo. 
 
Diagrama de sequência parcial do caso de uso “Registrar Reserva” gerado pela ferramenta Astah. 
A interação do ator, cliente ou funcionário da recepção definido no diagrama de casos de uso do 
estudo de caso, é iniciada pelo método CreateAction da classe controladora ReservaController que, por sua 
Modelagem de Sistemas em UML 
Marcio Quirino - 113 
 
vez, instancia um objeto PousadaModel, que é um objeto entidade identificado a partir do diagrama de 
classes de análise, a fim de que esse busque as pousadas disponíveis. 
Em seguida, analisemos os passos 2, “O Cliente/Recepção informa a pousada destino e as datas de 
check-in e check-out” e 3, “O sistema busca quartos disponíveis no período informado”, cujas modelagens 
estão representadas a seguir. 
 
Diagrama de sequência parcial do caso de uso “Registrar Reserva” passo 2 gerado pela ferramenta Astah. 
Após uma segunda interação do ator, ou seja, seleção da pousada, uma função JavaScript na 
camada View aciona um método na classe controladora a fim de buscar os quartos disponíveis para a 
selecionada pousada no período desejado, conforme observado na imagem a seguir. 
 
Diagrama de sequência parcial do caso de uso “Registrar Reserva” passo 3 gerado pela ferramenta Astah. 
Modelagem de Sistemas em UML 
Marcio Quirino - 114 
 
Finalmente, vamos analisar o passo 6, “O sistema exige os dados de login do cliente para efetivação 
da reserva online”. 
Após uma quarta interação do ator, ou seja, informação de dados do login, ocorre a possibilidade de 
dois cenários estabelecidos pelos fluxos principal e alternativo, ou seja, reserva realizada pelo cliente 
(principal) ou pelo funcionário da recepção (alternativo). O operador “alt” permite representar essa abstração, 
pois caso o ator seja o cliente, será acionado o respectivo método de validação, e caso seja o funcionário, 
ocorrerá a respectiva validação de login, bem como a validação do CPF do cliente. 
Na quinta interação, a confirmação da reserva, temos duas opções de acordo com o cenário; no 
cenário que a reserva é realizada pelo ator cliente, ocorre a extensão do caso de uso Registrar Cobrança 
de Diária, reveja o diagrama de casos de uso do estudo de caso: 
 
Extend em diagrama de casos de uso do estudo de caso gerado pela ferramenta Astah. 
Caso essa cobrança seja confirmada, ou a reserva seja realizada pelo ator funcionário da recepção 
(cenário alternativo), ocorre o registro da reserva. Após a aplicação das abstrações descritas, propomos o 
diagrama de sequência ilustrado a seguir. 
Modelagem de Sistemas em UML 
Marcio Quirino - 115 
 
 
Diagrama de sequência do caso de uso “Registrar Reserva” gerado pela ferramenta Astah. 
Diagrama de comunicação 
Agora, vejamos a elaboração do diagrama de comunicação para o mesmo caso de uso, ou seja, 
“Registrar Reserva”. Nesse caso, podemos aplicar a mesma abstração aplicada na construção do diagrama 
de sequência, ou seja, a partir da descrição de caso de uso e do diagrama de classes identificar os objetos 
que fazem parte da solução do caso de uso e as respectivas trocas de mensagens, levando em consideração 
algum requisito não funcional relacionado com o padrão de arquitetura adotado (no caso MVC). A imagem 
a seguir ilustra o diagrama de comunicação proposto. Note que a sequência da execução é ordenada pelos 
números sequenciais das mensagens e o resultado das interações é o mesmo do diagrama de sequência. 
Modelagem de Sistemas em UML 
Marcio Quirino - 116 
 
 
Diagrama de comunicação do caso de uso “Registrar Reserva” gerado pela ferramenta Astah. 
Modelo de classes de projeto 
O modelo de classes de projeto é resultante de refinamentos no modelo de classes de análise, sendo 
incluídos detalhes úteis para a implementação das respectivas classes. 
Dica 
Como boa prática, sugerimos que esse modelo seja construído em paralelo com o modelo de interações. 
Estudo de caso ‒ Modelo de classes de projeto 
Aplicando os principais refinamentos no diagrama de classe de análise para o caso de uso Registrar 
Reserva ilustrado anteriormente no módulo 3, propomos o diagrama de classes de projeto apresentado a 
seguir. A sintaxe dos atributos foi definida no modelo de análise, sendo as visibilidades privativas 
(qualificador de visibilidade“–“). 
Modelagem de Sistemas em UML 
Marcio Quirino - 117 
 
 
Diagrama de classes de projeto para o caso de uso Registrar Reserva gerado pela ferramenta Astah. 
Podemos observar que as mensagens definidas no diagrama de sequência apresentado 
anteriormente foram incorporadas como métodos na respectivas classes, tal como a mensagem “10.1 
Registrar()” implementada na classe destino “Reserva”, incluindo o tipo de visibilidade, no caso públicas 
(qualificador de visibilidade “+”), e tipo de retorno. 
Vamos exemplificar refinamentos relacionados com a navegabilidade entre classes (repare nas 
multiplicidades de cada associação): 
(a) 
Ocorrência de uma associação bidirecional entre Cliente/Reserva, pois a navegabilidade não está 
representada por flechas, ou seja, o envio de mensagens deverá ocorrer em ambos os sentidos, 
sendo que um objeto Cliente poderá instanciar uma coleção de objetos Reserva (veja atributo 
oLstReserva) e um objeto Reserva poderá instanciar um objeto Cliente (veja o atributo oCliente). 
 
(b) 
Ocorrência de uma associação unidirecional entre Reserva/Quarto, pois a navegabilidade está 
representada por uma flecha, ou seja, o envio de mensagens deverá ocorrer em um único sentido, 
sendo que um objeto Reserva poderá instanciar uma coleção de objetos Quarto (veja atributo 
oLstQuarto). 
Nosso diagrama de classes de projeto para o caso de uso Registrar Reserva permite ilustrar, 
também, o refinamento relacionado com o conceito de classe abstrata, que permite organizar hierarquias 
gen/spec e a implementação do princípio do polimorfismo. A classe Pessoa é uma classe abstrata estando 
a mesma em itálico. 
Modelagem de Sistemas em UML 
Marcio Quirino - 118 
 
Aplicando a abstração descrita para o caso de uso “Registrar Reserva” para os demais casos de uso, 
teremos o diagrama de projeto do sistema. 
Dica 
Os métodos de acesso get/set, ou as propriedades, não estão representados em função da geração automática 
pelos compiladores modernos a partir dos atributos. 
Modelo de implementação 
O modelo de implementação é composto de um ou mais diagramas de componentes, que permite 
representar, de forma gráfica, os componentes do sistema e suas dependências. 
Estudo de caso ‒ Modelo de implementação 
Retornemos ao nosso estudo de caso, ainda na fase de projeto do processo. A imagem a seguir 
ilustra uma proposta para o diagrama de componentes, considerando os modelos de casos de uso (módulo 
2), de classes (módulo 3) e de interação (módulo 4). 
 
Diagrama de componentes para o estudo de caso gerado pela ferramenta Astah. 
A partir do empacotamento de casos de uso, propomos uma solução (entre outras muitas!) onde 
cada pacote corresponde a uma aplicação. Cada aplicação possui suas próprias classes controladoras 
(pacote Controller) e views (pacote View); entretanto, as classes do tipo model (stereotype) são acessadas 
por todas as aplicações por uma interface IPadrao. Como especificado no requisito não funcional RNF 2 no 
módulo 1, o banco de dados é o MySql, sendo o framework de persistência o Hibernate (RNF 4). Lembramos 
que esse diagrama representa um alto nível de abstração, pois podemos detalhar cada aplicação com um 
respectivo diagrama de componentes. 
Modelo de implantação 
O modelo de implantação é composto de um ou mais diagramas de implantação e define os nós 
de processamento disponíveis, ou seja, os componentes físicos do sistema e suas interdependências. A 
referida modelagem cresce de importância em função da complexidade do sistema. 
Modelagem de Sistemas em UML 
Marcio Quirino - 119 
 
Estudo de caso ‒ Modelo de implantação 
A imagem a seguir ilustra uma proposta de diagrama de implantação para o nosso estudo de caso, 
sendo necessários apenas três nós computacionais para sua implantação. 
 
Diagrama de implantação para o estudo de caso gerado pela ferramenta Astah. 
Neste módulo, demos continuidade ao estudo de caso que trata do gerenciamento de uma rede de 
pousadas desenvolvendo os principais modelos da etapa de projeto do processo de desenvolvimento de 
software genérico. 
Neste módulo vimos os seguintes modelos: 
Modelo de interação 
Permite identificar os objetos e respectivas interações, por meio de mensagens, na realização de 
casos de uso, sendo esse modelo composto por diagramas de sequência e/ou diagramas de comunicação. 
Modelo de classes de projeto 
É gerado a partir do refinamento do modelo de classes de análise, ou seja, transformações aplicadas 
nos atributos, operações e associações. Esse modelo é construído em paralelo com o modelo de interações, 
contendo detalhes úteis para a implementação das classes nele contidas. 
Modelo de implementação 
Composto de diagramas de componentes, permite identificar os componentes e suas dependências. 
Modelo de implantação 
Composto por um ou mais diagramas de implantação, define os nós computacionais necessários à 
implantação do sistema. 
Considerações finais 
Apresentamos neste tema um estudo de caso que permitiu a aplicação dos conceitos relacionados 
com a modelagem de um projeto de software, incluindo as etapas de levantamento de requisitos, análise e 
projeto do processo de desenvolvimento de software genérico. 
Na etapa de levantamento de requisitos, identificamos os serviços a serem fornecidos pelo sistema, 
bem como as restrições operacionais, ou seja, os requisitos funcionais, não funcionais e as regras de 
negócio. 
Modelagem de Sistemas em UML 
Marcio Quirino - 120 
 
Na etapa de análise foram gerados, a partir dos requisitos funcionais, o modelo de casos de uso, 
composto de diagramas de casos de uso e de descrições de casos de uso, o modelo de classes, composto 
de diagramas de classes, o modelo de atividades, composto de diagramas de atividades, e o modelo de 
estados, composto de diagramas de estados. 
Na etapa de projeto, foi gerado o modelo de interação, que inclui os diagramas de sequência e/ou 
diagramas de comunicação, o modelo de classes de projeto, composto de diagramas de classes 
devidamente refinados a partir dos diagramas de classes de análise, o modelo de implementação, composto 
de diagramas de componentes, e o modelo de implantação, composto de diagramas de implantação. 
Referências 
BEZERRA, E. Princípios de Análise e Projeto de Sistemas com UML. 3. ed. Rio de Janeiro: Elsevier, 
2014. 
WAZLAWICK, R. S. Análise e Projeto de Sistemas de Informação Orientados a Objetos. 2. ed. Rio 
de Janeiro: Elsevier, 2011. 
Explore+ 
Para saber mais sobre os assuntos tratados neste tema, leia: 
Capítulos 4 a 11 ‒ Princípios de Análise e Projeto de Sistemas. 
Capítulos 3, 4, 5, 7 e 9 ‒ Análise e Projeto de Sistemas de Informação Orientados a Objetos. 
 
 
Modelagem de Sistemas em UML 
Marcio Quirino - 121 
 
Introdução a Padrões de Projeto - Design Patterns 
Descrição 
Padrões de projeto de software e visão geral dos padrões GRASP, SOLID e GoF. 
Propósito 
Compreender o conceito de padrões de projeto e ser capaz de identificar oportunidades para a 
aplicação dos principais padrões em projetos de sistemas são habilidades importantes para a sua formação, 
pois elas possibilitam a criação de programas bem estruturados por meio do uso de soluções 
reconhecidamente bem-sucedidas para problemas recorrentes no desenvolvimento de software. 
Preparação 
Este conteúdo não requer nenhum pré-requisito operacional obrigatório. Porém, antes de iniciar, é 
recomendado ter instalado em seu computador um programa que lhe permita elaborar modelos sob a forma 
de diagramas da UML (Linguagem Unificada de Modelagem). Nossa sugestão inicial é o Astah Free Student 
License, usado nos exemplos deste estudo, e, para isso, será necessário lançar mão do seu e-mail 
institucional para ativar a licença. Preencha os dados do formulário no site do software, envie e aguarde a 
liberação de sua licença em seu e-mail institucional. Ao receber a licença, siga as instruções do e-mail e 
instale o produtoem seu computador. Os arquivos-fonte dos diagramas Astah UML mostrados neste 
conteúdo podem ser baixados aqui. 
Sugestões de links adicionais de programas livres para modelagem de sistemas em UML (UML 
Tools) podem ser encontradas em buscas na internet. 
Introdução 
Desenvolvedores pouco experientes frequentemente têm dificuldade em estruturar um software de 
forma que ele satisfaça os requisitos de qualidade demandados. 
Por que é importante estruturar um software adequadamente? Não basta programar as suas 
instruções de forma que ele realize corretamente as funções demandadas pelo cliente? 
Realizar as funções corretamente é apenas um dos requisitos de qualidade de um sistema. Um 
sistema bem-sucedido passa por diversos ciclos de evolução ao longo da sua existência, motivados por 
mudanças tanto no negócio como na tecnologia. Para complicar o cenário, as pessoas que participam dos 
ciclos iniciais de desenvolvimento podem ir para outros projetos ou outras empresas, e novos 
desenvolvedores precisarão dar continuidade à evolução do sistema. Portanto, não basta que ele funcione 
corretamente; deve ser estruturado de modo que sua manutenção seja possível a custos e prazos aceitáveis. 
Neste estudo, você aprenderá como os conceitos de padrões de projeto, padrões GRASP, GoF e 
princípios SOLID podem ser empregados para a produção de sistemas bem estruturados. 
1. Conceitos gerais de padrões de projeto, seus elementos e 
suas características 
Design patterns 
Design patterns ou padrões de projeto são soluções gerais para problemas recorrentes durante o 
desenvolvimento de um software. 
Você já ouviu falar em padrões de projeto (design patterns)? Sabe por que eles foram criados? 
Modelagem de Sistemas em UML 
Marcio Quirino - 122 
 
Neste módulo, você vai aprender o que são padrões de projeto, como eles são definidos e entender 
as vantagens e desvantagens da sua utilização. 
Motivação e origem dos padrões de projeto 
• Imagine que você foi alocado em um novo trabalho, ficando responsável por evoluir um 
sistema desenvolvido por outras pessoas ao longo de anos. 
• Você não se sentiria mais confortável se o software tivesse sido projetado com estruturas de 
solução que você já conhecesse? 
Ao aprendermos a programar em uma linguagem orientada a objetos, por exemplo, somos capazes 
de definir classes, atributos, operações, interfaces e subclasses com essa linguagem. Esse conhecimento 
nos permite responder a perguntas operacionais como, por exemplo: 
“Como eu escrevo a definição de uma classe nesta linguagem de programação?”. 
Entretanto, quando temos que estruturar um sistema, a pergunta passa a ser bem mais complexa: 
“Quais classes, interfaces, relacionamentos, atributos e operações devemos definir para resolvermos 
este problema de forma adequada?”. 
Ao desenvolvermos um sistema, nos deparamos inúmeras vezes com essa pergunta. É comum um 
desenvolvedor iniciante se sentir perdido diante da diversidade de respostas possíveis, sendo que algumas 
podem facilitar, enquanto outras podem dificultar bastante as futuras evoluções do sistema. 
Que tipo de conhecimento, então, um desenvolvedor experiente utiliza para estruturar um sistema? 
Fazendo uma analogia com o jogo de xadrez, um desenvolvedor inexperiente guarda semelhanças 
com um jogador iniciante, que sabe colocar as peças no tabuleiro, conhece os movimentos permitidos para 
cada peça e domina alguns princípios elementares do jogo, como a importância relativa das peças, e o 
centro do tabuleiro. 
Um desenvolvedor inexperiente conhece as construções básicas de programação (ex.: sequência, 
decisão, iteração, classes, objetos, atributos, operações) e alguns princípios elementares de estruturação 
de um sistema, tais como dividi-lo em módulos e evitar construir módulos longos e complexos. 
O que diferencia os grandes enxadristas dos iniciantes? 
1. Os grandes enxadristas estudaram ou experimentaram inúmeras situações de jogo e 
acumularam experiência sobre as consequências que determinado lance pode gerar no 
desenrolar da partida. 
2. Quanto maior for o arsenal de situações conhecidas por um jogador, maiores as chances que 
ele terá de fazer uma boa jogada em pouco tempo. 
3. E isso mesmo: os jogadores de xadrez também têm um prazo para cumprir. Existem 
campeonatos que definem um tempo máximo de duas horas para que cada jogador realize 
seus primeiros quarenta lances. 
Um jogador iniciante não aprende apenas jogando e vivenciando essas situações. Ele pode estudar 
inúmeras situações catalogadas pelas quais outros jogadores já passaram. 
Comentário 
Existem catálogos de situações e estratégias para o início, para o meio e para a finalização de um jogo de 
xadrez. 
As estratégias para o início de jogo são conhecidas como aberturas. Cada abertura tem um nome e 
corresponde a um conjunto de jogadas que geram consequências positivas e, eventualmente, negativas 
Modelagem de Sistemas em UML 
Marcio Quirino - 123 
 
para cada lado (peças brancas ou pretas). Uma dessas aberturas é o nome de uma das séries originais 
mais vistas na história da Netflix: O gambito da rainha. 
E o que diferencia os desenvolvedores experientes dos iniciantes? 
Resposta 
Desenvolvedores experientes acumularam conhecimento sobre as consequências de resolver um problema 
aplicando determinada estrutura de solução, isto é, dividindo a solução em um conjunto específico de módulos e 
estabelecendo uma estrutura particular de interação entre eles. Essa experiência acumulada permite-lhes reusar, no 
presente, soluções que funcionaram bem no passado em problemas similares, produzindo sistemas flexíveis, elegantes 
e em menor tempo. 
Muitos problemas em estruturação de software são recorrentes, então que tal registrá-los com as 
respectivas soluções para que, de forma análoga aos livros de abertura do xadrez, possamos compartilhar 
esse conhecimento com desenvolvedores que estejam encarando um problema análogo pela primeira vez? 
Foi o que pensaram quatro engenheiros de software (Erich Gamma, Richard Helm, Ralph Johnson e 
John Vlissides) em 1994, quando publicaram o livro Design patterns: elements of reusable object-oriented 
software, descrevendo 23 padrões que eles utilizaram no desenvolvimento de diversos sistemas ao longo 
de suas carreiras. Os autores ficaram mais conhecidos como a “gangue dos quatro” (tradução de gang of 
four), e os padrões publicados são conhecidos como os “padrões GoF”. Desde então, diversas publicações 
surgiram relatando novos padrões, críticas a padrões existentes, padrões específicos para determinadas 
linguagens e paradigmas de programação, padrões arquiteturais e até mesmo antipadrões – construções 
que tipicamente trazem consequências negativas para a estrutura de um sistema. 
O que é um padrão de projeto 
Um padrão de projeto (design pattern) descreve um problema recorrente e a estrutura fundamental 
da sua solução definida por módulos e pelas comunicações entre eles. 
Em uma estrutura de solução orientada a objetos, a solução é descrita por classes, interfaces e 
mecanismos de colaboração entre objetos. 
Porém, o conceito de padrões de projeto é mais abrangente, uma vez que existem padrões voltados 
para outros paradigmas de programação, como, por exemplo, programação funcional e programação 
reativa. 
Um padrão de projeto apresenta quatro elementos fundamentais: 
A. Nome 
O nome possibilita a comunicação entre os desenvolvedores em um nível mais abstrato. Em 
uma discussão de projeto, em vez de descrevermos todos os elementos participantes da solução 
para um problema, a forma de comunicação entre eles e as consequências do seu uso, basta 
mencionarmos o nome do padrão apropriado. 
Um desenvolvedor experiente pode recomendar algo como: “use o Observer para resolver esse 
problema!”, e isso será suficiente, pois conhecendo o padrão Observer, você já saberá como 
estruturar a solução. Portanto, os nomes dos padrões foram um vocabulário compartilhadopelos 
desenvolvedores, para agilizar a discussão de soluções de projeto. 
B. Problema 
Um padrão deve descrever as situações nas quais a sua utilização é apropriada, explicando o 
problema e o contexto. Os problemas podem ser específicos, como, por exemplo: “como 
podemos representar diferentes algoritmos com o mesmo propósito na forma de classes?” ou 
“como podemos instanciar uma classe específica, dentre várias similares, sem criar uma 
dependência rígida com a implementação escolhida?”. 
Modelagem de Sistemas em UML 
Marcio Quirino - 124 
 
Este elemento também pode descrever e discutir soluções inadequadas ou pouco flexíveis para 
o contexto apresentado, de forma que, se você estiver pensando em uma solução similar às 
descritas, o seu problema passará a ser: “ok, estou vendo que a estrutura que estava pensando 
em aplicar não é adequada. Como devo, então, estruturar a solução?”. 
C. Solução 
O padrão deve descrever os elementos recomendados para a implementação, suas 
responsabilidades, seus relacionamentos e colaborações. A solução é uma descrição abstrata 
que pode ser replicada em diferentes situações e sistemas. O desenvolvedor deve traduzir essa 
descrição abstrata em uma implementação específica no problema particular que ele estiver 
resolvendo. Note que a solução é uma ideia que precisa ser construída e implementada pelo 
desenvolvedor. Um catálogo de padrões de projeto é bem diferente de uma biblioteca de código, 
pois um padrão de projeto não tem o propósito de promover reutilização de código, mas sim de 
conhecimento, know-how. 
D. Consequências 
Um padrão precisa discutir os custos e benefícios da solução proposta. Uma solução pode dar 
maior flexibilidade ao projeto, ao mesmo tempo em que pode trazer maior complexidade ou até 
mesmo resultar em problemas de performance. Antes de utilizarmos um padrão, devemos 
sempre avaliar os custos e benefícios em relação ao problema particular que estamos querendo 
resolver. 
Vantagens e desvantagens do uso de padrões de projeto 
Por que você deve conhecer padrões de projeto? Podemos enumerar alguns motivos: 
1. Padrões facilitam o desenvolvimento, pois permitem a reutilização de soluções bem-
sucedidas em problemas similares. Um padrão não pode ser simplesmente uma ideia; ao 
contrário, só pode ser considerado como tal se passar pela regra dos três: ele deve ter sido 
utilizado em pelo menos três diferentes situações ou aplicações. 
2. Padrões possibilitam maior produtividade ao desenvolvimento, uma vez que não 
desperdiçamos tempo pensando, fazendo e refinando soluções até encontrarmos a mais 
adequada. Padrões nos fornecem um atalho para uma boa solução. 
3. Padrões reforçam práticas de reutilização de código com estruturas que acomodam 
mudanças por meio do uso de mecanismos como delegação, composição e outras técnicas 
que não sejam baseadas em estruturas de herança. 
4. Padrões fornecem uma linguagem comum para os desenvolvedores, agilizando a troca de 
ideias e experiências. 
E quais são as desvantagens ou os pontos de atenção na utilização de padrões de projeto? 
1. Desde que o conceito foi apresentado na década de 1990, surgiu uma grande quantidade de 
padrões. Portanto, a curva de aprendizado pode ser grande. 
2. Decidir se um padrão pode ser empregado em um problema específico nem sempre é uma 
tarefa fácil e requer alguma experiência. 
3. Às vezes é necessário adaptar ou mudar alguma característica da solução proposta por um 
padrão para tornar sua utilização adequada a um problema específico, o que também requer 
experiência. 
4. É comum um iniciante achar que os padrões devem estar por toda a implementação e acabar 
fazendo uso inadequado deles. 
5. Não existe consenso sobre a qualidade de todos os padrões. Singleton, por exemplo, é um 
padrão GoF que gera grande controvérsia, sendo considerado um antipadrão por muitos. 
 
Modelagem de Sistemas em UML 
Marcio Quirino - 125 
 
Principais padrões em linhas gerais 
Os 23 padrões de projeto GoF são classificados em três grandes categorias: 
Criação 
Os padrões de projeto desta categoria têm como objetivo tornar a implementação independente da forma com 
que os objetos são criados, compostos ou representados. 
Os cinco padrões GoF desta categoria são: Abstract Factory, Builder, Factory Method, Prototype e 
Singleton. 
Estrutura 
Os padrões de projeto desta categoria tratam de formas de combinar classes e objetos para formar estruturas 
maiores. 
Os sete padrões GoF desta categoria são: Adapter, Bridge, Composite, Decorator, Facade, Flyweight e 
Proxy. 
Comportamento 
Os padrões de projeto da categoria comportamental tratam de algoritmos, da distribuição de responsabilidades 
pelos objetos e da comunicação entre eles. 
Os onze padrões GoF desta categoria são: Chain of Responsibility, Command, Interpreter, Iterator, 
Mediator, Memento, Observer, State, Strategy, Template Method e Visitor. 
 
Saiba mais 
Existem inúmeros padrões publicados para diferentes problemas: arquitetura e projeto detalhado de software, 
padrões específicos para uma linguagem de programação, testes, gerência de projeto, gerência de configuração, entre 
outros. Você não precisa estudar todos os padrões disponíveis, mas é importante saber que eles existem, onde estão 
descritos e conhecer os problemas que eles resolvem. Assim, no dia em que tiver que resolver um problema similar, 
você poderá aproveitar uma solução utilizada com sucesso por outras pessoas. 
Como achá-los? Experimente fazer uma busca na internet com termos gerais, tais como “pattern books”, 
“patterns catalog”, ou mais específicos, como “java design patterns”, “cloud architecture patterns”, “node js patterns”. 
Você encontrará dicas mais específicas na seção Explore +. 
2. Propósito dos padrões GRASP e as situações nas quais 
eles podem ser aplicados 
GRASP é o acrônimo para o termo em inglês General Responsibility Assignment Software Patterns, 
termo definido por Craig Larman no livro intitulado Applying UML and patterns, que define padrões gerais 
para a atribuição de responsabilidades em software. 
• Os padrões GoF tratam de problemas específicos em projeto de software. 
• Os padrões GRASP podem ser vistos como princípios gerais de projeto de software orientado 
a objetos aplicáveis a diversos problemas específicos. 
Neste módulo, você vai aprender seis padrões GRASP: 
• Especialista 
• Criador 
• Baixo acoplamento 
• Alta coesão 
• Controlador 
• Polimorfismo 
Especialista 
Problema: 
Quando estamos elaborando a solução técnica de um projeto utilizando objetos, a nossa principal 
tarefa consiste em definir as responsabilidades de cada classe e as interações necessárias entre os objetos 
dessas classes, para cumprir as funcionalidades esperadas com uma estrutura fácil de entender, manter e 
estender. 
Modelagem de Sistemas em UML 
Marcio Quirino - 126 
 
Solução: 
Este padrão trata do princípio geral de atribuição de responsabilidades aos objetos de um sistema: 
atribua a responsabilidade ao especialista, isto é, ao módulo que traga o conhecimento necessário para 
realizá-la. 
Comentário 
Atribuir a responsabilidade ao especialista é uma heurística intuitiva que utilizamos no nosso cotidiano. A quem 
você atribuiria a responsabilidade de trocar a parte elétrica da sua casa? Possivelmente a alguém com o conhecimento 
necessário para realizar essa atividade (um especialista), ou seja, um eletricista. 
Suponha que você esteja desenvolvendo um site de vendas de produtos pela internet. 
A figura a seguir apresenta um modelo simplificado de classes desse domínio. Digamos que o site 
deva apresentar o pedido do cliente e o valor total do pedido. 
Como você organizaria as responsabilidades entre as classes, para fornecer essa informação? 
 
Padrão Especialista – classes de domínio. 
O valor total do pedido pode ser definido como a soma do valor de cada um de seus itens. 
Segundo o padrão Especialista, a responsabilidade deveficar com o detentor da informação. Nesse 
caso, quem conhece todos os itens que compõem um pedido? O próprio pedido, não é mesmo? Então, 
vamos definir a operação obterValorTotal na classe Pedido. 
E onde ficaria o cálculo do preço de um item do pedido? 
Quais informações são necessárias para esse cálculo? 
A quantidade e o preço do produto. Quem conhece essas informações? 
A classe Item do Pedido conhece a quantidade e o produto associado. Vamos definir, então, uma 
operação obterValor na classe Item do Pedido. 
E o preço do produto? 
Basta o objeto item do pedido pedir essa informação para o produto, por meio da operação de acesso 
getPrecoUnitario. 
A figura seguinte apresenta o diagrama de classes com a alocação de responsabilidades resultante. 
Modelagem de Sistemas em UML 
Marcio Quirino - 127 
 
 
Padrão Especialista – alocação de responsabilidades. 
O diagrama de sequência da próxima figura ilustra a colaboração definida para implementar a 
obtenção do valor total de um pedido. 
 
Padrão Especialista – colaboração (opção 1). 
Consequências: 
Quando o padrão Especialista não é seguido, é comum encontrarmos uma solução deficiente 
(antipadrão) conhecida como “God Class” – que consiste em definir apenas operações de acesso 
(conhecidas como getters e setters) nas classes de domínio – e concentrar toda a lógica de determinada 
funcionalidade do sistema em uma única classe, usualmente definida na forma de uma classe de controle 
ou de serviço. Essa classe implementa procedimentos utilizando as operações de acesso das diversas 
classes de domínio, que, nesse estilo de solução, são conhecidas como classes “idiotas”. 
Existem, entretanto, situações em que a utilização desse padrão pode comprometer conceitos como 
coesão e acoplamento. 
Exemplo 
Qual classe deveria ser responsável por implementar o armazenamento dos dados de um Pedido no banco de 
dados? 
Pelo princípio do Especialista, deveria ser a própria classe Pedido, uma vez que ela detém todas as 
informações que serão armazenadas. Porém, essa solução acoplaria a classe de negócio com conceitos relativos à 
tecnologia de armazenamento (e.g. SQL, NoSQL, arquivos etc.), ferindo o princípio fundamental da coesão, pois a 
classe Pedido ficaria sujeita a dois tipos de mudança: mudanças no negócio e mudanças na tecnologia de 
armazenamento, o que é absolutamente inadequado. 
Criador 
Problema 
A instanciação de objetos é uma das instruções mais presentes em um programa orientado a objetos. 
Embora um comando simples, como new ClasseX em Java, resolva a questão, a instanciação indiscriminada 
Modelagem de Sistemas em UML 
Marcio Quirino - 128 
 
– e sem critérios bem definidos – de objetos por todo o sistema tende a gerar uma estrutura pouco flexível, 
difícil de modificar e com alto acoplamento entre os módulos. 
Portanto, a pergunta que este padrão tenta responder é: 
Quem deve ser responsável pela instanciação de um objeto de determinada classe? 
Solução 
Coloque em uma classe X a responsabilidade de criar uma instância da classe Y se X for um 
agregado formado por instâncias de Y, ou se X possuir os dados de inicialização necessários para a criação 
de uma instância de Y. 
No exemplo do site de vendas de produtos pela internet, considerando o modelo de classes da figura 
Especialista – classes de domínio, qual classe deveria ser responsável pela criação das instâncias de Item 
do Pedido? 
Resposta 
Uma abordagem comum, mas inadequada, é instanciar o item em uma classe de serviço e apenas acumulá-lo 
no Pedido. Entretanto, quando se trata de uma relação entre um agregado e suas partes, a responsabilidade pela 
criação das partes deve ser alocada ao agregado, responsável por todo o ciclo de vida das suas partes (criação e 
destruição). 
A figura a seguir apresenta o diagrama de classes após definirmos a operação adicionarItem na 
classe Pedido. Perceba que as operações vão sendo definidas nas diversas classes à medida que 
estabelecemos os mecanismos de colaboração para cada funcionalidade do sistema. 
 
Padrão Creator – classes de domínio. 
Consequências 
• O padrão Criador é especialmente indicado para a criação de instâncias que formam parte 
de um agregado, por promover uma solução de menor acoplamento. 
• Por outro lado, o padrão Criador não é apropriado em algumas situações especiais, como, 
por exemplo, a criação condicional de uma instância dentro de uma família de classes 
similares. 
Baixo acoplamento 
Problema 
Acoplamento corresponde ao grau de dependência de um módulo em relação a outros módulos do 
sistema. Um módulo com alto acoplamento depende de vários outros módulos e tipicamente apresenta 
problemas como propagação de mudanças pelas relações de dependência, dificuldade de entendê-lo 
Modelagem de Sistemas em UML 
Marcio Quirino - 129 
 
isoladamente e dificuldade de reusá-lo em outro contexto, por exigir a presença dos diversos módulos que 
formam a sua cadeia de dependências. 
Outra questão importante com relação ao acoplamento é a natureza das dependências. 
• Se uma classe A depende de uma classe B, dizemos que A depende de uma implementação 
concreta presente em B. 
• Por outro lado, se uma classe A depende de uma interface I, dizemos que A depende de uma 
abstração, pois A poderia trabalhar com diferentes implementações concretas de I, sem 
depender de nenhuma específica. 
De forma geral, sistemas mais flexíveis são construídos quando fazemos implementações (classes) 
dependerem de abstrações (interfaces), especialmente quando a interface abstrair diferentes possibilidades 
de implementação, seja por envolver diferentes soluções tecnológicas (ex.: soluções de armazenamento e 
recuperação de dados), seja por envolver diferentes questões de negócio (ex.: diferentes regras de negócio, 
diferentes fornecedores de uma mesma solução de pagamento etc.). 
Portanto, a pergunta que este padrão tenta responder é: 
• Como definir relações de dependência entre as classes de um sistema de forma a manter o 
acoplamento baixo, minimizar o impacto de mudanças e facilitar o reuso? 
Solução 
Distribuir as responsabilidades de forma a gerar um baixo acoplamento entre os módulos. 
Para você entender o conceito de baixo acoplamento, vamos apresentar um contraexemplo, isto é, 
uma situação em que foi criado um acoplamento maior do que o desejado. A figura seguinte apresenta outra 
solução para o problema mostrado no padrão Especialista, na qual fazemos o cálculo do preço do item do 
pedido dentro da operação obterValorTotal da classe Pedido. Para isso, percorremos todos os itens do 
pedido, obtemos a quantidade e o produto de cada item, o preço unitário do produto e multiplicamos a 
quantidade pelo preço unitário. 
Essa solução gerou um acoplamento entre Pedido e Produto que não está presente na solução dada 
pelo padrão Especialista. 
 
Consequências 
Acoplamento é um princípio fundamental da estruturação de software que deve ser considerado em 
qualquer decisão de projeto de software. Portanto, avalie com cuidado se cada acoplamento definido no 
projeto é realmente necessário ou se existem alternativas que levariam a um menor acoplamento, ou, ainda, 
se alguma abstração poderia ser criada para não gerar dependência com uma implementação específica. 
Atenção 
Modelagem de Sistemas em UML 
Marcio Quirino - 130 
 
Cuidado para não gerar soluções excessivamente complexas em que não haja motivação real para criar 
soluções mais flexíveis. Em geral, manter as classes de domínio isoladas e não dependentes de tecnologia (ex.: 
persistência, GUI, integração entre sistemas) é uma política geral de acoplamento que deve ser seguida, recomendada 
por diversas proposições de arquitetura. 
Alta coesão 
Problema 
Coesão é uma forma de avaliar se as responsabilidades de um módulo estão fortemente relacionadas 
e têm o mesmo propósito. Buscamos criar módulos com alta coesão, isto é, elementos com 
responsabilidades focadas e com umtamanho aceitável. 
Comentário 
Módulos ou classes com baixa coesão realizam muitas operações pouco correlacionadas, gerando sistemas 
de difícil entendimento, reuso, manutenção e muito sensíveis às mudanças. 
Portanto, a pergunta que este padrão tenta responder é: 
Como definir as responsabilidades dos módulos de forma que a complexidade resultante seja 
gerenciável? 
Solução 
A solução consiste em definir módulos de alta coesão. Mas como se mede a coesão? 
Coesão está ligada ao critério utilizado para reunir um conjunto de elementos em um mesmo módulo. 
Coesão está ligada ao critério utilizado para reunir um conjunto de elementos em um mesmo módulo. 
A. Coesão de um método de uma classe 
Um método reúne um conjunto de instruções. 
B. Coesão de uma classe 
Uma classe reúne um conjunto de atributos e operações. 
C. Coesão de um pacote 
Um pacote reúne um conjunto de classes e interfaces. 
D. Coesão de um subsistema 
Um subsistema reúne um conjunto de pacotes. 
A coesão de um módulo, seja ele classe, pacote ou subsistema, pode ser classificada de acordo com 
o critério utilizado para reunir o conjunto dos elementos que o compõem. 
Devemos estruturar os módulos de forma que eles apresentem coesão funcional, isto é, os elementos 
são agrupados porque, juntos, cumprem um único propósito bem definido. 
As classes do pacote java.io da linguagem Java, por exemplo, estão reunidas por serem 
responsáveis pela entrada e saída de um programa. Nesse pacote, encontramos classes com 
responsabilidades bem específicas, como: 
A. FileOutputStream 
(para escrita de arquivos binários) 
 
Modelagem de Sistemas em UML 
Marcio Quirino - 131 
 
B. FileInputStream 
(para leitura de arquivos binários) 
C. FileReader 
(para leitura de arquivos texto) 
D. FileWriter 
(para escrita de arquivos texto) 
Consequências 
Coesão e acoplamento são princípios fundamentais em projetos de software. A base da 
modularidade de um software está na definição de módulos com alta coesão e baixo acoplamento. 
Comentário 
Sistemas construídos com módulos apresentando alta coesão tendem a ser mais flexíveis, mais fáceis de 
serem entendidos e evoluídos, além de proporcionarem mais possibilidades de reutilização e de um projeto com baixo 
acoplamento. 
Entretanto, em sistemas distribuídos é preciso balancear a elaboração de módulos com 
responsabilidades específicas com o princípio fundamental de sistemas distribuídos, que consiste em 
minimizar as chamadas entre processos. 
Controlador 
Problema 
Um sistema interage com elementos externos, também conhecidos como atores. Muitos elementos 
externos geram eventos que devem ser capturados pelo sistema, processados e produzir alguma resposta, 
interna ou externa. 
Por exemplo, quando o cliente solicita o fechamento de um pedido na nossa loja online, esse evento 
precisa ser capturado e processado pelo sistema. Este padrão procura resolver o seguinte problema: 
A quem devemos atribuir a responsabilidade de tratar os eventos que correspondam a requisições 
de operações para o sistema? 
Solução 
Atribuir a responsabilidade de receber um evento do sistema e coordenar a produção da sua resposta 
a uma classe que represente uma das seguintes opções: 
A. Opção 1 
Uma classe correspondente ao sistema ou a um subsistema específico, solução conhecida pelo 
nome Controlador Fachada. Normalmente é utilizada em sistemas com poucos eventos. 
B. Opção 2 
Uma classe correspondente a um caso de uso onde o evento ocorra. Normalmente essa classe 
tem o nome formado pelo nome do caso de uso com um sufixo Processador, Controlador, 
Sessao ou algo similar. 
Essa classe deve reunir o tratamento de todos os eventos que o sistema receba no contexto deste 
caso de uso. Esta solução evita a concentração das responsabilidades de tratamento de eventos de 
diferentes funcionalidades em um único Controlador Fachada, evitando a criação de um módulo com baixa 
coesão. 
Modelagem de Sistemas em UML 
Marcio Quirino - 132 
 
Atenção 
Note que esta classe não cumpre responsabilidades de interface com o usuário. Em um sistema de home 
banking, por exemplo, o usuário informa todos os dados de uma transação de transferência em um componente de 
interface com o usuário e, ao pressionar o botão transferir, esse componente delega a requisição para o controlador 
realizar o processamento lógico da transferência. Assim, o mesmo controlador pode atender a solicitações realizadas 
por diferentes interfaces com o usuário (web, dispositivo móvel, totem 24 horas). 
Consequências 
Normalmente, um módulo Controlador, ao receber uma requisição, coordena e controla os elementos 
que são responsáveis pela produção da resposta. 
• Em uma orquestra, um maestro comanda o momento em que cada músico deve entrar em 
ação, mas ele mesmo não toca nenhum instrumento. 
• Da mesma forma, um módulo Controlador é o grande orquestrador de um conjunto de objetos, 
cada qual com sua responsabilidade específica na produção da resposta ao evento. 
Um problema que pode ocorrer com este padrão é alocar ao Controlador responsabilidades além da 
orquestração, como se o maestro, além de comandar os músicos, ficasse responsável também por tocar 
piano, flauta e outros instrumentos. Essa concentração de responsabilidades no Controlador gera um 
módulo grande, complexo e que ninguém se sente confortável em evoluir. 
Polimorfismo 
Problema 
Como evitar construções condicionais complexas no código? 
Suponha que você esteja implementando a parte de pagamento em cartão de uma loja virtual. Para 
realizar um pagamento interagindo diretamente com uma administradora de cartão, temos que passar por 
um processo longo e complexo de homologação junto a ela. Imagine realizar esse processo com cada 
administradora! 
Broker 
Broker é o software intermediário que permite que programadores façam chamadas a programas de um 
computador para outro. 
API 
Interface de Programação de Aplicação, do inglês Application Programming Interface 
Para simplificar o problema, existem diferentes brokers de pagamento que já são homologados com 
as diversas administradoras e fornecem uma API para integração com a nossa aplicação. Cada broker tem 
uma política de preços e volume de transações e, eventualmente, podem surgir novos broker com políticas 
mais atrativas no mercado. 
Agora imagine que fornecemos uma solução de software de loja virtual para diferentes lojas, que 
podem demandar diferentes brokers de pagamento em função das suas exigências de segurança, preço e 
volume de transações. Isso significa que o nosso software tem que ser capaz de funcionar com diferentes 
brokers, cada um com a sua API. 
Sem polimorfismo, esse problema poderia ser resolvido com uma solução baseada em if-then-else 
ou switch-case, sendo cada alternativa de brokers mapeada para um comando case no switch ou em uma 
condição no if-then-else (figura a seguir). 
Pense como ficaria esse código se houvesse vinte brokers diferentes. 
Modelagem de Sistemas em UML 
Marcio Quirino - 133 
 
 
Solução sem polimorfismo. 
O problema que esse padrão resolve é o seguinte: 
Como escrever uma solução genérica para alternativas baseadas no tipo de um elemento, criando 
módulos plugáveis? 
No nosso exemplo, as alternativas são todos os diferentes tipos de brokers com as suas respectivas 
APIs. 
Solução 
Percebeu como a solução baseada em estruturas condicionais do tipo if-then-else ou switch-case, 
além de serem mais complexas, criam um acoplamento do módulo chamador com cada implementação 
específica? Note como a classe Fechamento Pedido depende diretamente de todas as implementações de 
broker de pagamento. 
A solução via polimorfismo consiste em criar uma interface genérica para a qual podem existir 
diversas implementações específicas (veja na figura seguinte). 
A estrutura condicional é substituída por uma única chamada utilizando essa interface genérica. O 
chamador, portanto, não precisa saber quem estádo outro lado da interface concretamente provendo a 
implementação. Essa capacidade de um elemento (a interface genérica) poder assumir diferentes formas 
concretas (broker1, broker2 ou broker3, no nosso exemplo) é conhecida como polimorfismo. 
 
Solução com polimorfismo. 
Consequências 
Polimorfismo é um princípio fundamental em projetos de software orientados a objetos que nos ajuda 
a resolver, de forma sintética, elegante e flexível, o problema de lidar com variantes de implementação de 
uma mesma operação conceitual. 
Modelagem de Sistemas em UML 
Marcio Quirino - 134 
 
Dica 
Esse princípio geral é utilizado para a definição de diversos padrões GoF, tais como: Adapter, Command, 
Composite, Proxy, State e Strategy. 
Entretanto, é preciso ter cuidado para não implementar estruturas genéricas em situações em que 
não haja possibilidade de variação. Uma solução genérica é mais flexível, mas é preciso estar atento para 
não investir esforço na produção de soluções genéricas para problemas que sejam específicos por natureza, 
isto é, que não apresentem variantes de implementação. 
3. Características dos princípios SOLID 
Princípios SOLID 
Você já ouviu falar em SOLID? 
Esse termo é frequentemente encontrado como um conhecimento requisitado em perfis de vagas 
para desenvolvimento de software. 
SOLID é um acrônimo para cinco princípios de projeto orientado a objetos, definidos por Robert C. 
Martin, que devem ser seguidos para nos ajudar a produzir software com uma estrutura sólida, isto é, uma 
estrutura que permita sua evolução e manutenção com menor esforço. 
Cada letra do acrônimo corresponde a um dos princípios: 
S. Single-Responsibility Principle (SRP) 
O. Open-closed Principle (OCP) 
L. Liskov Substitution Principle (LSP) 
I. Interface Segregation Principle (ISP) 
D. Dependency Inversion Principle (DIP) 
Princípio da Responsabilidade Única (SRP) 
O princípio SRP (do inglês Single Responsibility Principle) estabelece que o módulo deve ser 
responsável por um – e apenas um – ator, representando o papel desempenhado por alguém envolvido com 
o software. Nesse contexto, um módulo corresponde a um arquivo-fonte. 
Exemplo 
Em Java, um módulo corresponde a uma classe. 
Suponha que a nossa loja virtual tenha requisitos de busca de produtos por nome e por 
departamento, cadastro de um novo produto e exportação de dados dos produtos em formato CSV. Se 
pensarmos conforme o padrão Especialista, por exemplo, todas essas funcionalidades trabalham com os 
dados dos produtos e, portanto, poderiam ser alocadas ao módulo ProdutoRepository, conforme ilustrado 
na figura seguinte. 
 
Violação do princípio SRP. 
Modelagem de Sistemas em UML 
Marcio Quirino - 135 
 
Atenção 
Essa alocação de responsabilidades viola o princípio SRP, pois define um módulo que atende a diferentes 
atores. 
Vamos analisar os atores envolvidos com cada responsabilidade do módulo: 
• Pesquisar produtos por nome e por departamento são demandas do cliente da loja. 
• Incluir produto é uma demanda da área de vendas. 
• GerarCSV é uma demanda da área de integração de sistemas. 
Portanto, o módulo ProdutoRepository apresenta diferentes razões para mudar: a área de integração 
pode demandar um novo formato para a exportação dos dados dos produtos, enquanto os clientes podem 
demandar novas formas de pesquisar os produtos. 
De acordo com o princípio SRP, devemos separar essas responsabilidades em três módulos, o que 
nos daria a flexibilidade de, por exemplo, separar a busca de produtos e a inclusão de produtos em serviços 
fisicamente independentes, o que possibilitaria atender diferentes demandas de escalabilidade de forma 
mais racional. 
Exemplo 
A busca de produtos pode ter que atender a milhares de clientes simultâneos, enquanto esse número, no caso 
da inclusão de produtos, não deve passar de algumas dezenas de usuários. 
Princípio Aberto Fechado (OCP) 
O princípio OCP (do inglês Open Closed Principle) estabelece que um módulo deve estar aberto para 
extensões, mas fechado para modificações, isto é, seu comportamento deve ser extensível sem que seja 
necessário alterá-lo para acomodar as novas extensões. 
Quando uma mudança em um módulo causa uma cascata de modificações em módulos 
dependentes, isso é sinal de que a estrutura do software não acomoda mudanças adequadamente. Se 
aplicado de forma adequada, este princípio permite que futuras mudanças desse tipo sejam feitas pela 
adição de novos módulos, e não pela modificação de módulos já existentes. 
Você deve estar pensando como é possível fazer com que um módulo estenda seu comportamento 
sem que seja necessário mudar uma linha do seu código. A chave para esse enigma chama-se abstração. 
Em uma linguagem orientada a objetos, é possível criar uma interface abstrata que apresente diferentes 
implementações concretas e, portanto, um novo comportamento, em conformidade com essa abstração, 
pode ser adicionado simplesmente criando-se um módulo. 
O exemplo a seguir apresenta um código que não segue o princípio Open Closed. A classe 
CalculadoraGeometrica contém operações para calcular a área de triângulos e quadrados. 
Violação do princípio OCP (clonagem). 
 
public class Triangulo { 
 private double base; 
 private double altura; 
 
 public double getBase() { 
 return base; 
 } 
 
 public void setBase(double base) { 
 this.base = base; 
 } 
 
 public double getAltura() { 
 return altura; 
 } 
Modelagem de Sistemas em UML 
Marcio Quirino - 136 
 
 
 public void setAltura(double altura) { 
 this.altura = altura; 
 } 
} 
 
public class Quadrado { 
 double lado; 
 
 public double getLado() { 
 return lado; 
 } 
 
 public void setLado(double lado) { 
 this.lado = lado; 
 } 
} 
 
public class CalculadoraGeometrica { 
 public double obterArea(Quadrado quadrado) { 
 return quadrado.getLado() * quadrado.getLado(); 
 } 
 
 public double obterArea(Triangulo triangulo) { 
 return triangulo.getBase() * triangulo.getAltura() / 2; 
 } 
} 
Imagine que o programa tenha que calcular a área de um círculo, por exemplo. 
O módulo CalculadoraGeometrica poderá calcular a área de um círculo sem que o seu código seja 
alterado? 
Não, pois teremos que adicionar uma nova operação obterArea à CalculadoraGeometrica. Essa é 
uma forma comum de violação, em que uma classe concentra diversas operações da mesma natureza que 
operam sobre tipos diferentes. 
O exemplo a seguir ilustra outra forma comum de violação do princípio OCP. 
public class FiguraGeometrica { 
} 
 
public class Triangulo extends FiguraGeometrica { 
 private double base; 
 private double altura; 
 
 public double getBase() { 
 return base; 
 } 
 
 public void setBase(double base) { 
 this.base = base; 
 } 
 
 public double getAltura() { 
 return altura; 
 } 
 
 public void setAltura(double altura) { 
 this.altura = altura; 
 } 
} 
 
public class Quadrado extends FiguraGeometrica { 
 double lado; 
 
 public double getLado() { 
 return lado; 
 } 
Modelagem de Sistemas em UML 
Marcio Quirino - 137 
 
 
 public void setLado(double lado) { 
 this.lado = lado; 
 } 
} 
 
public class CalculadoraGeometrica { 
 public double obterArea(FiguraGeometrica figura) { 
 if (figura instanceof Quadrado) { 
 return obterAreaQuadrado((Quadrado) figura); 
 } else if (figura instanceof Triangulo) { 
 return obterAreaTriangulo((Triangulo) figura); 
 } else { 
 return 0.0; 
 } 
 } 
 
 private double obterAreaQuadrado(Quadrado quadrado) { 
 return quadrado.getLado() * quadrado.getLado(); 
 } 
 
 private double obterAreaTriangulo(Triangulo triangulo) { 
 return triangulo.getBase() * triangulo.getAltura() / 2; 
 } 
} 
Neste caso, a classe CalculadoraGeometrica possui uma operaçãoobterArea, que recebe um tipo 
genérico FiguraGeometrica, mas continua concentrando a lógica de cálculo para todos os tipos de figuras. 
Para incluir um círculo, precisaríamos adicionar a operação obterAreaCirculo e modificar a implementação 
da operação obterArea, inserindo uma nova condição. Imagine como ficaria o código dessa operação se ela 
tivesse que calcular a área de cinquenta tipos diferentes de figuras geométricas! 
O que devemos fazer para que o módulo CalculadoraGeometrica possa estar aberto para trabalhar 
com novos tipos de figuras sem precisarmos alterar o seu código? 
A resposta está no emprego da abstração e, neste exemplo, dos princípios do Especialista e do 
Polimorfismo. 
• Para isso, definimos que toda figura geométrica é capaz de calcular sua área, sendo que a 
fórmula de cálculo de cada figura específica deve ser implementada nas realizações 
concretas de FiguraGeometrica. 
• Dessa forma, para adicionar uma nova figura geométrica, basta adicionar um novo módulo 
com uma implementação específica para essa operação. 
O próximo exemplo ilustra a nova estrutura do projeto. 
A classe FiguraGeometrica define uma operação abstrata obterArea. Aplicando o princípio do 
Especialista, cada subclasse fica responsável pelo cálculo da sua área. Aplicando o princípio do 
Polimorfismo, o módulo CalculadoraGeometrica passa a depender apenas da abstração FiguraGeometrica, 
que define que todo elemento desse tipo é capaz de calcular a sua área. Dessa forma, a calculadora 
geométrica pode funcionar com novos tipos de figuras, sem que seja necessário alterar o seu código, uma 
vez que ela deixou de depender da forma específica da figura. 
Reestruturação adequada ao princípio OCP. 
 
public abstract class FiguraGeometrica { 
 public abstract double obterArea(); 
} 
 
public class Triangulo extends FiguraGeometrica { 
 private double base; 
 private double altura; 
Modelagem de Sistemas em UML 
Marcio Quirino - 138 
 
 
 public double obterArea() { 
 return this.getBase() * this.getAltura() / 2; 
 } 
 
 public double getBase() { 
 return base; 
 } 
 public void setBase(double base) { 
 this.base = base; 
 } 
 public double getAltura() { 
 return altura; 
 } 
 public void setAltura(double altura) { 
 this.altura = altura; 
 } 
} 
 
public class Quadrado extends FiguraGeometrica { 
 double lado; 
 
 public double obterArea() { 
 return this.getLado() * this.getLado(); 
 } 
 public double getLado() { 
 return lado; 
 } 
 public void setLado(double lado) { 
 this.lado = lado; 
 } 
} 
 
public class CalculadoraGeometrica { 
 public double obterArea(FiguraGeometrica figura) { 
 return figura.obterArea(); 
Princípio da Substituição de Liskov (LSP) 
O princípio LSP (do inglês Liskov Substitution Principle) foi definido em 1988 por Barbara Liskov e 
estabelece que um tipo deve poder ser substituído por qualquer um de seus subtipos sem alterar o correto 
funcionamento do sistema. 
O exemplo seguinte apresenta um caso clássico de violação do princípio de Liskov. Na geometria, 
um quadrado pode ser visto como um caso particular de um retângulo. Se levarmos essa propriedade para 
a implementação em software, podemos definir uma classe Quadrado como uma extensão da classe 
Retangulo. 
Atenção 
Note que, como a largura do quadrado é igual ao comprimento, a implementação dos métodos de acesso 
(setLargura e setComprimento) do quadrado deve se preocupar em preservar essa propriedade. 
Princípio LSP (Quadrado) 
 
 
public class Retangulo { 
 private double largura; 
 private double comprimento; 
 
 public double area() { 
 return largura * comprimento; 
 } 
 
 public double getLargura() { 
 return largura; 
 } 
Modelagem de Sistemas em UML 
Marcio Quirino - 139 
 
 public void setLargura(double largura) { 
 this.largura = largura; 
 } 
 public double getComprimento() { 
 return comprimento; 
 } 
 public void setComprimento(double comprimento) { 
 this.comprimento = comprimento; 
 } 
} 
 
public class Quadrado extends Retangulo { 
 public void setLargura(double largura) { 
 super.setLargura(largura); 
 super.setComprimento(largura); 
 } 
 public void setComprimento(double largura) { 
 super.setLargura(largura); 
 super.setComprimento(largura); 
 } 
} 
Porém, o próximo exemplo mostra como essa solução viola o princípio da substituição de Liskov. O 
método verificarArea da classe ClienteRetangulo recebe um objeto r do tipo Retangulo. 
De acordo com esse princípio, o código desse método deveria funcionar com qualquer objeto de um 
tipo derivado de Retangulo. Entretanto, no caso de um objeto do tipo Quadrado, a execução da chamada 
setComprimento fará com que os dois atributos do quadrado passem a ter o valor 10. Em seguida, a 
execução da chamada setLargura fará com que os dois atributos do quadrado passem a ter o valor 8 e, 
portanto, o valor retornado pelo método área definido na classe Retangulo será 64 e não 80, violando o 
comportamento esperado para um retângulo. 
Violação do princípio LSP 
 
public class ClienteRetangulo { 
 public void verificarArea(Retangulo r) throws Exception { 
 r.setComprimento(10); 
 r.setLargura(8); 
 if (r.area() != 80) { 
 throw new Exception("area incorreta"); 
 } 
 } 
} 
Esse caso ilustra que, embora um quadrado possa ser classificado como um caso particular de um 
retângulo, o princípio de Liskov estabelece que um subtipo não pode estabelecer restrições adicionais que 
violem o comportamento genérico do supertipo. Nesse caso, o fato de o quadrado exigir que comprimento 
e largura sejam iguais o torna mais restrito que o retângulo. Portanto, definir a classe Quadrado como um 
subtipo de Retangulo é uma solução inapropriada para este problema, do ponto de vista da orientação a 
objetos, por violar o princípio de Liskov. 
Princípio da Segregação de Interfaces (ISP) 
O princípio ISP (do inglês Interface Segregation Principle) estabelece que clientes de uma classe não 
devem ser forçados a depender de operações que eles não utilizem. 
O código do exemplo a seguir apresenta uma interface que viola esse princípio por reunir operações 
que dificilmente serão utilizadas em conjunto. As operações login e registrar estão ligadas ao registro e à 
autorização de acesso de um usuário, enquanto a operação logErro registra mensagens de erro ocorridas 
durante algum processamento, e a operação enviarEmail permite enviar um e-mail para o usuário logado. 
 
Modelagem de Sistemas em UML 
Marcio Quirino - 140 
 
Violação do princípio ISP 
 
public interface IUsuario { 
 boolean login(String login, String senha); 
 boolean registrar(String login, String senha, String email); 
 void logErro(String msgErro); 
 boolean enviarEmail(String assunto, String conteudo); 
} 
Segundo este princípio, devemos manter a coesão funcional das interfaces, evitando colocar 
operações de diferentes naturezas em uma única interface. Aplicando ao exemplo, poderíamos segregar a 
interface original em três interfaces (exemplo a seguir): 
• IAutorizacao, com as operações de login e registro de usuários; 
• IMensagem, com as operações de registro de erro, aviso e informações; 
• IEmail para o envio de e-mail. 
Segregação das interfaces 
 
public interface IAutorizacao { 
 boolean login(String login, String senha); 
 boolean registrar(String login, String senha, String email); 
} 
 
public interface IEmail { 
 boolean enviarEmail(String assunto, String conteudo); 
} 
 
public interface IMensagem { 
 void logErro(String msgErro); 
 void logAviso(String msgAviso); 
 void logInfo(String msgInfo); 
} 
Princípio da Inversãode Dependências (DIP) 
O princípio DIP (do inglês Dependency Inversion Principle) estabelece que as entidades concretas 
devem depender de abstrações e não de outras entidades concretas. Isso é especialmente importante 
quando estabelecemos dependências entre entidades de camadas diferentes do sistema. 
Segundo este princípio, um módulo de alto nível não deve depender de um módulo de baixo nível. 
A. Módulos de alto nível 
São aqueles ligados estritamente ao domínio da aplicação (ex.: Loja, Produto, ServiçoVenda 
etc.). 
B. Módulos de baixo nível 
São ligados a alguma tecnologia específica (ex.: acesso a banco de dados, interface com o 
usuário etc.) e, portanto, mais voláteis. 
O próximo exemplo apresenta um caso de dependência de um módulo de alto nível em relação a um 
módulo de baixo nível. A classe ServicoConsultaProduto depende diretamente da implementação de um 
repositório de produtos que acessa um banco de dados relacional Oracle. 
Essa dependência é estabelecida na operação obterPrecoProduto da classe 
ServicoConsultaProduto pelo comando new ProdutoRepositoryOracle(). 
 
 
Modelagem de Sistemas em UML 
Marcio Quirino - 141 
 
Violação do princípio da Inversão de Dependências 
 
public class ProdutoRepositoryOracle { 
 public Produto obterProduto(String codigo) { 
 Produto p = new Produto(); 
 // implementacao SQL de recuperação do produto 
 return p; 
 } 
 
 public void salvarProduto(Produto produto) { 
 // implementacao SQL de insert ou update do produto 
 } 
} 
 
public class ServicoConsultaProduto { 
 public double obterPrecoProduto(String codigo) { 
 ProdutoRepositoryOracle repositório 
 = new ProdutoRepositoryOracle(); 
 Produto produto = repositorio.obterProduto(codigo); 
 return produto.getPreco(); 
 } 
} 
A figura a seguir apresenta, em um diagrama UML, a relação de dependência existente entre a classe 
concreta ServicoConsultaProduto e a classe concreta ProdutoRepositoryOracle. 
 
Violação do DIP (Diagrama UML). 
Por que essa dependência é inadequada? 
Como aspectos tecnológicos são voláteis, devemos isolar a lógica de negócio, permitindo que a 
implementação concreta desses aspectos possa variar sem afetar as classes que implementam a lógica de 
negócio. 
O exemplo a seguir apresenta uma solução resultante da aplicação deste princípio. A interface 
abstrata (ProdutoRepository) define um contrato abstrato entre cliente (ServicoConsultaProduto) e 
fornecedor (ProdutoRepositoryOracle). Em vez de o cliente depender de um fornecedor específico, ambos 
passam a depender dessa interface abstrata. 
Assim, a classe ServicoConsultaProduto pode trabalhar com qualquer implementação concreta da 
interface ProdutoRepository, sem que seu código precise ser alterado. 
public interface ProdutoRepository { 
 Produto obterProduto(String codigo); 
 void salvarProduto(Produto produto); 
} 
public class ProdutoRepositoryOracle implements ProdutoRepository { 
 public Produto obterProduto(String codigo) { 
 Produto p = new Produto(); 
 // implementacao SQL de recuperação do produto 
 return p; 
 } 
 
 public void salvarProduto(Produto produto) { 
 // implementacao SQL de insert ou update do produto 
 } 
} 
 
public class ServicoConsultaProduto { 
 ProdutoRepository repositorio; 
Modelagem de Sistemas em UML 
Marcio Quirino - 142 
 
 
 public ServicoConsultaProduto(ProdutoRepository repositorio) { 
 this.repositorio = repositorio; 
 } 
 public double obterPrecoProduto(String codigo) { 
 Produto produto = repositorio.obterProduto(codigo); 
 return produto.getPreco(); 
 } 
} 
A figura a seguir apresenta o diagrama UML correspondente à nova estrutura da solução após a 
aplicação desse princípio. A classe ServicoConsultaProduto depende apenas da interface 
ProdutoRepository, enquanto a classe ProdutoRepositoryOracle é uma das possíveis implementações 
concretas dessa interface. 
 
Diagrama UML da solução de acordo com o DIP. 
4. Propósito dos principais padrões GoF e as situações nas 
quais eles podem ser aplicados 
Este módulo apresenta uma seleção de alguns dos padrões GoF mais utilizados no desenvolvimento 
de sistemas. 
Factory Method 
Problema 
Este padrão define uma interface genérica de criação de um objeto, deixando a decisão da classe 
específica a ser instanciada para as implementações concretas dessa interface. Este padrão é muito 
utilizado no desenvolvimento de frameworks. 
Os frameworks definem pontos de extensão (hot spots) nos quais devem ser feitas adaptações do 
código para um sistema específico. Tipicamente, os frameworks definem classes e interfaces abstratas que 
devem ser implementadas nas aplicações que os utilizem. Um exemplo de framework muito usado em Java 
é o Spring. 
Por que este padrão é importante? 
Em aplicações desenvolvidas em Java, por exemplo, podemos criar um objeto de uma classe 
simplesmente utilizando o operador new. 
Comentário 
Embora seja uma solução aceitável para pequenos programas, à medida que o sistema cresce, a quantidade 
de códigos para criar objetos também cresce, espalhando-se por todo o sistema. 
Modelagem de Sistemas em UML 
Marcio Quirino - 143 
 
Como a criação de um objeto determina dependência entre a classe onde a instanciação está sendo 
feita e a classe instanciada, é preciso muito cuidado para não criar dependências que dificultem futuras 
evoluções do sistema. 
Solução 
A figura a seguir apresenta a estrutura de solução proposta pelo padrão Factory Method. 
Os participantes são: 
1. Produto: define o tipo abstrato dos objetos criados pelo padrão. Todos os objetos 
concretamente instanciados serão derivados deste tipo. 
2. ProdutoConcreto: corresponde a qualquer classe concreta que implementa a definição 
abstrata do tipo Produto. Representa as classes específicas em uma aplicação desenvolvida 
com um framework. 
3. Criador: declara um Factory Method que define uma interface abstrata que retorna um objeto 
genérico do tipo Produto. 
4. CriadorConcreto: corresponde a qualquer classe concreta que implemente o Factory Method 
definido abstratamente no Criador. 
 
Estrutura do padrão Factory Method. 
A figura seguinte apresenta um exemplo de aplicação do padrão. 
• Na parte superior, estão as classes que pertencem a um framework genérico de geração de 
relatório. 
• Na parte inferior, estão as classes concretas de uma aplicação que utiliza o framework para 
gerar um relatório de vendas. 
As operações criarCabecalho, criarCorpo e criarRodape, definidas na classe genérica, são 
implementadas concretamente na classe RelatorioVendas. Cada método dessa subclasse cria um objeto 
específico que implementa os tipos abstratos Cabecalho, Corpo e Rodape definidos no framework. 
A classe Relatorio desempenha o papel de Criador, a classe RelatorioVendas corresponde ao 
participante CriadorConcreto, enquanto as classes Cabecalho, Corpo e Rodape desempenham o papel de 
Produto; finalmente, as classes CabecalhoVendas, CorpoVendas e RodapeVendas correspondem ao 
participante ProdutoConcreto. 
Modelagem de Sistemas em UML 
Marcio Quirino - 144 
 
 
Exemplo do padrão Factory Method. 
Consequências 
O padrão Factory Method permite criar estruturas arquiteturais genéricas (frameworks), provendo 
pontos de extensão por meio de operações que instanciam os objetos específicos da aplicação. Dessa 
forma, todo código genérico pode ser escrito no framework e reutilizado em diferentes aplicações, evitando 
soluções baseadas em clonagem ou em estruturas condicionais complexas. 
Adapter 
Problema 
O problema resolvido por este padrão é análogo ao da utilização de tomadas em diferentes partes 
do mundo. 
Exemplo 
Quando um turista americano chega em um hotel no Brasil, ele provavelmente não conseguirá colocar o seu 
carregador de celular na tomada queestá na parede do quarto. 
 
Como ele não pode mudar a tomada que está na parede, pois ela é propriedade do hotel, a solução é utilizar 
um adaptador que converta os pinos do carregador americano em uma saída de três pinos compatível com as tomadas 
brasileiras. 
Como esse problema ocorre em um software? 
1. Imagine que estamos desenvolvendo um software para a operação de vendas de diferentes 
lojas de departamentos, e que cada loja possa utilizar uma solução de pagamento dentre as 
diversas disponíveis no mercado. 
Modelagem de Sistemas em UML 
Marcio Quirino - 145 
 
2. O problema é que cada fornecedor permite a realização de um pagamento em cartão de 
crédito por meio de uma API específica fornecida por ele. 
3. Portanto, o software de vendas deve ser capaz de ser plugado a diferentes API de pagamento 
que oferecem basicamente o mesmo serviço: intermediar as diversas formas de pagamento 
existentes no mercado. 
Gostaríamos de poder fazer um software de vendas aderente ao princípio Open Closed, isto é, um 
software que pudesse trabalhar com novos fornecedores que apareçam no mercado, sem termos que mexer 
em módulos já existentes. 
Solução 
O Adapter é um padrão estrutural, cuja estrutura é apresentada na figura a seguir. 
O participante Fornecedor define uma API proprietária e que não pode ser alterada. O participante 
Alvo representa a generalização dos serviços oferecidos pelos diferentes fornecedores. Os demais módulos 
do sistema utilizarão apenas este participante, ficando isolados do fornecedor concreto da implementação. 
O participante adaptador transforma uma requisição genérica feita pelo cliente em uma chamada à API 
específica do fornecedor com o qual ele está conectado. 
Atenção 
Note que cada fornecedor possuirá um adaptador específico, da mesma forma que existem adaptadores 
específicos para cada padrão de tomada. 
 
Estrutura do padrão Adapter 
A figura a seguir apresenta como este padrão poderia ser aplicado no problema do software para a 
loja de departamentos. Suponha que existam dois brokers de pagamento (ABC e XPTO), sendo as suas 
respectivas API representadas pelas classes BrokerPagamentoABC e BrokerPagamentoXPTO. Note que 
as operações dessas classes, embora similares, têm nomes diferentes e poderiam também ter parâmetros 
de chamada e retorno diferentes. Essas classes são fornecidas pelos fabricantes e não podem ser 
alteradas. 
A aplicação deste padrão consiste em definir uma interface genérica (BrokerPagamento) que será 
utilizada em todos os módulos do sistema que precisem interagir com o brokers de pagamento 
(representados genericamente pela classe Cliente do diagrama). Para cada API específica, criamos um 
adaptador que implementa a interface genérica BrokerPagamento, traduzindo a chamada da operação 
genérica pagtoEmCartaoCredito para o protocolo específico da API. Dessa forma, a operação do 
AdaptadorBrokerABC chamará a operação pagarCartaoCredito do BrokerPagamentoABC, enquanto a 
operação do AdaptadorBrokerXPTO chamará a operação efetuarPagtoCredito de BrokerPagamentoXPTO. 
Modelagem de Sistemas em UML 
Marcio Quirino - 146 
 
 
Exemplo do padrão Adapter. 
Consequências 
O padrão Adapter permite incorporar módulos previamente desenvolvidos, modificando sua interface 
original sem que haja necessidade de alterá-los, possibilitando a utilização de diferentes implementações 
proprietárias por meio de uma única interface, sem criar dependências dos módulos clientes com as 
implementações proprietárias. 
Facade 
Problema 
O problema resolvido pelo padrão estrutural Facade (fachada) é reduzir a complexidade de 
implementação de uma operação do sistema, fornecendo uma interface simples de uso, ao mesmo tempo 
em que evita que a implementação precise lidar com diferentes tipos de objetos e chamadas de operações 
específicas. 
A próxima figura apresenta uma situação típica em que o padrão Facade pode ser utilizado. A classe 
GUI Ponto de Venda representa um elemento da camada de interface com o usuário responsável por 
registrar itens vendidos no caixa da loja. Para isso, quando os dados do item são entrados pelo operador, a 
implementação busca o produto chamando uma operação da classe ProdutoRepository, cria um ItemVenda 
adicionando-o a um objeto Venda, e salva a nova configuração da Venda chamando uma operação da classe 
VendaRepository. Essa solução é inadequada, pois cria inúmeras dependências e gera maior complexidade 
em uma classe de interface com o usuário. 
 
Padrão Facade – problema. 
Modelagem de Sistemas em UML 
Marcio Quirino - 147 
 
Solução 
A figura a seguir mostra como essas dependências entre um elemento de interface com o usuário e 
os elementos de negócio e armazenamento podem ser simplificadas pela introdução da classe 
ServicoVenda. Ela passa a servir de fachada para a execução de uma operação complexa do sistema, 
oferecendo uma interface única e simplificada para a classe GUI Ponto de Venda. Em vez de chamar várias 
operações de diferentes objetos, basta ela chamar a operação registrarItem definida na classe fachada. 
Dessa forma, os elementos da camada de interface com o usuário ficam isolados da complexidade de 
implementação e da estrutura interna dos objetos pertencentes à lógica de negócio envolvida na operação. 
 
Padrão Facade – solução. 
Consequências 
O padrão Facade é bastante utilizado na estruturação dos serviços lógicos que um sistema oferece, 
isolando a camada de interface com o usuário da estrutura da lógica de negócio do sistema. Portanto, este 
padrão nada mais é do que a aplicação do princípio da abstração, em que isolamos um cliente de detalhes 
irrelevantes de implementação, promovendo uma estrutura com menor acoplamento entre as camadas. 
Strategy 
Problema 
O problema resolvido pelo padrão Strategy ocorre quando temos diferentes algoritmos para realizar 
determinada tarefa. 
Exemplo 
Uma loja de departamentos pode ter diferentes políticas de desconto aplicáveis em função da época do ano 
(ex.: Natal, Páscoa, Dia das Mães, Dia das Crianças). 
Como organizar esses algoritmos de forma que possamos respeitar o princípio Open Closed, fazendo 
com que o sistema de vendas possa aplicar novas políticas de desconto sem que seja necessário modificar 
o que já está implementado? 
Solução 
O padrão Strategy define uma família de algoritmos, onde cada um é encapsulado em sua própria 
classe. Os diferentes algoritmos compõem uma família que pode ser utilizada de forma intercambiável, e 
novos algoritmos podem ser adicionados à família sem afetar o código existente. 
A figura a seguir apresenta a estrutura do padrão. O tipo Estrategia define uma interface comum a 
todos os algoritmos, podendo ser implementado como uma classe abstrata ou como uma interface. Essa 
interface genérica é utilizada pelo participante Contexto quando este necessitar que o algoritmo seja 
Modelagem de Sistemas em UML 
Marcio Quirino - 148 
 
executado. Estrategia A, B e C são implementações específicas do algoritmo genérico que o participante 
Contexto pode disparar. A estratégia específica deve ser injetada no módulo Contexto, que pode alimentar 
a estratégia com seus dados. 
 
Padrão Strategy – estrutura. 
A próxima figura apresenta um exemplo de aplicação do padrão Strategy. A classe Venda representa 
uma venda da loja de departamentos. Uma política de desconto pode ser associada a uma venda no 
momento de sua instanciação e utilizada para cálculo do valor a ser pago pelo cliente. 
Para obter o valor a pagar da Venda, basta obter o seu valor total, somando o valor dos seus itens, 
e subtrair o valor retornado pela operação aplicar da instância de PoliticaDesconto, associada ao objeto 
venda. 
Note que novas políticas podem ser agregadas à solução, bastando adicionar uma nova 
implementação da interface PoliticaDesconto. Nenhuma alteração na classe Venda é necessária, pois ela 
faz uso apenas da interface genérica, não dependendo denenhuma política de descontos específica. 
 
Exemplo do padrão Strategy. 
Consequências 
O padrão Strategy permite separar algoritmos de diferentes naturezas dos elementos necessários 
para sua execução. No exemplo da loja de departamentos, podemos aplicar à Venda diferentes tipos de 
algoritmo, tais como: política de desconto, cálculo de frete e prazo de entrega, entre outros. Cada tipo de 
algoritmo conta com especializações que podem ser implementadas em uma família própria de algoritmos. 
O padrão Strategy oferece uma solução elegante e extensível para o encapsulamento de algoritmos 
que podem ter diferentes implementações, isolando, de suas implementações concretas, os módulos 
clientes desses algoritmos. Além disso, permite a remoção de estruturas condicionais complexas 
normalmente presentes quando essas variações não são implementadas com este padrão. 
Modelagem de Sistemas em UML 
Marcio Quirino - 149 
 
Template Method 
Problema 
O padrão Template Method é aplicável quando temos diferentes implementações de uma operação 
em que alguns passos são idênticos e outros são específicos de cada implementação. 
Para ilustrar o problema, suponha a implementação de duas máquinas de bebidas: uma de café e 
outra de chá. O procedimento de preparação é bem similar, com alguns passos em comum e outros 
específicos: 
Máquina de café Máquina de chá 
Esquentar a água Esquentar a água 
Preparar mistura (via moagem do café) Preparar mistura (via infusão do chá) 
Colocar a mistura no copo Colocar a mistura no copo 
Adicionar açúcar, se selecionado Adicionar açúcar, se selecionado 
Adicionar leite, se selecionado Adicionar limão, se selecionado 
Liberar a bebida Liberar a bebida 
 
O problema consiste em implementar diferentes formas concretas de um algoritmo padrão contendo 
pontos de variação, sem clonar o algoritmo em cada forma concreta, nem produzir uma única implementação 
contendo diversas estruturas condicionais. 
Solução 
A figura a seguir apresenta a estrutura geral da solução. 
O procedimento genérico é definido em um método na classe abstrata. Cada passo do procedimento 
é definido como uma operação na classe abstrata. Alguns passos são comuns e, portanto, podem ser 
implementados na própria classe abstrata. Os passos específicos são definidos como operações abstratas 
na classe abstrata, sendo as implementações específicas implementadas nas subclasses, como é o caso 
do passo 2. 
 
Template Method – estrutura. 
A figura seguinte apresenta uma solução para o problema da máquina de café e da máquina de chá 
utilizando este padrão. 
Modelagem de Sistemas em UML 
Marcio Quirino - 150 
 
O método prepararReceita, definido na superclasse MaquinaBebida, possui seis passos que são 
definidos como operações nesta mesma classe. Note que existem dois passos definidos como operações 
abstratas, pois são executados de forma específica nas duas máquinas: prepararMistura e 
adicionarComplemento. Cada máquina derivada da classe abstrata MaquinaBebida implementa apenas os 
passos específicos, isto é, apenas a implementação dessas duas operações abstratas. 
 
Template Method – exemplo. 
Consequências 
O padrão Template Method evita a duplicação de algoritmos que apresentem a mesma estrutura, 
com alguns pontos de variação entre eles. O algoritmo é implementado apenas uma vez em uma classe 
abstrata onde são definidos os pontos de variação. As subclasses específicas implementam esses pontos 
de variação. Dessa forma, qualquer alteração no algoritmo comum pode ser feita em apenas um módulo. 
Esse padrão é muito utilizado na implementação de frameworks, permitindo a construção de 
estruturas de controle invertidas, também conhecidas como “princípio de Hollywood” ou “Não nos chame, 
nós o chamaremos”, referindo-se a estruturas em que a superclasse é quem chama os métodos definidos 
nas subclasses, e não o contrário. 
Considerações Finais 
Neste estudo, você viu que os desenvolvedores de software devem produzir sistemas com uma 
estrutura adequada que permita a sua evolução com custos e prazos aceitáveis. Padrões de projeto formam 
um corpo de conhecimento muito útil, pois permitem a reutilização de boas soluções de projeto e a produção 
de sistemas bem estruturados. 
Viu também como os padrões GRASP e o princípios SOLID oferecem um conjunto de conceitos 
fundamentais para qualquer projeto de software e, em especial, para projetos orientados a objetos. Saber 
estruturar sistemas em módulos com baixo acoplamento e alta coesão, aplicando conceitos como 
polimorfismo, inversão de dependências e módulos abertos para extensões sem precisarem ser 
modificados, é uma habilidade fundamental para os desenvolvedores de software atualmente. 
Finalmente, você conheceu os principais padrões de projeto GoF e viu como eles promovem o reuso 
de soluções para problemas recorrentes em projetos de software. 
O assunto é vasto e de grande importância no mercado, sendo o seu conhecimento um diferencial 
do profissional de desenvolvimento de sistemas. Um aspecto interessante nessa área é que, dentro do 
espírito de reuso de padrões de projeto, a comunidade de desenvolvimento costuma compartilhar suas 
experiências de forma colaborativa. 
Modelagem de Sistemas em UML 
Marcio Quirino - 151 
 
Referências 
BUSCHMANN, F. et al. Pattern-oriented software architecture: a system of patterns. 1. ed. River 
Street, NJ: John Wiley & Sons, 2000. 
GAMMA, E. et al. Design patterns: elements of reusable object-oriented software. 1. ed. Boston: 
Addison-Wesley, 1994. 
LARMAN, C. Applying UML and patterns: an introduction to object-oriented analysis and design and 
iterative development. 3. ed. Upper Saddle River, NJ: Prentice Hall, 2004. 
MARTIN, R.C. Clean architecture: a craftsman´s guide to software structure and design. 1. ed. Upper 
Saddle River, NJ: Prentice Hall, 2017. 
Explore+ 
Indicamos a leitura dos livros: 
Patterns of enterprise application architecture, de Martin Fowler. O livro apresenta padrões para 
módulos de interface com o usuário, persistência de dados, lógica de negócio e integração de sistemas. 
Java EE 8 design patterns and best practices, de Rhuan Rocha e João Purificação. O livro aborda 
padrões para interface com o usuário, lógica do negócio, integração de sistemas, orientação a aspectos, 
programação reativa e microsserviços. 
Além de livros-texto, é possível encontrar muitos artigos técnicos por meio de buscas na internet, 
usando os acrônimos dos tipos de padrões e princípios abordados no conteúdo (GoF, GRASP, SOLID) ou 
os nomes específicos dos padrões e princípios que pretenda utilizar, aproveitando soluções adotadas com 
sucesso por outras pessoas.

Mais conteúdos dessa disciplina