Questão nº 36
Questão de Programação · FCC TJ-CE 2022 (nº 36)
Considere o trecho de código em Ruby.
```ruby
class Calcula
def self.soma(x,y)
puts(x+y)
end
def self.soma(x,y,z)
puts(x+y+z)
end
end
```
Considerando um ambiente de testes em condições ideais,
- Aao se realizar a execução de `Calcula.soma(10,8)` haverá um erro relativo a número errado de argumentos. (alternativa correta)
- Ba classe `Calcula` apresenta um exemplo de sobrecarga de métodos.
- Cao se realizar a execução de `Calcula.soma(10,8,2)` haverá um erro relativo a número errado de argumentos.
- Dpara indicar que os métodos `soma` estão sobrecarregados, é necessário colocar a anotação `@Overload` na linha anterior à definição do 2º método `soma`.
- Epara indicar que os métodos `soma` estão sobrescritos, é necessário colocar a anotação `@Override` na linha anterior à definição do 2º método `soma`.
Resposta comentada
Gabarito Alternativa A
Em Ruby, sobrecarga de métodos (ter o mesmo nome de método com diferentes números ou tipos de argumentos) não é suportada diretamente como em outras linguagens. Quando você define um método com o mesmo nome várias vezes na mesma classe, a última definição sobrescreve (substitui) as anteriores.
(A) Correta: Após a definição da classe, o único método `soma` que existe é o que aceita três argumentos (`def self.soma(x,y,z)`). Ao chamar `Calcula.soma(10,8)`, você fornece apenas dois argumentos, o que resulta em um erro de `ArgumentError: wrong number of arguments (given 2, expected 3)`.
(B) Incorreta: A classe `Calcula` não apresenta um exemplo de sobrecarga de métodos. Em Ruby, a segunda definição de `soma` simplesmente sobrescreve a primeira. Armadilha da banca: O código parece uma sobrecarga, mas em Ruby, a última definição de método com o mesmo nome é a que prevalece, não havendo coexistência de métodos com o mesmo nome e diferentes assinaturas.
(C) Incorreta: Ao se realizar a execução de `Calcula.soma(10,8,2)`, o método `soma` que foi definido por último (e que aceita três argumentos) será chamado com sucesso, imprimindo `20`. Não haverá erro de número de argumentos.
(D) Incorreta: Ruby não utiliza anotações como `@Overload` para indicar sobrecarga de métodos, pois o conceito de sobrecarga tradicional não existe na linguagem.
(E) Incorreta: Ruby não utiliza anotações como `@Override` para indicar sobrescrita de métodos (que é um conceito relacionado à herança, diferente de sobrecarga).
Fonte: FCC TJ-CE 2022 Analista Judiciário - Especialidade Ciência da Computação - Área Sistemas da Informação (Caderno Tipo 001). Reproduzida para fins de estudo.