Usuario:Santhy/En edición/Instancia (programación)

De Wikipedia, la enciclopedia libre

En el paradigma de la orientación a objetos, una instancia se refiere a una realización específica de una clase o prototipo determinados.

En general, cuando se ejecuta un programa en un computador, se dice que éste se instancia. En lenguajes que crean objetos a partir de clases, un objeto es una instancia de una clase. Esto es, es un miembro de una clase que tiene atributos en lugar de variables. En un contexto del mundo real, podríamos pensar en "Perro" como una clase y en un perro conreto en una instancia de esta clase.[1]

Programación basada en clases[editar]

En este apartado hablaremos de la programación orientada a objetos basada en clases, que es la que implementa la mayoría de lenguajes de programación orientados a objetos. En el modelo basado en prototipos, que es el de lenguajes como JavaScript, los términos que se refieren a clases han de sustituirse por los prototipos de los objetos, pero por lo demás, son de aplicación similar.

En este modelo, un objeto tiene una referencia a la clase a la que pertenece y, por tanto, puede llamar a los métodos de instancia que hayan sido declarados como de instancia, así como a todos aquellos que hayan sido heredados por la jerarquía de herencia estática entre clases.

Ciertos lenguajes de programación permiten utilizar clases mixin, que permiten además realizar asociaciones entre instancias de objetos para establecer relaciones similares a la herencia en tiempo de ejecución.

Clases como objetos[editar]

Multitud de lenguajes de programación basados en clases proporcionan mecanismos de reflexión o introspección, esto es, permiten que el programa pueda observar (e incluso modificar) su propia estructura de alto nivel. Si estos mecanismos siguen el paradigma de orientación a objetos también, entonces las clases serán representadas también como instancias de objetos. En particular, si el lenguaje no permite dos definiciones de una misma clase (puede hacerlo para permitir ejecuciones concurrentes de distintas versiones de una clase)[Nota 1]​ entonces las clases serán representadas utilizando un Singleton. En Java, por ejemplo, si tenemos una clase definida como:

 public class Perro {}

Podremos acceder a la instancia que representa la clase (y es una instancia de la clase java.lang.Class<Perro>), en un programa principal de clase Main, del siguiente modo:

 public class Main {
   public static void main(String... args) {
     Class<?> perroClass = Perro.class;
 
     System.out.println(perroClass);   }
 }

Programación basada en prototipos[editar]

En el estilo de programación orientada a objetos basada en prototipos las instancias son los objetos creados a partir de los prototipos. En general, los prototipos también son objetos creados a partir de otros prototipos, con lo que las propiedades y métodos se heredan en la profundidad completa del árbol de herencia de prototipado.

En el caso particular de JavaScript, aunque no se puede cambiar el prototipo de un objeto una vez instanciado, sí se pueden cambiar las propiedades y métodos que tiene el prototipo, afectando a todas las instancias (en profundidad) de ese prototipo. En el caso particular de este lenguaje, en el que todos los objetos son instancias de Object, modificar o añadir métodos a Object tendrá como consecuencia la modificación de esos métodos u objetos en todos los demás objetos que no los hayan redefinido posteriormente, incluyendo los ya instanciados. Este es el mecanismo que utilizan algunas bibliotecas de JavaScript[Nota 2]​ para proporcionar funciones que no hayan implementado ciertos motores a ciertos objetos del lenguaje.

Notas[editar]

  1. Erlang, por ejemplo, permite la ejecución concurrente de varias versiones de un mismo programa, véase [server.html#Module:code change-3 http://www.erlang.org/doc/man/gen server.html#Module:code change-3], y CLOS.
  2. http://augmentjs.com, por ejemplo, proporciona métodos al objeto Array.prototype, cambiando todos los Array del programa.

Referencias[editar]