--
Antes de enviar um e-mail para o grupo leia:
http://www.ccppbrasil.org/wiki/Lista:AntesdePerguntar
--~--~---------~--~----~---------------------------------~----------~--~----~
[&] Colabore com a Pesquisa de Preferência de Conteúdo
para Eventos do Grupo C & C++ Brasil:
http://www.surveymonkey.com/s/GBBGTXN
------~----~-------~---~---~---~---~----------------~------------~---------~
[&] C & C++ Brasil - http://www.ccppbrasil.org/
Para sair dessa lista, envie um e-mail para ccppbrasil-...@googlegroups.com
Para mais opções, visite http://groups.google.com/group/ccppbrasil
--~--~---------~--~----~--~-~--~---~----~-----------------~--~----------~
Emprego & carreira: vag...@ccppbrasil.org
http://groups.google.com/group/dev-guys?hl=en
Oi tudo bem ?Então, minha duvida é a seguinte. O encapsulamento é realmente necessário ? Se sim, quais os cenários ?
--
--
--
--
Antes de enviar um e-mail para o grupo leia:
http://www.ccppbrasil.org/wiki/Lista:AntesdePerguntar
--~--~---------~--~----~---------------------------------~----------~--~----~
[&] Colabore com a Pesquisa de Preferência de Conteúdo
para Eventos do Grupo C & C++ Brasil:
http://www.surveymonkey.com/s/GBBGTXN
------~----~-------~---~---~---~---~----------------~------------~---------~
[&] C & C++ Brasil - http://www.ccppbrasil.org/
Para sair dessa lista, envie um e-mail para ccppbrasil-...@googlegroups.com
Para mais opções, visite http://groups.google.com/group/ccppbrasil
--~--~---------~--~----~--~-~--~---~----~-----------------~--~----------~
Emprego & carreira: vag...@ccppbrasil.org
http://groups.google.com/group/dev-guys?hl=en
Fora isso, no caso de um get/set básico o que você pode ganhar ...
Então, minha duvida é a seguinte. O encapsulamento é realmente necessário ?
Se sim, quais os cenários ?
Se o std::vector tivesse as funções "T std::vector::get_element(i) const " e " void std::vector::set_element(size_t i,const T& element)", será que alguém iria preferir-los em vez do tradicional operator[]?
On 06/08/2012 11:26, Thiago A. Corr�a wrote:
> Naquela palestra da Microsoft com o Bjarne e todos os outros Gurus foi
> discutido isso, acho que no QA. Alguem que tenha o link na m�o
> certamente pode responder providenciando :)
>
> Antigamente era um rule of thumb usar getter e setters. Hoje em dia,
> j� n�o � t�o considerado assim como uma boa pr�tica obrigat�ria. Com o
> "surgimento"[1] do refactoring, tem ficado simples reorganizar o
> c�digo para encapsular um campo se necess�rio, e n�o � preciso
> despender tempo encapsulando todos que provavelmente nunca ser�o
> necess�rios.
> Segundo essa l�gica, a recomenda��o era de "N�o se preocupe com isso"
>
>
Aproveitando... Existe alguma IDE/ferramenta que faz refactoring
(digamos, apenas renomear um m�todo) de C++ corretamente?
--
" Veja std::vector<T>::at "Bem, eu conheço o at(), mas eu me referi a um setter como é implementado normalmente, com retorno "void", que não retorne referência para os internos da classe.
Eu nunca programei em java e também nunca vi setter que retornasse diferente de void, acho que essa é uma prática comum em C++. E sim, é extremamente conveniente expor seus internos com retorno do tipo const T&.
"O std::vector , propositalmente quer dar o acesso ao elemento do array.Posso fazer isso por ex.
&m_v[0]"Eu sugeri alguma coisa em outra direção?
Opa. Obrigado.
Obrigados a todos que responderam tiraram muitas dúvidas e me abriram a mente! Agradecimentos especiais a ViniGodoy pelo link muitíssimo instrutivo.
--
Em 6 de agosto de 2012 14:43, Marcelo Zimbres <mzim...@gmail.com> escreveu:" Veja std::vector<T>::at "Bem, eu conheço o at(), mas eu me referi a um setter como é implementado normalmente, com retorno "void", que não retorne referência para os internos da classe.Talvez o seu "normalmente" é porque quando a gente lembra de getters/setters a gente lembra "normalmente" de Java, que não tem suporte a esse tipo de construção (retorno de referências).
Mas essa forma não viola igualmente o encapsulamento?
Minha dúvida sempre foi:
Você não pode retornar uma referência para algo que seja diferente do tipo da sua propriedade interna. Além disso, esse "set" não faz qualquer validação e, principalmente, não permite que se faça isso no futuro.
Então, isso não é apenas uma maneira rebuscada de deixar o tipo público?
Claro que como já foi discutido é melhor ter o par, mas gosto de usar esse recurso quando aplicável.
Sim, mas você fez só a validação do idx, não do dado de entrada. Se surgir alguma restrição a esse dado, como ter que ser positivo, ou se tiver que mudar seu tipo interno, dançou. Em termos do dado em si, é praticamente como publica-lo.
Realmente eu escrevi muito mal essa parte. Eu quis dizer que em C++ é comum a gente fazer:...T& something() { return this->s; }...obj.something() = x; // setterx = obj.something(); // getter