que-es-una-clase-y-una-instancia-programacion

Qué es una clase y una instancia

Cuando trabajes con la Programación Orientada a Objetos (POO) hay tres palabras que va a usar constantemente OBJETOS, CLASE, e INSTANCIA.

No te preocupes, te vas a acostumbrar a ellas casi sin esfuerzo y usarlas constantemente. Pero, lógicamente tenemos que explicarlas (porque además de programar bien, también es importante hablar bien)

Empecemos por los OBJETOS. Como ya sabemos, son la base de la Programación Orientada a objetos. Ya hemos explicado qué son los objetos en este artículo.

Como recordatorio rápido, un OBJETO es una forma de modelar una parte de la realidad. El objeto, contiene,

  • Estado, a través de campos
  • Comportamiento, a través de métodos

Y además, para que sea un objeto “de verdad”, debe ser tratado por tu programa con ciertas consideraciones o “reglas” particulares. Algunas de estas son:

Con esto refrescado, ya explicar los conceptos de clase e instancia.

Clase

Una CLASE es la definición formal de nuestro Objeto. Podemos pensar en ella como un “molde” o plantilla para crear objetos.

En la Clase definimos las propiedades y métodos que los objetos creados a partir de la clase tendrán

curso-poo-clase

Lo vamos a ver más fácil con un ejemplo sencillo. Supongamos quieres hacer un programa que trabaja con personas (por ejemplo, para llevar el listado de alumnos de un aula, para que compren cosas, para lo que tu quieras).

La clase Persona contiene la definición de “lo que tiene” una Persona. Supongamos que en tu programa una persona es simplemente “algo” que tiene:

  • nombre, que es un texto
  • edad, que es un número entero.

Además, tu Persona puede presentarse (que simpática ella). Para lo cuál tiene un método que un mensaje en la pantalla utilizando los valores de los campos nombre y edad.

Veamos cómo se haría esto en diferentes lenguajes de programación,

public class Persona {
    // Campos o propiedades
    public string nombre;
    public int edad;
    
    // Metodo
    public void Presentarse() {
        Console.WriteLine($"Hola, mi nombre es {nombre} y tengo {edad} años.");
    }
}
class Persona {
public:
	// Campos o propiedades
    string nombre;
    int edad;

    // Metodo
    void presentarse() {
        cout << "Hola, mi nombre es " << nombre << " y tengo " << edad << " años." << endl;
    }
};
class Persona {
	// Campos o propiedades
    constructor() {
        this.nombre = "";
        this.edad = 0;
    }

    // Metodo
    presentarse() {
        console.log(`Hola, mi nombre es ${this.nombre} y tengo ${this.edad} años.`);
    }
}
class Persona:
	# Campos o propiedades
    def __init__(self):
        self.nombre = ""
        self.edad = 0

	# Metodo
    def presentarse(self):
        print(f"Hola, mi nombre es {self.nombre} y tengo {self.edad} años.")

Instancia

Una vez que tenemos definida una CLASE, ya podemos empezar a crear objetos a partir del “molde” que define.

Una instancia es cada uno de los elementos creados según una clase

Cada INSTANCIA es un elemento independiente, que tiene sus propios valores para las propiedades definidas en la clase.

Además, por supuesto, puedes tener múltiples instancias creadas a partir de una clase (de hecho lo normal es que tengas varias instancias de una clase).

Ahora vamos a verlo con unos ejemplos en los principales lenguajes de programación. En los siguientes códigos, creamos dos instancias de la clase Persona:

  • Una para Luis, con 30 años
  • Otra para Maria, con 20 años.

Además, llamamos al método Presentarse de cada instancia para que impriman un mensaje en la consola presentándose cordialmente (con sus respectivos nombres y edades).

// Crear una instancia de la clase Persona
Persona personaLuis = new Persona();
personaLuis.nombre = "Luis";
personaLuis.edad = 30;

// Llamar al método Presentarse
personaLuis.Presentarse();

// Crear otra instancia de la clase Persona
Persona personaMaria = new Persona();
personaMaria.nombre = "Maria";
personaMaria.edad = 20;

// Llamar al método Presentarse
personaMaria.Presentarse();
// Crear una instancia de la clase Persona
Persona personaLuis;
personaLuis.nombre = "Luis";
personaLuis.edad = 30;

// Llamar al método Presentarse
personaLuis.presentarse();

// Crear otra instancia de la clase Persona
Persona personaMaria;
personaMaria.nombre = "Maria";
personaMaria.edad = 20;

// Llamar al método Presentarse
personaMaria.presentarse();
// Crear una instancia de la clase Persona
const personaLuis = new Persona();
personaLuis.nombre = "Luis";
personaLuis.edad = 30;

// Llamar al método Presentarse
personaLuis.presentarse();

// Crear otra instancia de la clase Persona
const personaMaria = new Persona();
personaMaria.nombre = "Maria";
personaMaria.edad = 20;

// Llamar al método Presentarse
personaMaria.presentarse();
# Crear una instancia de la clase persona
personaLuis = Persona()
personaLuis.nombre = "Luis"
personaLuis.edad = 30

# Llamar al método presentarse
personaLuis.presentarse()

# Crear otra instancia de la clase persona
personaMaria = Persona()
personaMaria.nombre = "Maria"
personaMaria.edad = 20

# Llamar al método presentarse
personaMaria.presentarse()

Como vemos, cada una de las instancias es independiente de las demás y tienen su propios datos. En el ejemplo, cada Persona tiene su propio nombre y su propia edad.

Además, cuando llaman al método Presentarse, acceden a sus propios valores. Cada instancia está, envueltitos y independientes, con sus propios datos.

Buenas prácticas consejos

Ahora unos comentarios y pensamientos generales.

No existe una única forma correcta

En primer lugar, dejar claro que no existe una única forma de modelar una persona. Para ti puede tener nombre y edad. Pero para otro puede tener nombre, fecha nacimiento y dni.

Algunas formas te darán menos problemas que otras en algún momento. Por ejemplo, edad, seguramente no es una buena idea, porque cambia todos los años. Probablemente te de menos problemas fecha nacimiento en el futuro.

Pero, aún así, no existe una única forma correcta. Lo que metas o lo que no metas, dependerá de tus necesidades y las de tu proyecto. Y un poco de “plus de picardía” de lo que dará problemas en el algún momento.

La palabra “objeto”

Otros bonus especial para hablar de la palabra “Objeto”. En principio, el concepto OBJETO, CLASE e INSTANCIA son conceptos relacionados, pero diferentes.

Por un lado CLASE e INSTANCIA representan cosas muy diferentes, Aquí no existe ninguna duda sobre su uso. La clase es el “molde”, y la instancia “lo que creas” con ese molde.

Pero respecto a la palabra “Objeto”… ñieee. Cuando estéis en el día a día hablando con otros programadores, la vais a acabar usando como tanto para referiros a clase e instancia.

Por ejemplo, a veces dirás “hay que crear un objeto alumno”. Y en realidad aquí te estás refiriendo a crear una clase Alumno. Pero otras veces dirás “este objeto de aquí me da un problema”, y ahí seguramente te estás refiriendo una instancia.

Al final, no os obsesionéis con ello, las palabras son palabras. Lo importante es entender bien los conceptos y que cuando hables con alguien te entiendas.