O paradigma da Programação Orientada a Objectos, pela primeira vez pensado por Kristin Nygaard em 1968, gira em torno de dois conceitos: classes e objectos. Este é um paradigma de análise, projecto e programação de sistemas de software baseado na composição e interacção entre diversas unidades de software chamadas de objectos.
Antes de pensarmos em Programação Orientada a Objectos, que nos obrigaria a falar dos conceitos de herança e polimorfismo, é suficiente focarmos a nossa atenção no paradigma ADT (Abstract Data Type), cuja construção dos programas consiste na definição de novos tipos de dados e da criação/manipulação de objectos desse tipo.
O que é um objecto?
Uma bola de futebol é um objecto real, que pode ser percepcionado pelos nossos cinco sentidos.
Podemos identificar algumas propriedades deste objecto, tais como: volume, cor, material do revestimento e outras. Por outro lado cada bola de futebol(objecto) pode apresentar comportamentos diferentes fazendo-se variar apenas uma das suas propriedades, tal como a pressão interna de ar. Facilmente podemos associar a cada bola de futebol um fórmula (método ou função) que permita calcular a elasticidade de cada bola, ficando o resultado final dependente dos valores associados a cada bola em particular.
No computador, os objectos apenas existem na memória principal e não se podem “tocar”, assim tudo o que se disse acerca da bola de futebol é perfeitamente válido para este tipo de objectos.
O que é um classe?
É um tipo de dados cujas instâncias se designam de objectos e que contém um conjunto de dados que descrevem o objecto, juntamente com as descrição das acções que esse objectopode executar (funções).
É um conjunto de objectos que partilham a mesma estrutura e comportamento.(Booch)
Programas, classes e objectos
Da observação desta figura vamos notar que:
- Um programa qualquer ( representado pelo rectângulo azul ) pode utilizar uma ou mais classes;
- Cada classe encontra-se dividida em duas áreas distintas: public e private;
- A área public pode ser acedida pelo programa e pela área private da própria classe;
- A área private de uma classe apenas está acessível a partir a sua área public.
- O especificador de acesso “protected” não vai ser abordado, uma vez que não vou abordar mecanismos de herança nesta fase.
Membros de uma classe
Tal como acontecia nas estruturas (struct), uma classe é formada por um conjunto de membros que podem ser de dois tipos:
membros-dados (atributos);
membros-função (métodos);
Isto significa que à nossa representação gráfica de uma classe podemos agora acrescentar:
Procedimental vs ADT
Para não terminar sem mostrar ums linhas de código apresento um programa muito simples que permite calcular a soma de dois números.
No primeiro caso recorro ao paradigma procedimental e no segundo ao paradigma ADT.
Procedimental
#include <iostream>
using namespace std;
int soma2(int a, int b){
return (a+b);
}
int main(){
int a=1,b=2;
cout<<soma2(a,b)<<endl;
return 0;
}
ADT
#include <iostream>
using namespace std;
class SOMA2{
private:
int valor1, valor2;
public:
int soma2(){return valor1+valor2;}
void setsoma2(int a, int b){valor1=a;valor2=b;}
};
int main(){
SOMA2 ab;
ab.setsoma2(1,2);
cout<<ab.soma2()<<endl;
return 0;
}
Naturalmente que este pequeno exemplo, que apenas permite calcular a soma de dois números, não torna evidentes as vantagens associadas à utilização dos paradigmas ADT nem OOP.
(work in progress …)

