22 Abril, 2013 0 Comentários AUTOR: elemarjr CATEGORIAS: Sem categoria Etiquetas:,

SNIPPET: "Named Parameters" e "Object Initializers" ferem conceitos de Orientação a Objetos?

Tempo de leitura: 1 minuto

Olá. Tudo certo?

Como sabem, estou utilizando  Ask.fm como canal de comunicação com a comunidade. Tenho recebido algumas perguntas bem interessantes. Para algumas delas, desejo saber também a opinião de outras pessoas. Por isso, estou trazendo aqui para o blog como snippets (veja a lista).

Pergunta:

Algumas "facilidades" fornecidas pelas linguagens modernas, como o C# com o "Object Initializer" ou "named parameters" não vão contra alguns princípios de OO? Por exemplo, o "optional parameter" destorce um pouco o conceito de sobrecarga de métodos, não?

Minha resposta:

Honestamente, não penso dessa forma.

Comecemos com o "Object Initializer". Ele substituiu os famigerados construtores com dezenas de argumentos. Perceba, para mim, só deve estar em um construtor propriedades que: 1) não podem receber um valor default sem deixar o objeto em um estado potencialmente inválido; 2) propriedades que não podem ser modificadas posteriormente (imutáveis).

Muitos desenvolvedores criavam sobrecargas intermináveis de construtores apenas para facilitar a inicialização dos objetos. Isso não é, de forma alguma, um princípio de orientação a objetos. Longe disso, trata-se de um atalho melhor resolvido com o aperfeiçoamento da linguagem

O mesmo que citei para "Object Initializers" se aplica a "Named Parameters". Mais uma vez, o que eu via frequentemente eram dezenas de sobrecargas, escritas em sequência, onde as menos sofisticadas chamavam suas "parentes mais ricas".

Para mim (e para o Uncle Bob), é necessário que façamos uma distinção apropriada entre objetos e estruturas de dados. Em objetos, é desejável esconder a implementação atrás de abstrações - isso é orientação a objetos. Logo, é menos comum o uso de "object initializers" e "named parameters". Em estruturas de dados, são artifícios de linguagem úteis e bem-vindos.

 

Adiciono aqui que é necessário algum cuidado para se certificar de que não estejamos, de fato, criando estruturas de dados "de mais" e objetos "de menos".

O que você acha?

0 Comentários

  1. Daniel Zhe 3 anos ago says:

    Eu não vejo mal nenhum. Parece-me excesso de puritanismo, assim como não usar "break" em for e foreach.

    Responder
  2. lifereaderpsychicsonline_psychic_readings.." lifereaderpsychicsonline_psychic_readings...

    Responder