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

Static vs instance

Eu sei que os exemplos devem ser simplificados para focar no objetivo da aula, mas me surgiu uma dúvida, não diretamente relacionado a aula 03.04. Quando temos classes imutáveis, como as classes usadas nessa aula(R30): Engenheiro, Vendedor e Gerente, devemos utilizar casses estáticas para não instanciar um novo objeto para cada Funcionario(seguindo o exemplo)? Ou seria o custo dessas novas instância(memória/processamento) tão insignificantes que podemos fazer sempre como no exemplo dado e instanciar novos objetos? (Espero não ter sido muito confuso na minha pergunta =])

4 respostas

Márcio, quero entender melhor sua dúvida. Então vamos pro código:

No final da aula do Marcelo a criação de um funcionário ficou assim:

Funcionario f1 = new Funcionario(new Gerente(), 2000, 0, 0);

Com a criação de uma instância de TipoFuncionario, no caso Gerente, usando new Gerente().

Sua dúvida está relacionada com as vantagens em evitar ou não a construção desse objeto, fazendo ao invés de new Gerente() algo como Gerente.Criar().

É isso? Se não for, você me confundiu mesmo rsrs.

Se Gerente.Criar() devolver um Singleton ou uma classe statica, sim! é isso.

ex:

static class Gerente : TipoFuncionario
{
    public override decimal GetPagamento(Funcionario funcionario)
    {
        return funcionario.Salario + funcionario.Bonus;
    }
}
solução!

Minha resposta será um pouco filosófica, tá? Então quem não entender ou discordar, entre na conversa e dê sua opinião também.

Sua dúvida está relacionada a melhor prática: criar uma instância de cada tipo (ex. vários objetos do tipo Gerente) a cada criação de funcionário OU usar um singleton para reaproveitar a instância do tipo, uma vez que o que queremos nesse exemplo é apenas a estratégia específica, que no caso é o cálculo do pagamento?

Eu acho (minha opinião) que realmente é insignificante ter esses vários objetos em memória, ainda mais se forem criados dentro de um método que logo deixará de executar e por conseguinte esses objetos sairão da memória por força do Garbage Collector. Mas pode ser que a aplicação precise gerenciar melhor sua memória, por causa de requisitos específicos. Nesses casos, vale a pena buscar técnicas que otimizem a memória.

Por outro lado, podemos refletir que o emprego do Singleton representa um objeto único dentro da aplicação. No caso, Gerente é uma instância de um cargo. Não existem dois cargos gerente, certo? Então, sob essa perspectiva conceitual, faz sentido usarmos singleton.

Fiquei em cima do muro né? Mas é aquela famosa resposta: depende.

E aí, Márcio, ajudou ou piorou?

Valeu Daniel! Ajudou sim!