Questão de Engenharia de Software — Diagrama de Classes — VUNESP 2023
Engenharia de Software›Diagrama de Classes
Código
vu080375
Banca
VUNESP
Órgão
UFABC
Ano
2023
Nível
Superior
Cargo
Analista de Tecnologia da Informação
Considere o seguinte diagrama de classes UML.Com base nesse diagrama, é correto concluir que
Apara cada instância de A, existe uma única instância de B.
Bquando uma instância de A for destruída, as instâncias correspondentes de B também o serão.
CB é subclasse de A.
Dpara cada instância de B, existe uma única instância de A correspondente que não é compartilhada com outras instâncias de B.
EA e B são classes persistentes.
Revelar gabarito e comentário▾
GabaritoB — quando uma instância de A for destruída, as instâncias correspondentes de B também o serão.
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
Diagrama de classes UML: composição e ciclo de vida
Gabarito: letra B. A alternativa correta descreve o comportamento de uma composição (ou agregação composta), um tipo de associação em que a classe "todo" (A) é responsável pelo ciclo de vida das instâncias da classe "parte" (B): quando A é destruída, as instâncias de B associadas também são destruídas. Essa é a semântica da composição na UML, representada por um losango preenchido na extremidade da classe que contém a outra.
O diagrama de classes é o principal diagrama estrutural da UML: ele mostra as classes do sistema, seus atributos, operações e, sobretudo, os relacionamentos entre elas. Esses relacionamentos podem ser de associação simples, agregação, composição, dependência ou generalização (herança). A questão cobra exatamente a distinção entre esses tipos, e a chave está no símbolo desenhado na extremidade da linha que liga A e B.
Na UML, a composição é um relacionamento de contenção forte: a classe que contém (o "todo") é dona das instâncias da classe contida (a "parte"), e essas partes não existem sem o todo. Se o todo é destruído, as partes são destruídas junto. É o caso clássico de um Pedido e seus Itens: se o pedido é excluído, os itens daquele pedido também são. Já na agregação, a parte pode existir independentemente do todo — pense em um Time e seus Jogadores: se o time é dissolvido, os jogadores continuam existindo. A diferença visual é sutil: composição tem losango preenchido; agregação tem losango vazio.
A multiplicidade também é essencial para ler o diagrama. Ela indica quantas instâncias de uma classe podem se associar a uma instância da outra. No caso da composição, é comum vermos 1 na extremidade do todo (cada parte pertence a exatamente um todo) e * na extremidade da parte (um todo pode ter várias partes). A alternativa D explora justamente essa leitura, mas com um detalhe que a torna incorreta — veremos adiante.
A pegadinha da banca aqui é dupla: primeiro, confundir composição com agregação (a diferença entre "destruir junto" e "sobreviver separado"); segundo, confundir a multiplicidade com a navegabilidade ou com a existência de herança. Guarde o par: composição = ciclo de vida compartilhado; agregação = ciclo de vida independente. É exatamente nessa fronteira que as alternativas se dividem.
Alternativa A — ❌ Incorreta
Afirma que "para cada instância de A, existe uma única instância de B". Isso contraria a multiplicidade típica de uma composição, que costuma ser 1..* (um A pode ter várias instâncias de B). A alternativa confunde a multiplicidade do lado do todo (que é 1, cada B pertence a um único A) com a do lado da parte (que é *, um A pode conter muitos B). Se o diagrama mostrasse 1 na extremidade de B, aí sim haveria uma única instância de B por A — mas isso não é o que a composição representa em geral.
Alternativa B — ✅ Correta ⟵ GABARITO
Esta é a definição exata de composição: a classe A (o todo) é dona das instâncias de B (as partes), e o ciclo de vida delas está atrelado ao ciclo de vida de A. Quando A é destruída, as instâncias de B associadas também são destruídas. É a semântica de "contenção forte" — a parte não existe sem o todo. O símbolo que representa isso no diagrama é o losango preenchido na extremidade da classe A.
Alternativa C — ❌ Incorreta
Afirma que "B é subclasse de A", o que caracterizaria uma relação de generalização/herança (seta com triângulo vazio apontando para a classe pai). No diagrama, a relação entre A e B é de associação (composição), não de herança. Herança significa que B é um tipo de A e herda seus atributos e métodos; composição significa que A contém B. São conceitos completamente distintos, e a banca troca um pelo outro para confundir.
Alternativa D — ❌ Incorreta
Diz que "para cada instância de B, existe uma única instância de A correspondente que não é compartilhada com outras instâncias de B". A primeira parte está correta (na composição, cada parte pertence a um único todo — multiplicidade 1 no lado de A). Porém, a segunda parte — "não é compartilhada com outras instâncias de B" — é uma invenção sem correspondência no diagrama: a UML não tem notação para expressar "não compartilhamento" entre instâncias da mesma classe. A multiplicidade 1 já garante que cada B tem um único A, mas isso não impede que outros B também estejam ligados ao mesmo A (o que seria uma multiplicidade * no lado de B). A alternativa mistura multiplicidade com um conceito de exclusividade que não existe na notação.
Alternativa E — ❌ Incorreta
Afirma que "A e B são classes persistentes". Persistência é uma propriedade de implementação (a classe é salva em banco de dados, por exemplo), e não algo representado no diagrama de classes UML padrão. O diagrama mostra a estrutura estática das classes e seus relacionamentos, mas não indica se elas são persistentes ou não. Essa informação viria de anotações específicas (como as de um ORM) ou de diagramas de implantação, não do diagrama de classes puro.
Gabarito: letra B — a composição é o relacionamento em que a destruição do todo implica a destruição das partes.