Objetos

 

 

 

OOP : Object Oriented Programming

 

La Programación Orientada a Objetos es el modelo más utilizado actualmente. Se basa en la idea de crear unidades independientes, que contengan los valores y datos que van a manejar, y las funciones con las que manipularlos. Estas entidades no pueden ser manipuladas directamente desde fuera, desde otra parte del código, sólo podemos utilizarlas empleando los métodos de comunicación que tiene definidas. De este modo, no podemos decirle x = x + 1 ya que no podemos tocar esa variable interna. En su lugar, le diremos "avanza", e internamente realizará los cálculos necesarios para modificar su posición.
Los objetos son por tanto independientes unos de otro, y sólo necesitamos conocer su interface, el protocolo de comunicación con el que podemos actuar sobre ellos. Los objetos son reutilizables, ya que son elementos completos y autónomos. Permiten trabajar en los problemas de forma modular.

La definición de un objeto se llama "clase" (class). En Java tiene que existir en un fichero propio, por lo que es adecuado incluir cada clase en una pestaña nueva dentro del entorno de Processing. (Tab/ New Tab). El nombre de la clase tiene que empezar con mayúsculas.

 


Objeto simple
La defición de un objeto siempre utiliza la misma plantilla. Primero el nombre de la clase, y a continuación las variables internas, llamadas "propiedades" del objeto.

class Bola { 
  int x,y;
}


Cuando creamos una copia de nuestro objeto, se llama a una función inicial que tiene el nombre de la clase, y asigna los valores iniciales a esas propiedades.

class Bola { 
int x,y;

Bola () {
  x=10;
  y=20;
}

}


A continuación el objeto puede tener unas funciones que realicen cálculos con sus valores, o dibujen formas en pantalla. Estas funciones se denominan "métodos" del objeto.

class Bola { 
int x,y;

Bola () {
  x=10;
  y=20;
}

void dibuja () {
  ellipse(x,y,12,12);
}

void avanza () {
  x = x +1;
}


}


En el caso de agentes autónomos que se desplazan por la pantalla dibujando, es habitual tener un método para calcular su nueva posición, y otro para dibujar.
El código interior del objeto utiliza los recursos que ya conocemos: bucles, condiciones, operadores y funciones de dibujo. Lo que cambia es la estructura que convierte todo en un bloque autónomo y funcional.


Instancias

La clase es la definición del objeto. Para utilizarla, tenemos que crear copias, denominadas "instancias". Podemos pensar en la clase como un molde, y las instancias cada copia particular generada mediante el molde.
Se declaran de forma parecida  a las variables: primero declaramos el nombre y el tipo de objeto, luego inicializamos esa copia (la instanciamos), y ya podemos utilizarla llamando a sus métodos, o consultar sus propiedades.


Bola A;
float v;


void setup () {
  A= new Bola();
  size (200,200);
  smooth();
  v=A.x;
}

void draw () {
  A.dibuja();
}

 



Copias con diferentes valores

En el constructor del objeto podemos requerir unos parámetros de inicialización, de modo que en la creación de cada copia tenemos que especificar los valores de la nueva instancia:


Bola ( int _x, int _y) { // utilizamos unas variables internas con el mismo nombre y "_", para no confundir unas con otras:
  x = _x;
  y = _y;
}


Para crear instancias de este objeto "Bola" tenemos que enviarle los parámetros de creación:

A= new Bola( 10, 20 );

 

obj01



Matrices de objetos

La potencia enorme de los objetos surge cuando utilizamos matrices. Podemos crear cientos, miles de copias de un objeto, cada uno con cualidades diferentes: posición, tamaño, número de patas, velocidad, color...

Bola A [];
int numBolas;

void setup () {
  size (200,200);
  smooth();
  numBolas=15;
  A= new Bola[numBolas];
  for (int i = 0; i<numBolas ; i++){
    A[i] = new Bola( int(random(100) ) , int( random(100) ) ); 
  }
}

void draw () {
  fill(0,0,100,1);
  rect(0,0,width,height);
  for (int i = 0; i<numBolas ; i++){
    A[i].calcula();   // o avanza, o...
    A[i].dibuja(); 
  }
}


obj02



 

 

 

[ GO TO : NEXT PAGE ->