Elemar DEV

Tecnologia e desenvolvimento

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

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?

2 comentários em “SNIPPET: “Named Parameters” e “Object Initializers” ferem conceitos de Orientação a Objetos?

  1. Daniel Zhe
    23/04/2013

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

  2. lifereaderpsychicsonline_psychic_readings..” lifereaderpsychicsonline_psychic_readings…

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

Informação

Publicado às 22/04/2013 por em Post e marcado , .

Estatísticas

  • 671,597 hits
%d blogueiros gostam disto: