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 ae quais bsã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 * 5diferente 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 je espiar dentro do multiplymétodo, porque eis que ele jpode ser de um tipo que possui um multiplymé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.