Freigeben über


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