que-es-un-objeto

Qué son y cómo usar los Objetos

Los OBJETOS son una forma de agrupar variables y funciones relacionadas en un solo contenedor. Es decir, un OBJETO es una entidad que encapsula datos y funcionalidad.

Podéis imaginar un OBJETOS como una “versión evolucionada” de una STRUCT, que añade características adicionales. Principalmente, añade que los objetos disponen de funciones.

Por ejemplo, si consideramos una clase Coche, esta podría tener propiedades como marca, modelo y color, junto con métodos como arrancar() y detener().

Coche
  • stringmarca
  • stringmodelo
  • stringcolor
  • stringMarca
  • stringColor
  • voidarrancar()
  • voiddetener()

Estos OBJETOS se definen mediante una clase o un prototipo que actúa como una plantilla o molde para la creación de objetos. Estos define la estructura (propiedades y métodos) comunes que comparten los objetos de ese tipo.

Cada uno de los objetos creados según una clase se denomina instancia. Así, una INSTANCIA es una representación concreta de una CLASE, con sus propios datos únicos y las funcionalidades definidas por la clase.

Cuando creamos un objeto específico de la clase Coche, como un coche concreto con la marca “Toyota”, modelo “Corolla” y color “rosa”, entonces tenemos una instancia de la clase Coche.

curso-programacion-objeto-coche

Tu instancia de coche, diferente de todos los demás

Los OBJETOS nos permiten permiten organizar y estructurar los datos y la lógica de un programa, promueven la reutilización de código y facilitan el mantenimiento del mismo.

Un cada uno de estas unidades autónomos, que llamamos OBJETOS, tiene las siguientes características:

  • Estado: Representa los datos y propiedades del objeto en un momento dado
  • Comportamiento: Define las acciones y operaciones que puede realizar el objeto
  • Identidad: Cada objeto tiene una identidad única que lo diferencia de otros objetos

Pero, mucho más interesante, los objetos son abstracciones que nos permiten modelar el mundo real. Son la base de la Programación Orientada a Objetos (POO),

Ejemplo de objetos

La Programación Orientada a Objetos ha sido uno de los paradigmas que más impacto han tenido en la programación moderna. En consecuencia, muchos lenguajes han evolucionado para introducir objetos en su sintaxis.

Los detalles varías de un lenguaje a otro. Algunos tienen una aproximación más “clásica”, y otros toman caminos algo diferentes. Pero, más o menos el concepto de objeto está en todos los lenguajes.

Vamos a ver ejemplos en algunos lenguajes populares:

// Definición de una clase
class Persona
{
    // Propiedades
    public string Nombre { get; set; }
    public int Edad { get; set; }

    // Método
    public void Saludar()
    {
        Console.WriteLine("¡Hola! Mi nombre es " + Nombre + " y tengo " + Edad + " años.");
    }
}

// Creación de un objeto
Persona persona = new Persona();
persona.Nombre = "Luis";
persona.Edad = 25;
persona.Saludar();
#include <iostream>
#include <string>
using namespace std;

class Persona
{
    // Propiedades
    string nombre;
    int edad;

public:
    // Constructor
    Persona(string nombre, int edad)
    {
        this->nombre = nombre;
        this->edad = edad;
    }

    // Método
    void saludar()
    {
        cout << "¡Hola! Mi nombre es " << nombre << " y tengo " << edad << " años." << endl;
    }
};

// Creación de un objeto
Persona persona("Luis", 25);
persona.saludar();
// Definición de una clase
class Persona {
  // Constructor
  constructor(nombre, edad) {
    this.nombre = nombre;
    this.edad = edad;
  }

  // Método
  saludar() {
    console.log(`¡Hola! Mi nombre es ${this.nombre} y tengo ${this.edad} años.`);
  }
}

// Creación de un objeto
const persona = new Persona("Luis", 25);
persona.saludar();
# Definición de una clase
class Persona:
    # Constructor
    def __init__(self, nombre, edad):
        self.nombre = nombre
        self.edad = edad

    # Método
    def saludar(self):
        print(f"¡Hola! Mi nombre es {self.nombre} y tengo {self.edad} años.")

# Creación de un objeto
persona = Persona("Luis", 25)
persona.saludar()

En los ejemplos anteriores, creamos una CLASE llamada Persona que define propiedades (como nombre y edad) y un método (como saludar) comunes a todos los objetos de esa clase.

Luego, creamos un objeto persona utilizando la clase y accedemos a sus propiedades y métodos.

Funcionamiento interno Avanzado

Internamente, los OBJETOS se manejan de manera distinta a los STRUCTS debido a la naturaleza dinámica y orientada a objetos de los lenguajes que los utilizan, como Java, Python o C++ entre otros.

Por un lado, de forma similar a los STRUCT, cuando se crea un OBJETO en la mayoría de los lenguajes orientados a objetos, se reserva un bloque de memoria contigua que contiene todos sus atributos.

Esto asegura que los datos relacionados estén almacenados juntos, lo que permite el acceso eficiente a ellos. El lenguaje no tiene problemas en acceder a las variables, ya que sabe exactamente cuanto ocupan, y en qué posición están.

Pero, un OBJETO también contiene métodos. Bueno, lo más probable es que en la mayoría de lenguajes el objeto no sea almacenado con sus métodos (referencias a funciones), si no que únicamente almacena los datos, igual que un Struct.

Para los métodos, el compilador hace “muchas cosas”. Algunas de ellas es crear los métodos de los objetos como funciones que reciben como parámetros los objetos. Esto se conoce como “tabla de métodos virtuales” o “tabla de dispatch”.

Estos detalles están ocurren de forma transparente para el programador, ya que el lenguaje se encarga de manejarlo automáticamente. Pero, si os da por buscar más, es un tema bastante interesante.

Curso programación orientada a objetos

La aparición de los objetos supuso uno de los paradigmas más importantes y extendidos de la programación, la Programación Orientada a Objetos (POO). El paradigma que más impacto ha tenido en la forma en que desarrollamos software

Lógicamente, verlos en profundidad es demasiado amplio para un único artículo. Así que, si quieres aprender más, os dejo el enlace al Curso de Programación orientada a objetos.