No único blog de desenvolvimento que li, por aquele cara do Joel-On-Software-Founder-of-SO, li há muito tempo que o OO não leva ao aumento da produtividade. O gerenciamento automático de memória sim. Legal. Quem pode negar os dados?
Ainda acredito que OO é não-OO o que programar com funções é programar tudo em linha.
(E eu deveria saber, como comecei com GWBasic.) Quando você refatora o código para usar funções,
variable2654
torna-se
variable3
o método em que você está. Ou, melhor ainda, ele tem um nome que você pode entender
e se a função é curta , é chamado
value
e é suficiente para uma compreensão completa.
Quando o código sem funções se torna código com métodos, você pode excluir quilômetros de código.
Quando você refatorar código para ser verdadeiramente OO, b
, c
, q
, e Z
se tornar this
, this
, this
e this
. E como não acredito em usar a this
palavra - chave, você pode excluir quilômetros de código. Na verdade, você consegue fazer isso mesmo se usar this
.
Eu não acho que OO é uma metáfora natural.
Também não acho que a linguagem seja uma metáfora natural, nem os "cheiros" de Fowler são melhores do que dizer "esse código tem um gosto ruim". Dito isto, acho que o OO não é sobre metáforas naturais e as pessoas que pensam que os
objetos simplesmente surgem em você estão basicamente perdendo o objetivo.
Você define o universo de objetos e melhores universos de objetos resultam em códigos mais curtos, fáceis de entender, que funcionam melhor ou todos eles (e alguns critérios que estou esquecendo). Eu acho que as pessoas que usam os objetos naturais dos clientes / domínio como objetos de programação estão perdendo o poder de redefinir o universo.
Por exemplo, quando você faz um sistema de reservas aéreas, o que você chama de reserva pode não corresponder a uma reserva legal / comercial.
Alguns dos conceitos básicos são ferramentas muito legais
Eu acho que a maioria das pessoas exagera com a coisa toda "quando você tem um martelo, todas são pregos". Penso que o outro lado da moeda / espelho é igualmente verdadeiro: quando você tem um dispositivo como o polimorfismo / herança, começa a encontrar usos onde ele se encaixa como uma luva / meia / lente de contato. As ferramentas do OO são muito poderosas. Penso que a herança única é absolutamente necessária para que as pessoas não se deixem levar, meu próprio
software de herança múltipla não resiste.
Qual é o sentido do POO?
Eu acho que é uma ótima maneira de lidar com uma base de código absolutamente enorme. Eu acho que ele permite que você organize e reorganize seu código e fornece uma linguagem para fazer isso (além da linguagem de programação em que você está trabalhando), e modula o código de uma maneira bastante natural e fácil de entender.
OOP está destinado a ser mal interpretado pela maioria dos desenvolvedores
Isso ocorre porque é um processo de abrir os olhos como a vida: você entende OO cada vez mais com a experiência e começa a evitar certos padrões e a empregar outros à medida que fica mais sábio. Um dos melhores exemplos é que você para de usar a herança para classes que não controla e prefere o padrão
Fachada .
Em relação ao seu mini-ensaio / pergunta
Eu queria mencionar que você está certo. Reutilização é um sonho, na maior parte. Aqui está uma citação de Anders Hejilsberg sobre esse tópico (brilhante) daqui :
Se você pedir aos programadores iniciantes que escrevam um controle de calendário, eles geralmente pensam: "Ah, eu vou escrever o melhor controle de calendário do mundo! Será polimórfico com relação ao tipo de calendário. Ele terá exibidores, e mungers, e isso, aquilo e aquilo outro ". Eles precisam enviar um aplicativo de calendário em dois meses. Eles colocam toda essa infraestrutura no controle e passam dois dias escrevendo sobre um aplicativo de calendário de baixa qualidade. Eles pensam: "Na próxima versão do aplicativo, farei muito mais".
No entanto, uma vez que eles começam a pensar em como vão implementar todas essas outras concretizações de seu design abstrato, o design está completamente errado. E agora eles se pintaram em um canto, e eles têm que jogar tudo fora. Eu tenho visto isso repetidamente. Eu acredito muito em ser minimalista. A menos que você realmente resolva o problema geral, não tente criar uma estrutura para resolver uma questão específica, porque você não sabe como deve ser a estrutura.