Pular para o conteúdo principal

Questão de Programação — Programação Orientada a Objetos — FUNDATEC 2025

ProgramaçãoProgramação Orientada a Objetos
Código
qg473692
Banca
FUNDATEC
Órgão
IF Sul - MG
Ano
2025
Nível
Superior
Cargo
PEBTT - Informática

Para responder a questão, considere o programa a seguir, feito em Java. As linhas estão numeradas apenas para referência.


Imagem da questão

Para as linhas 38 e 39, respectivamente, a forma correta de informar a altura e largura do retângulo para que sua área e perímetro sejam calculados pelos métodos do objeto é:
  1. AmeuRetangulo.altura = 10.0f;meuRetangulo.largura = 20.0f;
  2. BmeuRetangulo.setAltura = 10.0f;meuRetangulo.setLargura = 20.0f;
  3. CmeuRetangulo.setAltura(10.0f);meuRetangulo.setLargura(20.0f);
  4. DmeuRetangulo.getAltura(10.0f);meuRetangulo.getLargura(20.0f);
  5. EmeuRetangulo.getAltura = 10.0f;meuRetangulo.getLargura = 20.0f;
Revelar gabarito e comentário

GabaritoC — meuRetangulo.setAltura(10.0f); meuRetangulo.setLargura(20.0f);

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”.

Programação Orientada a Objetos: métodos setter

Gabarito: letra C. Para informar a altura e a largura do retângulo de modo que os métodos do objeto calculem área e perímetro, a forma correta é chamar os métodos modificadores (setters) com os valores como argumentos: meuRetangulo.setAltura(10.0f); e meuRetangulo.setLargura(20.0f);. Isso porque, em Java, métodos são invocados com parênteses, e a convenção de nomenclatura set + nome do atributo é o padrão para métodos que alteram o estado de um objeto.

A questão testa o conhecimento de dois conceitos fundamentais da Programação Orientada a Objetos (POO): a invocação de métodos e o encapsulamento. Em Java, um método é uma função associada a um objeto, e para executá-lo, usamos a sintaxe objeto.metodo(argumentos). Os parênteses são obrigatórios na chamada, mesmo que o método não receba argumentos. O encapsulamento, por sua vez, é o princípio que esconde os atributos de uma classe (geralmente declarados como private) e expõe métodos públicos para acessá-los (getters) e modificá-los (setters). Os setters seguem a convenção setNomeDoAtributo(Tipo valor) e são usados para atribuir um novo valor ao atributo, muitas vezes com validações.

Imagine a classe Retangulo com atributos altura e largura privados. Para definir esses valores a partir de outra classe, não podemos acessá-los diretamente (se forem private). Precisamos usar os métodos públicos setAltura(float altura) e setLargura(float largura). A chamada correta é meuRetangulo.setAltura(10.0f);, que passa o valor 10.0f como argumento para o método. O método, internamente, faz this.altura = altura;. Depois, os métodos calcularArea() e calcularPerimetro() usam esses atributos já definidos.

A pegadinha da banca está em confundir a sintaxe de atribuição de atributo (objeto.atributo = valor) com a de chamada de método (objeto.metodo(valor)). As alternativas que usam = sem parênteses tentam acessar diretamente o atributo, o que só funcionaria se ele fosse público. As alternativas que usam get (getters) são para ler valores, não para definir. A alternativa que usa set sem parênteses é uma mistura inválida. A única sintaxe correta para invocar um método setter é com parênteses e o valor como argumento.

Guarde a distinção: setter (set) define, getter (get) obtém, e ambos são métodos, portanto exigem parênteses na chamada. É exatamente nessa fronteira que as alternativas se dividem.

Alternativa A — ❌ Incorreta

Esta alternativa tenta acessar diretamente os atributos altura e largura do objeto, usando a sintaxe de atribuição objeto.atributo = valor. Isso só seria possível se os atributos fossem declarados como public na classe Retangulo. No entanto, o enunciado indica que os métodos do objeto calculam área e perímetro, o que sugere o uso de encapsulamento, com atributos privados e métodos públicos (setters) para modificá-los. Acessar diretamente um atributo privado gera um erro de compilação.

Alternativa B — ❌ Incorreta

Aqui, a sintaxe meuRetangulo.setAltura = 10.0f; tenta atribuir um valor a algo chamado setAltura, como se fosse um atributo. Porém, setAltura é um método, e métodos são invocados com parênteses, não com o operador de atribuição =. A forma correta seria meuRetangulo.setAltura(10.0f);. Essa alternativa mistura a ideia de atributo com a de método, resultando em código inválido.

Alternativa C — ✅ Correta ⟵ GABARITO

Esta é a forma correta. meuRetangulo.setAltura(10.0f); invoca o método setAltura do objeto meuRetangulo, passando o valor 10.0f como argumento. O método, por sua vez, atribui esse valor ao atributo privado altura. O mesmo ocorre com setLargura(20.0f). Após essas chamadas, os métodos calcularArea() e calcularPerimetro() podem usar os valores atualizados dos atributos para realizar os cálculos. A sintaxe objeto.metodo(argumento) é a forma padrão de chamada de métodos em Java.

Alternativa D — ❌ Incorreta

Os métodos getAltura e getLargura são getters, utilizados para obter (ler) o valor de um atributo, não para defini-lo. A chamada meuRetangulo.getAltura(10.0f); tenta passar um argumento para um getter, o que é semanticamente incorreto — getters normalmente não recebem argumentos e retornam o valor do atributo. Para definir a altura, o método correto é o setter setAltura(10.0f).

Alternativa E — ❌ Incorreta

Assim como na alternativa B, aqui se tenta usar getAltura e getLargura como se fossem atributos, com o operador de atribuição =. Além de serem métodos (e portanto exigirem parênteses), são getters, que servem para leitura, não para escrita. A combinação de usar um getter com atribuição é duplamente errada: pela sintaxe e pela semântica.

NÃO CAIA NESSA!

A banca explora a confusão entre atributo e método. Atributos são acessados com objeto.atributo = valor; métodos são chamados com objeto.metodo(valor). Além disso, ela troca o papel dos setters (definir) e getters (obter). Na prova, ao ver set ou get, lembre-se: são métodos, então precisam de parênteses; set define, get obtém.

PEGA ESSA DICA!

Para fixar, monte uma tabela mental:

Ação

Sintaxe Correta

Definir atributo (setter)

objeto.setAtributo(valor);

Obter atributo (getter)

tipo var = objeto.getAtributo();

Acessar atributo público

objeto.atributo = valor;

Na dúvida, verifique se a classe usa encapsulamento (atributos private). Se sim, só setters e getters públicos podem acessá-los.

Gabarito: letra C

Link permanente: /questoes/qg473692