que-es-un-objeto-en-programacion

Qué es un Objeto

En la Programación Orientada a Objetos (POO), un OBJETO es un elemento que representa una entidad del mundo real a través de un proceso de abstracción.

Básicamente los creadores de la POO querían resolver un problema a partir de dividirlo a través de entidades pequeñas y reutilizables. Con estas entidades se podría modelar cualquier “cosa”.

Entonces pensaron un nombre. Buscaban una palabra que fuera como “cosa”, pero que no quedara tan mal como “cosa”. Y dijeron ¡Eureka! OBJETOS… y se quedaron tan anchos.

De hecho miremos la definición de objeto en el diccionario:

Objeto: todo lo que puede ser materia de conocimiento o sensibilidad de parte del sujeto, incluso este mismo 😴

Perdón, me he dormido con la definición. En resumen, que cuando decimos OBJETO, básicamente significa “cualquier cosa”.

  • Un jarrón
  • Un perro y una vaca
  • Una persona, un alumno y un profesor
  • Un zapato, el pedido de compra del zapato y la dirección de envío del pedido

curso-poo-objetos

Todo es un objeto

Cualquier cosa que podáis imaginar, material o abstracto, grande o pequeño, verde o morado, puede ser modelado como un OBJETO.

Objetos en programación

En programación un OBJETO es un fragmento de código que modela un elemento del mundo real. En general, es una agrupación de variables y funciones, bajo un nombre común.

Los OBJETO tienen propiedades (atributos) y comportamientos (métodos). Y tienen una pinta como la siguiente,

Persona {
	// propiedades / datos
	string Nombre;
	string Apellidos;
	DateTime FechaNacimiento;

	// métodos / comportamiento
	string DameNombreCompleto();
	string CalcularCumpleaños();
}
  • Las propiedades de un objeto representan su estado interno y se definen mediante variables llamadas atributos. Estos atributos pueden ser de diferentes tipos de datos, como enteros, cadenas de texto, booleanos, u otros objetos.

  • Los comportamientos de un objeto son acciones que puede realizar y se definen mediante métodos. Estos métodos pueden modificar el estado del objeto, realizar cálculos, interactuar con otros objetos, o realizar cualquier otra tarea específica.

Además, con composición y referencias podemos crear relaciones que les permiten interactuar entre ellos.

Cómo usar los objetos

Ahora que sabemos lo que es un OBJETO, vamos a ver brevemente cómo trabajar con ellos.

  • Creación de una clase: Primero, defines un “template” o estructura para crear objetos. Esto se llama una clase. La clase define las atributos y los métodos que tendrán los objetos que se creen a partir de ella.
  • Creación de una instancia: Luego, puedes crear uno o más objetos basados en esa clase. A esto se le llama instanciación. Cada objeto creado a partir de la clase se denomina instancia de esa clase.
  • Utilización de la instancia: Una vez que tienes una instancia de la clase, puedes acceder a sus atributos y llamar a sus métodos para realizar diversas acciones o manipular su estado interno según sea necesario.
  • Destrucción (Opcional): Finalmente, en algunos lenguajes de programación, no es necesario gestionar explícitamente la destrucción de objetos, ya que el lenguaje se encarga automáticamente de liberar la memoria ocupada por los objetos cuando ya no son necesarios.

Iremos viendo estos puntos más en profundidad. No os asustéis si no entendéis algo. Recordad que es una primera entrada explicando qué es un Objeto

Ejemplo de un Objeto en diferentes lenguajes

Vamos a ver cómo sería la sintaxis para trabajar con un objeto en distintos lenguajes de programación. Creemos un objeto Coche que representa (adivina) un coche 🚗.

Este coche tiene que tener:

  • Atributos: Marca, modelo, año de matriculación, color…
  • Métodos: Arrancar (para el ejemplo, solo este)

Así se realizaría la definición del Objeto, es decir su clase, en distintos lenguajes de programación,

class Coche
{
    public string Marca;
    public string Modelo;
    public int Año;
    public string Color;

    public void Arrancar()
    {
        Console.WriteLine("El automóvil está arrancando");
    }
}
class Coche
{
public:
    std::string Marca;
    std::string Modelo;
    int Año;
    std::string Color;

    void Arrancar()
    {
        std::cout << "El automóvil está arrancando" << std::endl;
    }
};
class Coche {
    constructor() {
        this.Marca = "";
        this.Modelo = "";
        this.Año = 0;
        this.Color = "";
    }

    Arrancar() {
        console.log("El automóvil está arrancando");
    }
}
class Coche:
    def __init__(self):
        self.Marca = ""
        self.Modelo = ""
        self.Año = 0
        self.Color = ""

    def Arrancar(self):
        print("El automóvil está arrancando")

Como vemos, es muy similar en casi todos los lenguajes de programación. Aparte de las pequeñas diferencias de siempre en cuanto a sintaxis, el concepto es el mismo. Es simplemente una agrupación de datos y funciones, bajo un nombre.

¿De donde viene la necesidad?

La necesidad que cubren los OBJETOS es la ABSTRACCIÓN. Agrupar datos y comportamiento en entidades, que son una representación de algo del mundo real.

pilares-oop

Los cuatro pilares del OOP

Lo que se quería evitar con la creación del concepto de OBJETOS es lo siguiente. Imagina que tienes una tienda online, en la que puedes tramitar pedidos. Para ello, tienes una función que se llama TramitarPedido().

Esta función tramita el pedido y devuelve lo que le da la gana la información oportuna después de realizar su proceso. Por ejemplo, a información que devuelve podría ser esta.

TramitarPedido() => (fecha, nombre, dni, cantidad, id, precio)

El problema de esta forma de trabajar es que los datos están todo mezclados. Hay datos que corresponden con el comprador, del producto… Si cada función trabaja así la posibilidad de que se lie parda es enorme.

Entonces dijeron “necesitamos ordenar esto”. Mucho mejor si lo organizamos en conceptos cada uno con su información. Por ejemplo en Persona, Producto y Pedido.

class Persona { Nombre, Dni }

class Producto { Id, Precio }

class Pedido { Fecha, Cantidad, Persona, Producto }

TramitarPedido() => (Pedido)

Lo importante no es solo que las variables están mucho mejor ordenadas. Es que además cada una de ellas modela un concepto de la realidad.

Más o menos esto ya se estaba haciendo, a través de estructuras y agrupaciones de variables. Depende de lo limpio que fueras, lo estarías haciendo mejor o no. Pero ya se hacía.

Lo que aporta la programación orientada a objetos:

  • Normalizar y regular la forma de hacerlo
  • Priorizarlo frente a otras formas de programación
  • Los objetos, además de información, tienen métodos

Es decir, en el caso del Pedido, la función TramitarPedido() podría estar dentro.

class Pedido { Fecha, Cantidad, Persona, Producto, TramitarPedido() }

¿Fue una buena idea, tener funciones dentro de nuestros conceptos? Como vimos en la introducción al curso, es algo que ya también se estaba haciendo. La Programación Orientada a Objetos solo regularizó y normalizó el procedimiento.

Para eso introdujo el siguiente pilar, la ENCAPSLACIÓN, justo en el siguiente artículo.