Linguagens de programação orientada a objetos como C++, Java e Visual Basic foram desenvolvidas por cientistas da computação para acelerar a programação e melhorar a qualidade do software. As técnicas de software OOP dividem os programas em blocos funcionais chamados objetos, tornando os recursos frequentemente necessários, como botões de controle, gerenciamento de banco de dados e matemática, mais fáceis de usar e compartilhar entre os programadores. No entanto, as vantagens vêm com compensações, como complexidade de software adicional e desempenho reduzido.
Melhor produtividade
As técnicas de POO impõem regras a um programador que, a longo prazo, o ajudam a realizar mais trabalho; programas acabados funcionam melhor, têm mais recursos e são mais fáceis de ler e manter. Programas que não usam POO tendem a ser grandes blocos de texto contínuos, como capítulos muito longos em um livro. Quando os programadores intervêm para alterá-lo, o texto acaba se tornando desorganizado e mais difícil de seguir. Por outro lado, os programadores OOP pegam objetos de software novos e existentes e os "costuram" para criar novos programas. Como as bibliotecas de objetos contêm muitas funções úteis, os desenvolvedores de software não precisam reinventar a roda com tanta frequência; mais do seu tempo vai para fazer o novo programa.
Menores custos de programação
Especialmente para projetos maiores, a POO ajuda a reduzir o custo do trabalho de programação. A equipe que trabalha em um projeto pode desenvolver sua própria biblioteca de objetos de software, permitindo que os programadores usem o trabalho uns dos outros com facilidade e reduzindo as horas necessárias para desenvolver programas. Com a melhoria da qualidade do software, os desenvolvedores gastam menos tempo consertando programas com defeito, reduzindo ainda mais os custos de mão de obra.
Curva de aprendizado mais acentuada
Para dominar a POO, um iniciante deve aprender conceitos novos e abstratos, como
polimorfismo -- reutilizando objetos enquanto adiciona novos recursos a eles -- e
encapsulamento -- ocultando partes dos dados internos de um objeto para melhorar a segurança -- nenhuma dessas idéias são encontradas em estilos mais antigos de programação. Esses conceitos não apenas levam tempo para serem aprendidos, como podem ser muito complexos para aspirantes a programadores mais jovens ou para aqueles que programam apenas ocasionalmente.
Software mais lento
O software orientado a objetos pode envolver um código extra de manutenção que não é necessário em outras linguagens de computador; o computador deve executar a programação adicional, diminuindo o tempo de resposta de um aplicativo. Para projetos em que a velocidade é importante, os programadores podem optar por escrever as partes mais críticas em termos de tempo em linguagens não-OOP, como assembler ou C, reservando código OOP para janelas ou botões - áreas nas quais os objetos têm uma clara vantagem.