Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Outra forma de implementação de Reserva da Bala

Bom dia Bugan, tudo bem?

Cara, baseado no seu último video, eu fiquei pensando de que forma conseguir implementar a Reserva Extensível para Bala e acabei chegando na solução que coloquei acima

public interface IReservavel
{
    void SetReserva(ReservaFixa reserva);
    void SetReserva(ReservaExtensivel reserva);
    void AoEntrarNaReserva();
    void AoSairDaReserva();
}

Aí, no script ReservaExtensivel ficou da mesma forma que a Reserva Fixa e no script da bala (implementando de forma oposta no ControlaChefe e ControlaInimigo:

   public void SetReserva(ReservaFixa reserva)
    {
        throw new System.NotImplementedException();
    }
    public void SetReserva(ReservaExtensivel reserva)
    {
        this.reserva = reserva;
    }

eu entendi o que você fez no video e achei bem legal a ideia, porém, eu fiquei com dúvida sobre se o que eu fiz acima estaria errado (Ele executou da mesma forma) e/ou se ele consumiria mais memória. Sabe me dizer? Por que a solução acima não seria uma boa forma de implementação?

5 respostas

Oi Vanderson, tudo bom?

O problema de fazer essa implementação é que vc está trabalhando especificamente com os tipos de reservas existentes no seu projeto. Imagina se por algum motivo vc tiver 10 tipos de reservas diferentes....

Vc teria que implementar 10 métodos SetReserva diferentes em todos os objetos que implementam IReservavel. O seu código ficaria muito mais do que ele precisa, já que com um único método conseguimos resolver tudo.

Outro ponto é que vc não está usando uma propriedade básicas da Orientação a Objetos que é o Polimorfismo. Se vc não conhece Polimorfismo acho legal vc assistir os cursos de Orientação a Objetos que temos aqui na plataforma :)

solução!

Outro ponto é que do jeito que vc fez se eu quiser colocar uma ReservaFixa nessa classe que vc colocou o código eu tomaria uma exceção e teria que alterar o código para fazer funcionar. Ou seja se o Game Designer mudar de ideia e quiser mudar o tipo de reserva desse objeto ele teria que chamar um programador para fazer essa alteração.

Perfeito, Bugan! Eu tinha entendido o conceito de Polimorfismo que você apresentou na aula, mas agradeçoa sugestão de reforçar esses conceitos aqui nos cursos da Alura, vou dar uma olhada!

Realmente, essa implementação minha pode dar sérios problemas de programação caso tenha muitos tipos de reservas diferentes. Não tinha pensado por esse lado também.

A minha dúvida era mais em saber se o jogo ficaria mais pesado dessa forma, ou menos otimizado, sabe? Eu tinha executado o código e não havia gerado nenhum erro, por isso fiquei curioso.

Não deve ficar mais lento por causa disso não. São mais essas questões de flexibilidade e arquitetura de código que mudam mais

Maravilha, Bugan! Obrigado pelo bate papo.