Orientação a objetos ou OO é um paradigma, ou seja, um padrão de análise, modelagem, projeto e programação, e não apenas uma técnica de programação. Seu uso afeta todo a compreensão do sistema por seus usuários de fato e torna mais simples a gestão de código e características dos sistemas computacionais.
Diferentemente da programação procedural ou estruturada, no paradigma OO todo o esquema de um sistema é baseado na troca de mensagens entre os objetos integrantes do próprio sistema. Essa troca de mensagens é fundamental e implementa o nosso conceito de estímulo-resposta recorrente no nosso mundo real. Além disso, o simples fato de a implementação dos sistemas ser menos acoplada, ou seja, há maior e verdadeira independência entre as partes que formam o todo, torna-se possível uma prática denominada reutilização. Economia é a palavra-chave.
O paradigma da orientação a objetos tem uma história um pouco recente. O primeiro esforço significativo no sentido de fazer uso de uma linguagem que se caracterizasse pelo uso de abstrações mais fieis aos objetos do mundo real envolvidos nos problemas a que os programas desenvolvidos fossem relativos.
No paradigma procedural, toda a arquitetura é orientada às ações que o sistema deve realizar, ou seja, tudo é voltado basicamente às funções do sistema, sendo na maioria das vezes, soluções únicas para problemas únicas com pouca ou nenhuma reutilização de funcionalidades.
A primeira linguagem de que se tem notícia a trabalhar explicitamente com orientação a objetos foi a Simula 67, desenvolvida na década de 1960 na Noruega, no Centro Norueguês de Computação (em inglês, Norwegian Computing Center, e em norueguês, Norsk Renesentral) por dois professores:
- Ole-Johan Dahl
- Kristen Nygaard
Simula 67 na verdade, se propunha a ser uma extensão para outra linguagem já existente (ALGOL 60) como o objetivo de realizar a simulação de eventos discretos.
Simula 67, no entanto não foi "a linguagem" orientada a objetos a aparecer definitivamente. Isso só aconteceria por volta das décadas de 1970/1980 com a linguagem SmallTalk, desenvolvida por uma equipe de trabalho da Xerox encabeçada pelo pesquisador Allan Kay. Os principais pontos em que SmallTalk 80 diferia da linguagens tradicionais:
- O código era compilado para bytecode e executado através de máquina virtual;
- Tudo em Smalltalk era necessariamente um objeto;
- A troca de mensagens entre os objetos era a forma padrão de implementação das funções ou métodos;
- Um esboço claro de polimorfismo;
- Um esboço de Overload ou sobrecarga de métodos;
- Todas as classe obedeciam uma hierarquia, descendendo de uma superclasse.
- Todo objeto funcionava como instância de uma classe, a qual determinava-lhe os comportamentos e propriedades.
- SmallTalk não possuía tipos primitivos, sendo assim, todo e qualquer objeto era implementado na forma de classes.
O importante é que isso moldou definitivamente todo o conceito de orientação a objetos. A partir de então, surgiram implementações de diferentes linguagens utilizando-se das facilidades do paradigma de orientação a objetos.
Linguagens que suportam orientação a objetos
Bem, a lista é grande, e se faz desnecessário nomear a todas aqui, uma vez que esse não é nosso objetivo, mas é interessante saber que a maioria das linguagens modernas implementa intrinsecamente o paradigma OO.
Entre elas temos C++, Object Pascal (Delphi, Lazarus IDE), Python, Java (a Linguagem e a plataforma), C# (C sharp), e diversas "scripting languages", como PHP, Ruby, Javascript, ActionScript.