segunda-feira, 11 de abril de 2011

POO (Programação Orientada a Objetos)

Saudações,

venho postar aqui hoje o que mais tenho visto ultimamente. É a tão falada programação orientada a objeto.

(Os exemplos usados aqui seguem o padrão do Java, mas devido a sua sintaxe super parecida com C++/C# todas as linhas serão mutualmente inteligíveis).

Antes, uma imagem muito legal que achei na internet que ilustra muito bem as três linguagens orientadas a objetos (Java, C#, Ruby), e a linguagem C como a estruturada.



O que é: É um paradigma de programação que consiste na montagem de estruturas de dados (objetos) que tem um estado (variáveis de instância), e um comportamento próprio (métodos/funções). Há semelhança com a struct da linguagem C, já que ambos podem ter variáveis, mas não funções, apenas classes tem funções e variáveis.

Então você me pergunta... O que é uma classe?

Oras, é um objeto! Mas struct também é um objeto. Pois é, de certa forma quase toda estrutura de dados é um objeto. Mas não vamos entrar neste dilema. rs

O que importa é que uma classe é um objeto, e uma classe pode ter variáveis e funções (métodos). Porém, no que uma função iria ajudar em um objeto?

Imaginemos que temos um objeto gato em nosso programa. Vamos declara-lo?

class Gato{
float peso;
float altura;
(continua...) }

Certo, nas structs você tem básicamente o mesmo, uma estrutura de dados, com diversos dados de diferentes tipos dentro. Mas e se você quiser que a sua estrutura faça algo? Daí você terá de criar uma função que possa manipular a estrutura gato, e que será completamente independente da estrutura. Pois é, terrível isto. Na programação orientada a objetos isto é feito de uma forma simples. Vejamos:

class Gato{
float peso;
float altura;

void miar(){
//Comandos para fazer o gato miar.
}
void comer(){
//Comandos para fazer o gato comer.
}
}


Muito bom. Agora fica bem intuitivo. Já que as funções são membros da "estrutura" (que agora é chamada de "classe"), você pode alcança-las através do próprio objeto gato.

Gato snowball = new Gato; //O snowball acaba de "nascer".
snowball.miar(); //Fará o snowball miar.
snowball.comer(); // Fará o snowball comer.

Gato gatinho_dorgas = new Gato; // O gato "gatinho_dorgas" acabou de "nascer".
gatinho_dorgas.miar(); // Faço especificamente o "gatinho_dorgas" miar.
gatinho_dorgas.comer(); // Faço especificamente o "gatinho_dorgas" comer.

Ou seja, da mesma forma que acessamos os membros de uma struct em C, acessamos os métodos (funções) em C++/Java/C#/etc,etc...

Legal!! Já sei tudo de OO! Eu sou fo%@ eu vou trabalhar na Nokia!

rs... Calma, campeão! Isto é só o início. Existem muitos outros conceitos sobre OO. Como por exemplo a herança, polimorfismo, classes abstratas, grupos de acessos,métodos virtuais, e muito mais!

Deixarei este assunto para tratar melhor em outra postagem.

Abraços! =)