Paso 3: Cartilla de programación - clases y objetos orientado a objetos
Funciones en pocas palabras:
Una función es esencialmente un pedazo de código que se puede reutilizar más de una vez. Romper un esquema complejo en pequeñas funciones asegurar legibilidad (el código es más fácil de leer, ya que todo el complejo código obtiene abstraída; más fácil depurar en este momento), modularidad (convierte el código en piezas modulares, como legos) y evita que el código se seca (seco está parado para no repetir a ti mismo; significa repetición manualmente copiar/pegar código varias veces).
Esta es la estructura genérica de una función:
data_type_of_returned_value"'vacío' si devuelve nada"{functionName(parameters)}
la definición de función
}
Vamos a implementar una función que muestra nuestro círculo y otra para su movimiento (que es, manipulación):
Float x = 200;
Float y = 200;
void setup() {}
Size(400,400);
Smooth();
}
void draw() {}
Background(255);
Display(); llamar a una función
Move(); llamada a la función segunda
}
las funciones de
void display() {}
noStroke();
Fill(140);
Ellipse(x,y,80,80);
}
move() vacío {}
x = x + random(-5,5);
y = y + random(-5,5);
}
A pesar de que el código hace exactamente lo mismo que antes, ver cómo se organizaba el ciclo draw() está ahora! Tenga en cuenta cómo "llama" o "invoca" las respectivas funciones de dentro del bucle de draw().
Funciones también pueden tener "parámetros". Los parámetros son "titulares de lugar" para los valores que usted puede "pasar" a una función. Al recibir los valores, la función les puede calcular de acuerdo a cómo la definiste. Por ejemplo, aquí es una función que toma dos parámetros (x e y) y usa los argumentos pasados para representar esta forma extraña:
void drawShape (float x, float y) {}
noStroke();
Fill(140);
Ellipse(x,y,80,80);
Ellipse(x-151,y+2,44,44);
Fill(68,234,66);
Rect(x-131,y-5,92,18);
}
Ver foto de arriba (primera foto).
En la función anterior, utiliza x e y como referencia y definir los parámetros para todas las formas "relativos" a x y y. Esta técnica se denomina "posicionamiento relativo". Por ejemplo, si referencia x es 400, y el valor de x de cierta forma es 89, entonces la posición de esa forma con respecto a la referencia x es "x-311" (400-89 = 311).
Funciones también pueden "devolver" los valores, pero eso es para otro día!
Un objeto y la clase de historia:
Como hemos visto hace un tiempo, funciones de lograr un cierto nivel de organización de nuestro código. Sin embargo, haciendo uso de los objetos en nuestro código es una estrategia muy eficiente de la organización.
Un objeto esencialmente une datos (variables) y functionality(functions) de una determinada entidad en un paquete aseado. Con el fin de crear objetos, necesitamos un plano para él. Esto se llama la clase.
En lugar de balbucear sobre cualquier conceptos más complejos, vamos a crear una clase para generar objetos zangolotean círculo:
clase círculo {}
variables de clase (también llamadas variables de instancia)
Float x;
Float y;
d flotador;
color c;
el constructor del objeto
Círculo (float x, float y, float d, color c) {}
this.x = x;
this.y = y;
this.d = d;
this.c = c;
}
los métodos de
void display() {}
noStroke();
Fill(c);
Ellipse(this.x,this.y,this.d,this.d);
}
void jiggle() {}
this.x = this.x + random(-2,2);
this.y = this.y + random(-2,2);
}
}
Cosas a destacar:
- Hay esta cosa extraña en el código llamado el "constructor". El constructor es la función que crea un objeto, junto con la palabra clave "nueva" (más sobre esto un poco). La definición del constructor debe contener código de cómo construir objetos. El nombre del constructor debe ser el mismo que el nombre de clase.
- la palabra "this" se utiliza para acceder a las variables el pertenece a la clase y sólo la clase! Puedes ver que he utilizado los mismos nombres de variable para las variables de clase y los parámetros de constructor. Mediante el uso de "esto", permite procesamiento distinguir entre los dos. Por lo tanto, "this.x = x" indica: almacenar el valor de x al mismo tiempo que el objeto a "this.x", la variable de clase.
- Las mismas funciones que hemos visto antes de que se está utilizando en la clase. Una función asociada con una clase se llama un "método".
Es una buena práctica para mantener las clases en un archivo independiente, para que el código principal se ve limpio. Puede hacer esto mediante la creación de una segunda ficha en el entorno del procesado. Cuenta, nombre de la ficha debe ser igual a la de la clase. (véase el cuadro arriba; en tercer lugar del cuadro).
Usando la clase para hacer los objetos:
declarar objetos
C círculo;
D círculo;
void setup() {}
Size(400,400);
Smooth();
inicialización de objetos
c = new Circle(200,200,80,color(100));
d = nuevo Circle(344,355,20,color(62,177,137));
}
void draw() {}
Background(255);
uso de objetos
c.display();
c.Jiggle();
d.display();
d.Jiggle();
}
ver resultados (segunda foto).
Declarar objetos - declarando objetos, es más fácil considerar la clase como un tipo de datos recién creada. Por lo tanto, "Circle c" significa declarar una variable "c" de tipo "Círculo" (compare con "int c").
Inicialización de objetos - ver cómo invoca el constructor mediante la palabra clave "new"? Puesto que la definición del constructor círculo tenía parámetros, tenemos que pasar argumentos para inicializar el objeto. Estos argumentos se asignan a las variables del objeto (x, y, c etc.). Esto nos permite utilizar la misma clase para crear objetos con propiedades diferentes. En el ejemplo anterior, los círculos c y d son diferentes entre sí en tamaño y color.
Tenga en cuenta también que los objetos se inicializan en setup(). Esto es lógico, ya que no tenemos intención de inicializar el mismo objeto una y otra vez en draw().
Utilizando objetos - utilizamos el punto "." operador para tener acceso a métodos del objeto, como se ve arriba.