Acabei de ler um dos artigos de Joel em que ele diz:
Em geral, tenho que admitir que tenho um pouco de medo de recursos de linguagem que ocultam as coisas . Quando você vê o código
i = j * 5;
... em C, você sabe, pelo menos, que j está sendo multiplicado por cinco e os resultados armazenados em i.
Mas se você vir esse mesmo trecho de código em C ++, não saberá nada. Nada. A única maneira de saber o que realmente está acontecendo no C ++ é descobrir quais são os tipos iej, algo que pode ser declarado em outro lugar. Isso porque j pode ser de um tipo que tenha
operator*
sobrecarregado e faz algo terrivelmente espirituoso quando você tenta multiplicá-lo.
(Ênfase minha.) Com medo de recursos de linguagem que ocultam as coisas? Como você pode ter medo disso? Ocultar coisas (também conhecidas como abstração ) não é uma das idéias principais da programação orientada a objetos? Sempre que você chama um método a.foo(b)
, você não tem idéia do que isso pode fazer. Você precisa descobrir quais tipos a
e quais b
são, algo que pode ser declarado em algum outro lugar. Então, devemos acabar com a programação orientada a objetos, porque esconde muitas coisas do programador?
E como é j * 5
diferente de j.multiply(5)
qual você pode escrever em um idioma que não suporta sobrecarga de operador? Novamente, você teria que descobrir o tipo j
e espiar dentro do multiply
método, porque eis que ele j
pode ser de um tipo que possui um multiply
método que faz algo terrivelmente espirituoso.
"Muahaha, sou um programador malvado que nomeia um método multiply
, mas o que ele realmente faz é totalmente obscuro e não intuitivo e não tem absolutamente nada a ver com a multiplicação das coisas". Esse é um cenário que devemos levar em consideração ao projetar uma linguagem de programação? Então, temos que abandonar identificadores de linguagens de programação com o argumento de que eles podem ser enganosos!
Se você quiser saber o que um método faz, pode dar uma olhada na documentação ou espiar dentro da implementação. Sobrecarga de operador é apenas açúcar sintático, e não vejo como isso muda o jogo.
Por favor me esclareça.