Algoritmos descrevem o que o computador deve fazer. Estrutura descreve como o algoritmo é organizado [no código fonte]. OOP é um estilo de programação que aproveita certas estruturas "orientadas a objetos".
Os livros de algoritmo muitas vezes evitam a POO porque estão focados no algoritmo, não na estrutura. Fragmentos de código que dependem fortemente da estrutura tendem a ser exemplos ruins para colocar em um livro de algoritmos. Da mesma forma, os livros de POO muitas vezes evitam os algoritmos porque desordenam a história. O ponto de venda do OOP é sua fluidez, e vinculá-lo a um algoritmo faz com que pareça mais rígido. É mais sobre o foco do livro do que qualquer outra coisa.
No código da vida real, você usará os dois lado a lado. Você não pode resolver problemas do computador sem algoritmos, por definição, e é difícil escrever bons algoritmos sem estrutura (OOP ou não).
Como um exemplo de onde eles ficam borrados, use a Programação dinâmica. Em um livro de algoritmos, você descreveria como obter um conjunto de dados homogêneo em uma matriz e usar a Programação Dinâmica para chegar a uma solução. Em um livro OOP, você pode encontrar uma estrutura como Visitor, que é uma maneira de executar algoritmos arbitrários em um conjunto de objetos heterogêneos. O exemplo do livro do DP pode ser considerado um Visitante muito simples, operando em objetos em uma ordem geralmente ascendente. O padrão Visitor pode ser considerado o esqueleto de um problema de DP, mas falta a carne e as batatas. Na realidade, você encontrará muitas vezes as duas coisas juntas: você usa o padrão Visitor para lidar com a heterogeneidade em seu conjunto de dados (o DP é ruim nisso) e o DP na estrutura do Visitor para organizar seu algoritmo para minimizar o tempo de execução (Visitor não
Também vemos algoritmos operando sobre os padrões de design. É mais difícil expressar exemplos em um espaço pequeno, mas depois de ter estrutura, você começa a querer manipular essa estrutura e usa algoritmos para fazê-lo.
Existem alguns problemas que só podem ser apresentados e resolvidos pelo OOP?
Esta é uma pergunta mais difícil de responder do que você pensa. Na primeira ordem, não há razão computacional para você precisar de POO para resolver qualquer problema. A prova simples é que todo programa de POO é compilado no assembly, que é uma linguagem decididamente não-POO.
No entanto, no esquema maior das coisas, a resposta começa a se envergonhar para sim. Você raramente é limitado simplesmente por metodologias de computação. Na maioria das vezes, existem coisas como necessidades de negócios e habilidades de desenvolvedor que levam em consideração a equação. Atualmente, muitos aplicativos não poderiam ser escritos sem OOP, não porque o OOP é de alguma forma fundamental para a tarefa, mas porque a estrutura fornecida pelo OOP era essencial para manter o projeto no caminho e no orçamento.
Isso não diz que nunca abandonaremos a OOP no futuro por alguma nova estrutura engraçada. Apenas diz que é uma das ferramentas mais eficazes em nossa caixa de ferramentas para uma fração surpreendentemente grande de tarefas de programação disponíveis atualmente. Problemas futuros podem nos levar a abordar o desenvolvimento usando estruturas diferentes. Por um lado, espero que as redes neurais exijam uma abordagem de desenvolvimento muito diferente, que pode ou não ser "orientada a objetos".
Não vejo OOP desaparecendo em um futuro próximo devido à maneira como os designers de algoritmos pensam. Até o momento, o padrão usual é que alguém projete um algoritmo que não aproveite o OOP. A comunidade OOP percebe que o algoritmo não se encaixa realmente na estrutura OOP, e realmente não precisa, então eles envolvem todo o algoritmo em uma estrutura OOP e começam a usá-lo. Considere boost::shared_ptr
. Os algoritmos de contagem de referência que ficam dentro shared_ptr
não são muito amigáveis com OOP. No entanto, o padrão não ficou popular até a shared_ptr
criação de um wrapper OOP que expôs os recursos dos algoritmos em um formato estruturado OOP. Agora, é tão popular que chegou às especificações mais recentes para C ++, C ++ 11.
Por que isso é tão bem sucedido? Os algoritmos são ótimos na solução de problemas, mas geralmente requerem um investimento inicial substancial em pesquisa para entender como usá-los. O desenvolvimento orientado a objetos é muito eficaz para agrupar esses algoritmos e fornecer uma interface que requer menos investimento inicial para aprender.