Programação orientada a objectos, uma visao basica

Bem eu vou tentar aqui transmitir aqui alguns conceitos sobre como se deve encarar este conceito de orientação a objectos.

Quando programavamos em C na realidade faziamos em programação estruturada alguma coisa daquilo que fazemos hoje em programação orientada a objectos (OOP).

Reparemos no caso da estruturas. Na realidade programas serios em C sao na sua maior parte construidos com base em estruturas (vide algumas libs famosas). Continuando, repare para estre trecho de codigo duma struct qualquer:

struct triangulo{

tipo ladox;
tipo ladoy;
tipo ladoz;

};

/* criar uma var do tipo struct exemplosimples */

struct triangulo variavel;

/* Acessar o membro ladoz e atribuir um valor */

Usamos a notação pontual, assumindo ser do tipo inteiro

variavel.ladoz = 2;

Se quisermos criar mais uma variavel para TRABALHAR EM CIMA dos mesmos campos recorremos novamente ao tipo :

struct triangulo variavel2;

/* Acessar o membro ladoz e atribuir um valor */

Usamos a notação pontual, assumindo ser do tipo int

variavel2.ladoz = 3;

Ora notamos aqui que podemos criar n variaveis (que possuem endereços  de memoria) com uma ‘copia’ sua de um determinado membro da estrutura.

O que notamos aqui:

Repare, se fosse em ‘programação orientada a gambiarras’ e tu quisesses criar 2 triangulos com definições diferentes:

Um triangulo escaleno e um equilatero equivalem a seis lados, definindo em medidas de lados.

int ladox1, ladox2, ladoy1, ladoy2, ladoz1, ladoz2;

Repare na inusabilidade do trecho de codigo acima

Nos apeguemos a medida dos seus lados ao invez dos seus angulos internos, por exemplo.

O escaleno pela medida dos seus lados possui 3 lados diferentes, e o equilatero com 3 lados iguais.

Se quisessemos criar um triangulo escaleno recorrendo a estrutura acima:

/* criar variavel escaleno*/

struct triangulo escaleno;

/* atribuir medidas dos lados x y e z */

escaleno.x = 2;
escaleno.y = 3;
escaleno.z = 4;

Reparem que os membros (x, y e z) em si da estrutura sao mantidos, porque apenas uma copia deles é tomada por cada variavel do tipo struct triangulo.

Mas e se quiser criar um triangulo equilatero?

‘It’s the same potatoe’ como dizia alguem:

/* criar variavel equilatero*/

struct triangulo equilatero;

/* atribuir medidas dos lados x y e z */

equilatero.x = 2;
equilatero.y = 2;
equilatero.z = 2;

Se notarmos podemos ver quem em termos de Programação orientada a Objectos X, Y E Z sao o quê?

VARIAVEIS DE INSTANCIA

Em Java todo programa é criado sobre uma classe, é deste modo que o compilador consegue organizar-se por meio dos pacotes, tal como em C um programa sem a função main nao funcionava.

Ora vejamos, podemos chamar uma classe de objecto (estamos ou nao?) e este objecto possui algumas propriedades. Estas propriedades por sua vez somente e SOMENTE sao manipuladas por meio de referencias a objectos.

O que sao as referencias a objectos

Exactamente aquilo que fizemos ali acima com as variaveis escaleno e equilatero, estes sao as referencias a objectos que permitem manipular membros do objecto, que sao as variaveis de instancia que assim sao chamadas porque elas se permitem que sejam criadas ‘copias’ delas mesmas por referencias a objectos.

Se esteve atento acima notou que estamos a falar até agora exactamente a mesma coisa, sem alterações.

Continuando,  voltemos ao nosso exemplo do triangulo e apliquemo-lo em Java, mas antes falemos de alguns conceitos basicos:

Os valores das variaveis de instancia sao inicializados por meio dos metodos set.
Os valores das variaveis de instancia sao retornados por meio dos metodos get.
O construtor da classe permite chamar os metodos set e inicializa-los recebendo tambem ou nao recebendo parametros.
O metodo toString() permite retornar todos valores das variaveis de instancia numa String concatenada.

Ok, vamos ao codigo

public class Triangulo{

// Variaveis de instancia somente pertencentes a esta classe:

private int x;
private int y;
private int z;

// Construtor da classe. Inicializa variaveis de instancia:

public Triangulo(int x, int y, int z)
{

// chama metodos set para iniciar variaveis de instancia

// Para triangulo escaleno e equilatero

setEscaleno(x, y, z);
setEquilatero(x, y, z)

}

// Definicao dos metodos set

public int setEscaleno(int ladox, int ladoy, int ladoz)
{
x = ladox;
y = ladoy;
z = ladoz;
}

public int setEquilatero(int ladox, int ladoy, int ladoz)
{
x = ladox;
y = ladoy;
z = ladoz;
}

// Definicao dos metodos get

public int getEquilatero()
{
if (x == y && x == z && z == x && z == y)
return TOKEN;
else
return;
}

public int getEscaleno()
{
if (x != y && x != z)
return TOKEN;
else
return;
}

Pronto, isto é o basico. Repare agora que se eu quiser instanciar o objecto Triangulo para criar uma referencia a objecto escaleno eu faria o seguinte:

Triangulo escaleno = new Triangulo(2,3,4);

// Quero saber se realmente possuimos um triangulo escaleno?

if (escaleno.getEscaleno == TOKEN)

System.out.printf(“Triangulo escaleno. Valor logico %d”, escaleno.getEscaleno());

else
return;

Repare que na instrução  Triangulo Escaleno = new Triangulo(2,3,4); na realidade passamos esses valores ao construtor que os recebe e ‘atira’ aos metodos set que modifica os valores das variaveis de instancia. Os metodos get recebem e avaliam os valores ‘actuais’ das variaveis de instancia e determinamos se os valores da chamada a função get por meio da chamada a referencia condizem com aquilo que pretendemos.

Repare agora que se eu quiser instanciar o objecto Triangulo para criar uma referencia a objecto equiltero eu faria o seguinte:

Triangulo equilatero = new Triangulo(2,2,2);

// Quero saber se realmente possuimos um triangulo equilatero?

if (equilatero.getEquilatero == TOKEN)

System.out.printf(“Triangulo equilatero. Valor de token %d”, equilatero.getEquilatero());

else
return;

OBS: Acima considerar TOKEN um valor a sua escolha, pode ser uma variavel de escopo ‘final’.

E é tudo por hoje.

Espero ter sido um bocado claro naquilo que disse. qualquer erro aí acima poderão obviamente retificar ou critica-lo. Dentro em breve entrarei em mais detalhes, isto foi escrito a pressa e a socapa.

Grazie mille.

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s