Desafio da Semana #10
DESAFIO DA SEMANA #10
Por: Roberto Alexis Farah
Olá pessoal!
Recentemente recebi de um estudante de faculdade um desafio interessante que foi usado em sala de aula.
Por curiosidade resolvi utilizá-lo em entrevistas e obtive um resultado curioso que colocarei ao postar a resposta semana que vem.
Vamos ao desafio…
CENÁRIO
Aqui coloco o código C# (pode ser replicado e ligeiramente modificado para VB.NET ou C++ com os mesmos resultados):
namespace Test
{
class Program
{
public class A
{
public int _a1;
public int _b1;
public void DoSomething(){
_a1 = 1;
Console.WriteLine("X");
}
}
public class B : A
{
public int _b1;
public void DoSomething()
{
DoSomething(); // Chamada a classe pai.
_b1 = _a1;
}
}
static void Main(string[] args)
{
B b = new B();
b.DoSomething();
}
}
}
SINTOMA
Como parte do desafio, você deve descobrir o SINTOMA que ocorrerá ao se executar o código acima. Dessa vez não forneço o sintoma.
OBJETIVO
Identifique o SINTOMA, PROBLEMA e proponha uma SOLUÇÃO.
Nota: Você deveria resolver apenas analisando o código fonte sem executá-lo, do contrário o desafio se torna muito mais simples.
Nota 2: Não se preocupe, não tenho como saber se você executou o código ou resolveu apenas analisando a listagem acima. J
Comments
- Anonymous
August 28, 2006
Boa tarde, este é o meu primeiro acesso ao blog, e achei muito interessante os desfios propostos, sou estudante na área de TI e iniciante desenvolvedor .NET.
Acho que o desafio proposto irá gerar um looping infinito, pois o método B.DoSomething está chamando ele mesmo, e não o A.DoSomething da classe pai.
A solução que eu vejo é alterar o nome do método na classe filha e também das chamadas à ela.
Grato
Luiz - Anonymous
August 31, 2006
Olá Farah! Muito interessante este site!
Parabéns!
Quanto ao sintoma, acredito que seja o que o Luiz comentou: Um looping no método B.DoSomething(). O problema é que o método da classe B sobrepões o método da classe A herdada.
A solução seria simplesmente acessar o método da classe A, utilizando a keyword "base". Ou seja:
base.DoSomething(); // Chamada a classe pai.
Abraços,
Edmar Miyake - Anonymous
September 05, 2006
Oi Luiz! Que bom saber que você achou os desafios interessantes.
Infelizmente é difícil para nós publicarmos algo toda semana, mas tentamos, pode apostar! :) Se você tiver sugestões de tópicos que gostaria de ver abordados fique a vontade para colocar. Não posso prometer que toda recomendação será publicada.
Oi Edmar, há quanto tempo! Bom receber sua visita por aqui!
Essa semana estarei colocando a (surpreendente) resposta do desafio.
Obrigado