Pergunta

Eu quero pedir-lhe para fornecer-me com alguns artigos (talvez livros), que eventualmente possa ter encontrado muito convincente criticar a OOP metodologia.

Tenho lido alguns na WWW sobre este tema e eu realmente não encontrar um 'definitiva demotivator'.

Não é muito sobre a minha atitude pessoal para a OOP, mas eu realmente gostaria de ter algo construtivo, com rigorosa base para qualquer tipo de discussão e apenas o pensamento abstrato.


Você pode postar alguma pesquisa original também, mas por favor, ser muito construtivo (como o meu pedido pessoal).

Foi útil?

Solução

Qual a versão do OOP?Alan Kay a visão original?O bastardized forma moderna de que perde inteiramente o ponto e, assim, dificulta-nos com a bizarra de controle de acesso, variáveis de membro, etc?Herança-centric?Baseada em protótipos?Composição OOP?

Cada forma de OOP tem seus pontos fortes e seus pontos fracos;seus defensores e seus detratores;os domínios da sua utilidade e os domínios da sua inutilidade.Não há nada mágico sobre OOP que o torna o Assassino de Paradigma e não há nada infernal sobre ele que o torna o Assassino (Programadores) Paradigma.

Eu realmente não posso apontar-lhe quaisquer livros ou artigos que matou o meu interesse em OOP como uma Bala de Prata (ao contrário de uma das muitas técnicas que pode utilizar para manter meus projetos survivable).Eu posso apontar para o mais engraçado crítica de uma marca específica de OOP, no entanto: Steve Yegge do clássico "a Execução no Reino dos Substantivos".

Outras dicas

Rick Hickey's Já estamos lá ? - Uma desconstrução do tempo orientado a objetos Foi um abridor de olhos para mim. É a crítica mais lógica do OO que encontrei.

Se você quer uma crítica à programação do OO, aqui está o que eu recomendaria:

  1. Aprenda Smalltalk
  2. Aprenda Erlang
  3. Aprender esquema

Depois de fazer isso, você terá muitas críticas à interpretação comum da programação OO.

(Dica: OO era de muitas maneiras destinadas a se assemelhar mais ao modelo de computação do ator, mas a interpretação comum é efetivamente uma modificação do modelo processual/estruturado)

O problema é: a maioria das pessoas realmente não conhece a programação orientada a objetos, muitos designs são péssimos.

Leia os trabalhos de Scott Ambler, incluindo o dele (agora bem velho) Construindo aplicações de objetos que funcionam. Isso foi revelador para muitas pessoas.

Talvez não seja exatamente o que você estava procurando, mas dê uma olhada na edição de janeiro/fevereiro da IEEE Software Magazine: Análise orientada a objetos: é apenas teoria?. A conclusão básica é que o OOA não fornece uma boa relação custo/benefício, por isso é mal utilizado.

Dado que a OOA não é efetivamente utilizada ou apoiada no "mundo real", suspeito que, para o desenvolvimento maior, a arquitetura geral do sistema, o modelo de objeto implantado e a hiase de classe acabem sendo sub-ideais e mal compreendidos (implementados) por várias partes de a equipe de desenvolvimento. Um segundo artigo no mesmo diário: Quatro tendências que levam ao inchaço de tempo de execução do Java Aponte para alguns problemas comuns de OOP que prejudicam a implantação de sistemas Java (OOP) de alto volume. As observações feitas neste artigo provavelmente se aplicam aos aplicativos OOP mais altamente arquitetados.

Não aceite isso como o OO, apenas reflete que, como praticantes de software, temos um pouco de trabalho a fazer para desenvolver melhores mecanismos de comunicação de pessoa a pessoa para transmitir modelos de processo altamente complexos e abstratos.

Quando você define um processo em linguagem natural. Você usa frases onde você define o sujeito quem fará um ação em um ou mais objetos.

O único ponto de correção é o ação, o predicado da frase.

Não acho que atribuir ações aos objetos seja uma boa ideia. Existe apenas um verbo, mas pode ser vários substantivos.

No OOP, você pode escrever um arquivo de pelo menos três maneiras:

file.write(data);

ou

data.writeToFile(file);

ou

OperatingSystem.write(file, data);

Qual objeto deve implementar o método? Você precisa pensar sobre isso também. Enquanto da maneira processual, você provavelmente escreve

write(file, data);

E a única coisa que você precisa pensar é a ordem dos operandos, o que é geralmente não importa.

(Bem o arquivo e os dados podem não ser o melhor exemplo, mas você provavelmente vê o ponto)

Você realmente deveria ver Sr. B. Jacobs:

OOP Mitos desmascarados

(Também conhecido como OOP OverSed.)

http://cat-v.org tem uma ótima página em Programação orientada a objetos.

A maior parte da página consiste em citações humorísticas, mas não terrivelmente informativas. No entanto, na parte inferior da página estão vários links para artigos que desafiam o OOP. Eles são:

Se você estiver interessado em alternativas à programação orientada a objetos:

  • Cat-v.org. Da página 'Sobre': O Cat-V.org hospeda uma série de sites dedicados a diversos assuntos que compartilham uma perspectiva intelectual idiossincrática, questionando a ortodoxia e fomentando elitismo e altos padrões em tópicos do design de software à política, passando pela arte e jornalismo e qualquer outra coisa interessante.

  • Estrutura e interpretação de programas de computador. Ensina especificamente a programação funcional. Disponível gratuitamente online aqui, à venda aqui. Não posso recomendar isso de forma suficiente. É absolutamente revolucionário. Isso vai mudar a maneira como você pensa.

  • Todos e quaisquer escritos/vídeos/palestras por Rob Pike e Steve Yegge. De particular interesse é o de Yegge Turnê de idiomas Whirlwind.

Eu recomendo aprender um paradigma de programação diferente ou argumentos pro pro argumentos para paradigmas específicos (http://www.info.ucl.ac.be/~pvr/vanroychapter.pdf). Além do OOP, acho que o mais amplamente utilizado é o paradigma funcional (pesquisa FE "Por que a programação funcional é importante"), mas também dê uma olhada nos outros. Quando você começa a procurar a programação de uma perspectiva diferente, as falhas do OOP começam a aparecer automaticamente.

Exercício simples: defina os objetos IPERSON, CMALE e CFEMALE e implemente os métodos "sexo" e "reproduzir".

como sobre Steve Yegge's execução no reino do substantivopara o estilo java oo

A Bíblia Gideon de padrões de design orientados a objetos, apropriadamente nomeados Padrões de design. Um dos melhores livros de design de software que eu já li.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top