Clases, instancias, prototipos y herencia en POO

La idea de crear tipos de objetos es usar un molde o template. Existen dos técnicas distintas sobre qué usar como molde. Estas técnicas son: la programación basada en clases y la programación basada en prototipos.

Programación basada en clases

La programación basada en clases es la más ampliamente usada por los lenguajes de programación orientada a objetos POO. Ej: Lenguajes Java, C++, C#.

El concepto es simple, existe un molde llamado clase donde se especifican los campos y métodos que tendrán nuestros objetos. Cada vez que necesitamos un objeto creamos una instancia (o copia del objeto) usando la clase como molde.

Una vez creada la instancia podemos modificar los valores de sus campos dándole una personalidad única. Por ejemplo si la clase es Perro y tiene un campo nombre podemos crear un perro llamado Sultán y otro Pufy.

Ejemplo de clase Perro en Java

  public class Perro {
	private String nombre; // declaró un campo o variable de instancia inaccesible desde fuera del objeto

	public void setNombre(String nombre) { // método que permite modificar el campo nombre desde fuera del objeto
		this.nombre = nombre;
	}
}

Ejemplo de como usar la clase Perro en para crear nuevas instancias de objetos

    Perro perro1;     // declaro una variable de tipo Perro llamada perro1
    Perro perro2; 

    perro1 = new Perro();       // creó un perro usando new sobre la clase Perro
    perro1.setNombre("Sultán"); // modifico el nombre de la instancia usando el método setNombre
    
    perro2 = new Perro();
    perro2.setNombre("Pufy");

Herencia

Supongamos que queremos que queremos trabajar con los objetos perro y gato. Los dos son animales y tienen caracteristicas en comun. Puede darse el caso que cuando empecemos a crear los campos y métodos para cada uno haya repeticiones.

La idea de Herencia es crear una clase llamada Animal donde poner los campos y métodos en común y cuando creamos las clases Perro y Gato indicar que heredan las características de la clase Animal.

    public class Animal {
        protected String nombre;
    
        public void setNombre(String nombre) {
            this.nombre = nombre;
        }
    }
    
    public class Gato extends Animal{ // La clase Gato extiende o hereda de la clase animal
     ... Campos y métodos específicos de los gatos ...
    }
    
    public class Perro extends Animal{ 
     ... Campos y métodos específicoss de los perros ...
    }

Programación basada en prototipos

Este estilo de programación orientada a objetos también es conocido como: programación basado en instancias o classless (sin clases). El mecanismo para la reutilización está dado por la clonación de objetos en vez del uso de clases.

Veamos como sería el ejemplo de los perros y gatos. Aquí crearemos un objeto Animal, lo clonariamos y agregaremos los capos y métodos para crear un objeto Perro genérico. Cada vez que necesitamos un nuevo perro clonamos el objeto Perro genérico y le cambiamos el campo nombre.

Aunque son pocos los lenguajes orientados a objetos que utilizan la programación basada en prototipos entre ellos se encuentra javascript que es quizás el lenguaje más importante de internet. Otros lenguajes importantes que la soportan son Python y Ruby.