Una clase actúa como un plano o molde para construir objetos similares, definiendo sus características comunes y funcionalidades. Es similar al plano para construir casas de un mismo barrio: todas comparten ciertos atributos clave.
Los componentes típicos de una clase son:
Atributos (propiedades): Variables que caracterizan al objeto. Por ejemplo, para una clase Persona, atributos como nombre, edad, DNI, etc.
class Persona:
dni = ""
nombre = ""
edad = 0
Métodos: Funciones que definen comportamientos. Por ejemplo, una Persona puede caminar(), hablar(), comer(), etc. Acceden a los atributos para implementar dicha funcionalidad.
Constructor: Método especial __init__() que se ejecuta al generar un objeto a partir de la clase y permite inicializar los atributos.
Destructor: Método __del__() que se ejecuta al eliminar la instancia liberando recursos. Opcional en algunos lenguajes.
A partir de la clase generamos objetos, que son instancias concretas con sus propios atributos definidos. Digamos que la clase Casa es el plano, y una casa específica en una calle determinada es el objeto.
En código creamos un objeto invocando la clase como si fuera un método:
# Clase Persona
class Persona:
def __init__(self, n, e):
self.nombre = n
self.edad = e
# Objeto Persona específico
pepe = Persona("Pepe", 30)
juan = Persona("Juan", 35)
Cada objeto comparte la estructura y comportamiento general, pero puede almacenar distintos datos.
Ya tenemos una clase Persona y un objeto pepe de tipo Persona. ¿Cómo interactuamos con el objeto?
pepe) y el nombre del atributo.pepe.nombre # "Pepe"
pepe.edad # 30
# Clase Persona
class Persona:
def __init__(self, n, e):
self.nombre = n
self.edad = e
def comer(self, comida):
print(f"Comiendo {comida}")
# Objeto Persona específico
pepe = Persona("Pepe", 30)
pepe.comer("pizza") # Imprime "Comiendo pizza"
El objeto pepe tiene ahora estado (propiedades) y comportamiento (métodos) propios.
Un detalle importante en los métodos es cómo acceden a los atributos y otros métodos del objeto. Aquí entra otra diferencia entre lenguajes:
self. Esto apunta al objeto creado.class Persona:
def __init__(self, nombre):
self.nombre = nombre
def saludar(self):
print(f"Hola! Soy {self.nombre}")
juan = Persona("Juan")
juan.saludar()
# Imprime "Hola! Soy Juan"
this en lugar de self. Cumple la misma funcionalidad de apuntar a los miembros del objeto.public class Person {
private String nombre;
public Person(String nombre) {
this.nombre= nombre;
}
public void saludar() {
System.out.println("Hola! Soy " + this.nombre);
}
}
Person juan = new Person("Juan");
juan.saludar();
// Imprime "Hola! Soy Juan"
Las clases y objetos son los conceptos clave de la POO, permitiendo modelar entidades de la realidad y generar componentes modulares y genéricos de nuestro sistema para construir programas más robustos y fáciles de entender y mantener.
¡Gracias por llegar hasta acá! Espero que este recorrido por el universo de la programación haya sido tan apasionante para vos como lo fue para mí escribirlo.
Nos encantaría escuchar lo que pensás, así que no te quedes callado/a, dejá tus comentarios, sugerencias y todas esas ideas copadas que seguro se te ocurrieron.
Y para ir más allá de estas líneas, date una vuelta por los ejemplos prácticos que preparamos para vos. Vas a encontrar todo el código y los proyectos en nuestro repositorio de GitHub learn-software-engineering/examples.
¡Gracias por ser parte de esta comunidad de aprendizaje. Seguí programando y explorando nuevos territorios en este fascinante mundo de la computación!