Engenharia de Software Moderna
Cap. 4 - Modelos
Prof. Marco Tulio Valente
[Link]
Licença CC-BY; permite copiar, distribuir, adaptar etc; porém, créditos devem ser dados ao autor dos slides
1
Motivação
● Existe uma lacuna entre os seguintes mundos
Requisitos Código
Gap
o que o sistema faz (nível como o sistema faz isso
de abstração mais alto) (nível de abstração mais
baixo)
2
Modelos de Software
● Objetivo: preencher essa "lacuna"
● Documentar uma solução para o problema definido pelos
requisitos
Requisitos Código
3
Comuns em outras Engenharias
● Natural que fossem propostos também para software
4
Modelos de Software
● Infelizmente, não são tão efetivos e largamente usados,
como em outras engenharias
● Modelos de software podem ser:
○ Formais: menos comuns; não serão estudados aqui
○ Gráficos: UML é a notação mais comum
5
Ideia: "muitas vezes, um diagrama UML, vale
mais do que 1000 LOC"
6
UML: Unified Modelling Language
● Proposta em 1995, para fundir outras notações
Fonte: Wikipédia
7
Quais os principais usos de UML?
1. Como blueprint (planta detalhada)
2. Como sketches (esboços, rascunhos)
8
Neste curso, vamos estudar o uso de UML
como sketches
9
UML como Sketch
● Uso mais comum de UML com métodos ágeis
● Uso mais informal e leve da notação
● Objetivo não é ter um modelo completo
● UML é usada para:
○ Conversar sobre uma parte do código ou do projeto
○ Documentar uma parte do código ou do projeto
10
UML como Sketch
Q. Chen, J. Grundy, J. Hosking: SUMLOW: early design-stage sketching of UML diagrams
11 on an E-whiteboard. Software Practice and Experience, 2008
Diagramas UML
12
Diagramas UML
● Diagramas Estáticos: modelam a estrutura do código
● Diagramas Dinâmicos: modelam a execução do código (o
comportamento do sistema)
13
Diagramas UML
Em vermelho, os diagramas que vamos estudar
,
14
Versão de UML que iremos usar
15
Diagrama de Classes
16
Formato genérico
17
Exemplo com duas classes
- : private
+: public
18
Associações
19
Associações
20
Multiplicidade (exemplo 1)
21
Multiplicidade (exemplo 2)
22
Principais multiplicidades
0..1
1
*
0..*
1..*
n
23
Associação bidirecional
24
Herança
25
Dependências (setas tracejadas)
Relacionamento entre duas classes, mas que não é devido a associação ou herança
Dependências não possuem informação sobre multiplicidade
26
Importante
● Não confundir diagramas de classes com diagramas ER
ou Esquemas de Bancos de Dados
Não modela:
métodos, herança,
dependências, etc
27
Exercícios sobre Diagrama de Classes
28
1. Estude e procure
entender o seguinte
diagrama de classes
29 Fonte: Martin Fowler. UML Distilled
2. Modele os cenários descritos a seguir usando Diagramas de Classe UML.
Veja que as classes são grafadas em uma fonte diferente.
● ContaBancaria possui exatamente um Cliente. Mas um Cliente
pode ter várias ContaBancaria, com navegabilidade nos dois sentidos.
● ContaPoupanca e ContaSalario são subclasses de ContaBancaria.
● No código de ContaBancaria declara-se uma variável local do tipo
BancoDados.
● Um ItemPedido se refere a um único Produto (sem navegabilidade).
Um Produto pode ter vários ItemPedido (com navegabilidade).
● A classe Aluno possui atributos nome, matricula, curso (todos privados);
e métodos getCurso() e cancelaMatricula(), ambos públicos.
30
3. Crie diagramas de classes para os seguintes trechos de código:
class HelloFrame {
public static void main(String[] args) {
JFrame frame = new JFrame("Hello!");
[Link](true);
}
}
class HelloFrame extends JFrame {
public HelloFrame() {
super("Hello!");
}
public static void main(String[] args) {
HelloFrame frame = new HelloFrame();
[Link](true);
}
31
}
Diagrama de Pacotes
32
Diagrama de Pacotes
33
Diagrama de Pacotes
34
Sketches UML são úteis em
Engenharia Avante e em Engenharia Reversa
35
Engenharia Avante (“Forward”)
● Modelo é usado para discutir alternativas de projeto
● Antes de qualquer linha de código ser implementada
36
Engenharia Reversa
● Modelo é usado para explicar um código que já existe
● Contextos de manutenção e evolução de software
37
Diagrama de Sequência
38
Diagramas de Sequência
● São diagramas comportamentais ou dinâmicos
● Modelam:
○ Objetos de um sistema
○ Métodos que eles executam
39
Diagrama de Sequência (exemplo 1)
inativo
ativo
40
Diagrama de Sequência (exemplo 2)
41
Setas de retorno de métodos
● Muitas vezes, são omitidas:
○ Porque o retorno não é importante
○ Porque o método não retorna valor (void)
42
Diagrama de Sequência (exemplo 3)
43
Diagrama de Sequência (exemplo 4)
Não é um uso interessante de
diagramas de sequência
44
Exercícios
45
1. Esse diagrama de sequência deveria representar o processamento
necessário para calcular o valor total de um Pedido (Order), o qual possui
diversos Itens (Lines), cada um referindo-se a um Produto e com uma
quantidade. Por que ele, no entanto, não faz isso corretamente?
46
Versão
loop [for each line item]
Correta do
Diagrama
Anterior
47
2. No próximo slide, mostramos um diagrama com os
principais passos do algoritmo de recomendação do TikTok.
Qual a principal diferença entre este diagrama e o diagrama
de sequência "oficial", proposto por UML, que estudamos
antes?
48
49 Source: Monolith: Real Time Recommendation System With Collisionless Embedding Table. [Link]
Diagrama de Atividades
50
Diagramas de Atividades
● Também são diagramas comportamentais ou dinâmicos
● Modelam em alto nível um processo ou fluxo de negócio
51
Imagine que existe uma ficha (token)
que caminha pelos nodos do diagrama
de atividades.
52
Nodo inicial (cria uma ficha)
53
Ação (repassa ficha do fluxo de entrada para saída)
54
Decisão (decide para qual fluxo de saída repassará a ficha)
55
Merge (quando ficha chega em uma das entradas, repassa para saída)
56
Fork (multiplicadores de fichas)
57
Join (sorvedouros de fichas)
58
59 Nodo final (encerra execução)
Importante
● Diagramas de Atividades: modelam processos de mais
alto nível de uma organização
● Não devem ser usados para modelar:
○ A navegação entre as páginas de um sistema
○ A implementação de uma parte de um sistema (isto é,
não são um fluxograma)
60
Exercícios
61
1. (Poscomp 2023) Seja o seguinte diagrama de
classes. Marque a alternativa correta.
(A) classe “Pessoa” se associa com a classe
“Funcionario”, que por sua vez tem uma relação de
generalização com a classe “Tarefa”.
(B) “Pessoa” herda da classe “Funcionario”, que tem
uma relação de associação com “Tarefa”.
(C) A associação com navegabilidade da classe “Funcionario” para a classe
“Tarefa” gera um atributo “lista de objetos” da classe “Tarefa” na classe
“Funcionario”.
(D) A classe “Tarefa” faz parte da classe “Funcionario”, constituindo uma relação de
agregação.
(E) O método “addTarefa(tarefa: Tarefa)” pode ser invocado a partir de uma
instância da classe “Pessoa”, através de polimorfismo.
2. Modele em UML usando um Diagrama de Classes.
class Computador { class Teclado {
... ...
private List<Teclado> teclados; }
...
}
Observação: Teclado não possui uma referência de volta para Computador.
Porém, no nosso sistema, sabemos que qualquer Teclado está sempre
ligado a exatamente um Computador.
63
3. Qual é o erro do seguinte diagrama de atividades? Refaça o diagrama de forma a
refletir corretamente a intenção do projetista.
64
Fim
65