Questão de Engenharia de Software — UML — FCC 2021
- Código
- fc060792
- Banca
- FCC
- Órgão
- TJ-SC
- Ano
- 2021
- Cargo
- Analista de Sistemas
- Aagregação.
- Bdecomposição.
- Cinclusão.
- Dgeneralização.
- Eextensão.
GabaritoE — extensão.
Gabarito: letra E. No diagrama de casos de uso da UML, o relacionamento entre "Verificar Estoque" e "Comprar Produto" é do tipo extensão, pois a compra é um comportamento opcional e condicional (ocorre apenas quando o produto não existe em estoque). A relação de extensão é usada para modelar fluxos alternativos ou excepcionais que estendem um caso de uso base sob determinadas condições.
A questão testa a diferença entre os principais relacionamentos entre casos de uso na UML: inclusão, extensão, generalização e agregação (esta última não é um relacionamento padrão entre casos de uso na UML 2.0). O cenário descreve uma condição (produto não em estoque) que dispara um caso de uso complementar – exatamente o papel da extensão.
Relacionamento | Definição | Aplicação no cenário | Correto? |
|---|---|---|---|
Agregação | Relacionamento todo-parte entre classes (não se aplica a casos de uso) | Não é um relacionamento válido para casos de uso na UML | ❌ |
Decomposição | Termo genérico (não é relacionamento formal da UML) | Não é um relacionamento padrão entre casos de uso | ❌ |
Inclusão (include) | Caso base sempre executa o caso incluído | Compra não ocorre sempre, apenas sob condição | ❌ |
Generalização | Herança/especialização entre casos de uso | Não há herança entre as funcionalidades | ❌ |
Extensão (extend) | Caso base pode ser estendido opcionalmente sob condição | Compra ocorre apenas se produto não existe em estoque | ✅ |
Agregação não é um relacionamento definido para casos de uso na UML. Embora apareça em diagramas de classes entre objetos, não se aplica a use cases. A agregação indica um todo-parte entre classes, não comportamento opcional.
Decomposição não é um termo técnico da UML para relacionamentos entre casos de uso. Pode-se decompor um caso de uso em subfluxos, mas o relacionamento formal é inclusão (include) ou extensão (extend). A banca usa aqui um termo genérico para confundir.
Inclusão (include) é um relacionamento em que o caso de uso base sempre executa o caso de uso incluído. Não se aplica ao cenário, pois a compra do produto só ocorre sob condição (produto inexistente). Se fosse inclusão, toda verificação de estoque obrigaria uma compra, o que não faz sentido.
Generalização é usada quando um caso de uso herda comportamento de outro (especialização). Aqui não há herança; são funcionalidades distintas que se relacionam por condição.
Extensão (extend) modela exatamente situações em que um caso de uso (extensão) é inserido opcionalmente em pontos de extensão de outro caso de uso base, sob certas condições. No exemplo: se o produto não está em estoque, o fluxo de verificação é estendido com a compra. A seta de extensão aponta do caso de uso estendido (Comprar Produto) para o caso base (Verificar Estoque), com a condição explícita.
A banca explora a confusão clássica entre <<include>> e <<extend>> no UML. Lembre-se: include é obrigatório e sempre executado; extend é opcional e condicional. No enunciado, a palavra "caso" (condição) é o gatilho para extensão. Treine identificando a palavra "se" ou "condicionalmente" – isso aponta para extend.
Gabarito: letra E.
Link permanente: /questoes/fc060792