Introducción
La palabra instancia en informática se utiliza con distintos significados, por ejemplo podemos hablar de la instancia de un programa de computadora para referirnos al programa que se está ejecutando.
En este artículo vamos a ver el concepto de INSTANCIA en el ámbito de la programación orientada a objetos, osea las instancias que se crean a partir de una determinada CLASE de Programación.
Qué es una INSTANCIA en programación
Antes de enteder el concepto de INSTANCIA en programación es necesario saber qué es una clase en programación, puedes consultar el artículo detallado, pero para resumirlo, una clase es una estructura de datos donde se definen los campos y funciones que modelan el comportamiento de un determinado objeto.
Por ejemplo, si tenemos una clase llamada “Gato” algunos de sus propiedades pueden ser el “Nombre” y el “Color del pelaje”, mientras que algunas de sus funciones podrían ser “Comer” y “Maullar”.
La clase Gato permitirá crear objetos tipo Gato y cada uno de estos objetos será una INSTANCIA de la clase Gato, en su interior tendrán definidos las propiedades y las funciones que se definieron en la clase, pero la información que haya en sus campos será propia de cada INSTANCIA, es decir cada objeto será una instancia independiente con un estado propio, esto hace que podamos tener por ejemplo dos instancias de la clase Gato cada una con un nombre y pelaje distinto.
Los objetos de programación son entes abstractos que existen en la memoria de los ordenadores, el concepto es muy útil porque permite una gran abstracción para solucionar problemas.
Constructores
Para crear una INSTANCIA de una clase se utilizan los llamados “Constructores“, funciones que nos permiten ingresar los datos del objeto y nos devuelven como resultado la referencia del objeto creado.
Un ejemplo de un Constructor para la clase Gato en algunos lenguajes de programación como Java y C# podría ser el siguiente:
public Gato(string name,Color color){
nombre=name;
colorDelPelaje=color;
}
Luego para construir el objeto se usa la instrucción “new”, por ejemplo de esta forma:
Gato unGato = new Gato(“Charles”,Color.white);
Esto creará un objeto de la clase Gato con nombre “Charles” color blanco y la referencia del objeto la tendremos almacenada en el campo “unGato”.
Ejemplos de INSTANCIAS de objetos en Unity
En Unity en la gran mayoría de los casos no necesitaremos definir constructores para las clases ni usar la instrucción “new”, ya que hay muchas cosas de las que se encarga el motor. En general los Scripts que se crean en Unity son MonoBehaviours por lo que Unity se encarga de crear estos objetos, nosotros simplemente tenemos que indicarle cuándo o dónde crearlos.
Vamos a ver el concepto de Instancia en programación aplicado al motor Unity con el siguiente ejemplo de la clase Gato, los nombres estarán en inglés pero en escencia es lo mismo que vimos al principio del artículo.
Definición de la clase Gato
Comenzamos creando un nuevo Script haciendo clic derecho sobre la carpeta Assets, entrando en “Create” y eligiendo “C# Script”, le ponemos el nombre “Cat”, este Script definirá la clase “Gato” de la que hablamos antes.
Al crear un nuevo Script, Unity se encarga de definir una clase que lleve ese mismo nombre, hará que herede de la clase MonoBehaviour y definirá algunas funciones útiles como Start y Update, en la figura 1.b se ve el Script tal cual lo definió Unity.
Vamos a modificarlo de la siguiente manera:
Como se observa en la figura 2 se han definidos dos campos, un string llamado “catName” para el nombre del Gato y un Color llamado “furColor” para el color del pelaje. Además se han añadido dos funciones, Eat() que hace que el Gato coma y Meow() hace que el Gato emita un maullido.
Crear INSTANCIAS de la clase Gato
La gran mayoría de Scripts que creemos en Unity van a ser similares a esto en el sentido en el que heredarán de la clase MonoBehaviour. Para crear una INSTANCIA de este tipo de objetos basta con añadirlos a algún GameObject de la jerarquía de Unity.
Comencemos creando objetos vacíos que contendrán las INSTANCIAS de la clase Gato, en la figura 3 se muestra cómo crear un GameObject vacío.
En la figura 4 vemos dos GameObjects, uno llamado Cat1 y otro Cat2, ambos tendrán una instancia de la misma clase Gato.
Para crear las INSTANCIAS de la clase Gato hay que añadir el Script en cuestión como una componente del GameObject, esto se puede seleccionando el GameObject al que se le quiere añadir el componente y tomar el Script de la carpeta Assets y arrastrarlo al inspector. Otra forma de añadir el componente es usando el botón “Add Component” que aparece en el inspector.
En las figuras 5 y 6 se ve el inspector de los GameObjects Cat1 y Cat2 de la figura 4, como se observa, cada uno tiene una componente tipo “Cat”, es decir cada uno tiene asignada una INSTANCIA de la clase Cat. Observen además como sus campos “catName” y “furColor” en cada caso tienen información diferente, ya que cada INSTANCIA representa a un Gato individual.
Con esto hemos creado dos instancias de la clase Cat, como un detalle extra las instancias pueden estar asignadas al mismo GameObject, como se muestra en la figura 7.