Questão de Engenharia de Software — Conceitos Gerais de Engenharia de Software — FUNDATEC 2023
Engenharia de Software›Conceitos Gerais de Engenharia de Software
Código
qa541335
Banca
FUNDATEC
Órgão
IFC
Ano
2023
Cargo
PEBTT ( )
Analise o diagrama de classes abaixo e assinale a alternativa correta.
AO método recebeSalario() retorna o salário que o funcionário deve receber.
BUm objeto da classe Pessoa pode acessar o seu atributo salario através do seu método getSalario().
CA classe Funcionario é considerada uma superclasse, já que possui tanto os atributos e métodos da classe da qual herda, como os seus próprios.
DDuas instâncias da classe Funcionario podem ter nomes diferentes.
EA flecha utilizada no diagrama indica que uma classe do tipo Funcionario possui um objeto da classe Pessoa.
Revelar gabarito e comentário▾
GabaritoD — Duas instâncias da classe Funcionario podem ter nomes diferentes.
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: Herança e Instanciação
Gabarito: letra D. Duas instâncias da classe Funcionario podem ter nomes diferentes, pois cada objeto criado a partir de uma classe possui seus próprios valores de atributos, independentes dos demais. A alternativa D está correta porque reflete o princípio fundamental da orientação a objetos: instâncias distintas de uma mesma classe são independentes entre si.
O diagrama de classes é um dos principais diagramas estruturais da UML (Unified Modeling Language). Ele descreve a estrutura estática do sistema, mostrando as classes, seus atributos, métodos e os relacionamentos entre elas. Para interpretar corretamente um diagrama de classes, é essencial compreender os conceitos de classe, objeto (instância), herança e os tipos de relacionamentos representados por setas.
Uma classe é um molde ou modelo que define atributos (características) e métodos (comportamentos) que os objetos criados a partir dela terão. Um objeto (ou instância) é uma materialização concreta dessa classe, com valores específicos para cada atributo. Por exemplo, se temos a classe Pessoa com o atributo nome, cada objeto criado a partir dela terá seu próprio valor para nome — um pode ser "João", outro "Maria". Essa independência entre instâncias é a base da alternativa D.
A herança é um mecanismo que permite que uma classe (subclasse) herde atributos e métodos de outra classe (superclasse). No diagrama, a herança é representada por uma seta com ponta triangular vazia, apontando da subclasse para a superclasse. A subclasse é uma especialização da superclasse: ela possui tudo que a superclasse tem, mais seus próprios atributos e métodos. A superclasse, por sua vez, é uma generalização — ela não possui os atributos e métodos específicos da subclasse.
A alternativa C afirma que a classe Funcionario é uma superclasse "já que possui tanto os atributos e métodos da classe da qual herda, como os seus próprios". Isso está invertido: quem possui os atributos e métodos da classe da qual herda, mais os seus próprios, é a subclasse. A superclasse é a classe mais genérica, que não herda de ninguém (ou herda de uma classe ainda mais genérica). A banca trocou os papéis de superclasse e subclasse — uma pegadinha clássica.
A alternativa E trata do relacionamento de associação, representado por uma seta simples (sem ponta triangular). A associação indica que uma classe conhece ou utiliza objetos de outra classe. No entanto, a descrição "uma classe do tipo Funcionario possui um objeto da classe Pessoa" sugere uma relação de composição ou agregação, que é representada por um losango preenchido (composição) ou vazio (agregação) na ponta da linha, e não por uma seta simples. Além disso, a seta no diagrama de classes aponta da classe que conhece para a classe conhecida, e a afirmação da alternativa E está incompleta e imprecisa quanto ao tipo de relacionamento.
A alternativa A afirma que o método recebeSalario() retorna o salário que o funcionário deve receber. Pelo nome do método, é mais provável que ele realize o pagamento do salário (ação de receber) do que retorne o valor do salário. Métodos que retornam valores geralmente seguem a convenção de nomenclatura get...() (como getSalario()), enquanto métodos que executam ações costumam ter nomes como recebeSalario(). A alternativa A confunde a finalidade do método.
A alternativa B afirma que um objeto da classe Pessoa pode acessar o atributo salario através do método getSalario(). Isso só seria possível se o atributo salario e o método getSalario() pertencessem à classe Pessoa. No entanto, pelo contexto do diagrama, salario é um atributo da classe Funcionario, que herda de Pessoa. A herança é unidirecional: a subclasse (Funcionario) herda da superclasse (Pessoa), mas a superclasse não tem acesso aos membros da subclasse. Portanto, um objeto de Pessoa não pode acessar salario — esse atributo é específico de Funcionario.
A pegadinha central desta questão é a inversão dos conceitos de superclasse e subclasse na alternativa C, e a confusão entre os tipos de relacionamento na alternativa E. A banca explora o conhecimento dos símbolos UML e dos princípios de herança e instanciação.
Critério
Pessoa (superclasse)
Funcionario (subclasse)
Papel na herança
Classe genérica (generalização)
Classe especializada (especialização)
Atributos próprios
nome (e demais da classe)
salario (além dos herdados de Pessoa)
Acesso a membros da outra classe
Não acessa membros da subclasse
Acessa membros da superclasse (herança)
Relação com o diagrama
Recebe a seta de herança (ponta triangular)
Origina a seta de herança (aponta para Pessoa)
Alternativa A — ❌ Incorreta
O método recebeSalario() provavelmente executa a ação de receber o salário, não retorna o valor do salário. Métodos que retornam valores seguem a convenção get...(), como getSalario(). A alternativa confunde a finalidade do método: um método de ação (recebeSalario) com um método de consulta (getSalario).
Alternativa B — ❌ Incorreta
A herança é unidirecional: a subclasse (Funcionario) herda da superclasse (Pessoa), mas a superclasse não acessa os membros da subclasse. O atributo salario pertence a Funcionario, não a Pessoa. Portanto, um objeto de Pessoa não pode acessar salario via getSalario(). A alternativa inverte a direção da herança.
Alternativa C — ❌ Incorreta
A classe Funcionario é a subclasse, não a superclasse. Quem possui os atributos e métodos da classe da qual herda, mais os seus próprios, é a subclasse. A superclasse (Pessoa) é a classe mais genérica, que não possui os membros específicos da subclasse. A banca trocou os papéis de superclasse e subclasse.
Alternativa D — ✅ Correta ⟵ GABARITO
Cada instância (objeto) da classe Funcionario possui seus próprios valores de atributos. O atributo nome é um atributo da classe Pessoa, herdado por Funcionario. Duas instâncias de Funcionario podem ter nomes diferentes, pois cada objeto é independente e armazena seus próprios valores. Isso é um princípio fundamental da orientação a objetos: instâncias distintas de uma mesma classe são independentes entre si.
Alternativa E — ❌ Incorreta
A seta simples no diagrama de classes representa uma associação, que indica que uma classe conhece ou utiliza objetos de outra. No entanto, a descrição "possui um objeto" sugere uma relação de composição ou agregação, que é representada por um losango (preenchido ou vazio) na ponta da linha, não por uma seta simples. Além disso, a afirmação é imprecisa quanto ao tipo de relacionamento e à direção da seta.
Gabarito: letra D — a única alternativa que reflete corretamente o princípio de independência entre instâncias de uma classe.