Clases y Objetos en POO: ¿Qué son las clases y objetos en la POO?

Inicioprogramacion orientada a objetosClases y Objetos en POO
Clases y Objetos en POO: ¿Qué son las clases y objetos en la POO?
Clases y Objetos en POO: ¿Qué son las clases y objetos en la POO?

by Juan Carlos García

19-Jun-2025

(1)

Suscribirme al canal:

¿Alguna vez te has preguntado cómo los videojuegos pueden tener cientos de enemigos idénticos o cómo una aplicación como Uber maneja miles de autos en un mapa? No copian y pegan el código mil veces.

Usan uno de los secretos más poderosos de la programación orientada a objetos: las Clases y los Objetos.

 

 

Diseño de páginas web EWebik

🧐 Autoevaluación: Clases y Objetos en POO

¿Qué es una CLASE en programación orientada a objetos?

¿Qué es un OBJETO en programación orientada a objetos?

¿Qué es un CONSTRUCTOR en programación orientada a objetos?

¡No te puedes perder las nuevas clases 🧐!

Hoy te voy a enseñar a pensar como un ingeniero de software, usando plantillas de código para construir lo que sea, desde un simple programa hasta un universo entero. ¡Vamos a darle!

  • Todo lo haré en esta aplicación de consola y el código estará disponible en EWebik.com.

Clases en Programación Orientada a Objetos

Imagina que trabajas para una famosa marca de automóviles. No empiezas a construir un coche soldando piezas al azar, ¿verdad? Primero, necesitas un plano, un diseño maestro. Ese plano define todo sobre el coche: qué motor tendrá, de qué color puede ser, cuántas puertas tiene y qué acciones puede realizar, como arrancar, acelerar o frenar.

  • En programación, ese plano, esa plantilla, se llama CLASE.
  • Una clase no es el coche en sí, es la idea del coche, es la definición de sus características y sus funciones.
  • Veamos cómo se ve este plano en C#.

Ejemplo 1: ¿Cómo crear una clase Carro en C#?

Crearemos una clase llamada Carro y presta atención a cómo traducimos las ideas a código:

  1. Primero creamos nuestra clase Carro.cs
  2. Ahora, creamos nuestro namespace para organizar nuestro código: namespace console_poo_ewebik;
  3. Ahora escribimos nuestra plantilla, la cual, será nuestro plano del carro: Public Class Carro y es pública, porque queremos que otras partes del programa puedan crear carros a partir de ella.
  4. Primero definimos las propiedades de nuestra clase, las cuales, son las variables que definen el estado de un carro.
  5. Una propiedad String, para acceder al modelo del carro.
  6. Otra propiedad String, para acceder al color del carro.
  7. Una propiedad entera para acceder al año del carro.
  8. Y la propiedad velocidad, la cual es privada, porque sólo el carro debe controlar su velocidad.
  9. Ahora definimos los métodos de nuestra clase, los cuales son las acciones que nuestro carro puede realizar, por ejemplo, arrancar el motor, acelerar y frenar.
  10. Primero creamos el método para arrancar el motor del carro, lo definimos como publico void por que no regresa nada y lo nombramos ArrancarMotor.
  11. Dentro de arrancar motor mediante un if validamos si la velocidad es igual a cero, ya que si la velocidad es igual a cero el carro está detenido y entonces podemos regresar el mensaje "El carro con modelo tal a arrancando el motor", por lo contrario, si la velocidad es mayor acero, el carro ya está en movimiento, así que no hacemos nada, simplemente mandamos el mensaje el carro con modelo tal ya está en movimiento.
  12. Ahora pasemos con el método acelerar el carro, declaramos public void Acelarar, el cual, recibe un parámetro de tipo entero que indica cuánto se debe incrementar la velocidad actual del carro, por ejemplo, si el incremento es de 20, la velocidad actual se aumentará en 20 km/h.
  13. Finalmente, pasemos a crear el método para frenar el carro. Este método es público, no regresa nada y lo llamamos simplemente frenar dentro de frenar, establecemos. La velocidad actual en cero y  mandamos a Consola, el carro con modelo tal se ha detenido por completo.

 

// Carro.cs
// Creamos nuestro namespace para organizar nuestro código.
namespace console_poo_ewebik;

// Esta es nuestra PLANTILLA o nuestro PLANO.
public class Carro
{
    // --- Primero Definimos las CARACTERÍSTICAS (Campos y Propiedades) ---
    // Las cuales son las variables que definen el estado de un carro.

    public string Modelo;
    public string Color;
    public int Anio;
    private int velocidadActual = 0;

    // Método para arrancar el motor del carro.
    public void ArrancarMotor()
    {
        if (velocidadActual == 0)
        {
            Console.WriteLine($"El carro con modelo {Modelo} a arrancado el motor.");
        }

        else
        {
            Console.WriteLine($"El Carro con modelo {Modelo} ya está en movimiento.");
        }
    }

    // Método para acelerar el carro.
    public void Acelerar(int incremento)
    {
        velocidadActual += incremento;
        Console.WriteLine($"Acelerando. Velocidad actual: {velocidadActual} km/h.");
    }

    // Método para frenar el carro.
    public void Frenar()
    {
        velocidadActual = 0;
        Console.WriteLine($"El carro con {Modelo} se ha detenido por completo.");
    }
}

¿Ves? Acabamos de crear un manual de instrucciones perfecto, definimos que CUALQUIER carro que construyamos a partir de ahora tendrá un modelo, un color y podrá arrancar y acelerar, pero, y esto es clave, todavía no tenemos ningún coche real, sólo tenemos el plano para construir nuestro carro.

Diseño de páginas web EWebik

El Objeto  en Programación Orientada a Objetos - Construyendo el Auto Real

Ahora viene la magia, con nuestro plano (la clase Carro), podemos construir tantos coches como queramos, cada coche que construimos es una instancia de esa clase, y en programación, a eso lo llamamos un OBJETO.

Piensa en un objeto como el coche físico que sale de la línea de ensamblaje, puedes tener un Ferrari rojo y un Tesla azul, ambos construidos desde el mismo concepto de 'carro', pero son entidades separadas e independientes. 

En C#, para crear un objeto, usamos la palabra clave new. Es como decirle al programa: ¡Hey! Usa el plano Carro para construirme uno nuevo ahora mismo.

  • Primero abrimos nuestro Program.cs, el cual, es el main de nuestro programa, es decir, va a ser la fábrica donde vamos a construir nuestros carros.
  • Primero importamos nuestro namespace a través de using console_poo_ewebik; para acceder a nuestra clase carro.
  • Primero creamos un objeto que hará referencia a un carro deportivo rojo y lo hacemos primero definiendo el tipo, el cual, es carro, nombramos nuestro objeto y le ponemos mi deportivo, y creamos la instancia a través de new Carro().
  • Ahora simplemente afinamos los detalles, establecemos las propiedades de nuestro carro a través de:
    • miDeportivo.Modelo igual a Ferrari F8
    • Después miDeportivo.Color igual Rojo
    • y miDeportivo.Anio igual a 2025.
  • Y listo, ya tenemos nuestro primer objeto, carro, construido a partir de nuestro plano o clase llamada carro a esto le llamamos instanciación.
  • Y aquí es donde vemos la potencia que tiene la programación orientada a objetos, porque con ese mismo plano podemos construir los carros que queramos y le podemos asociar las propiedades que nosotros necesitemos.
  • Por ejemplo, vamos a crear un segundo objeto donde vamos a tener un carro eléctrico, hacemos lo mismo establecemos el tipo que es Carro nombramos el objeto como miElectrico igual a New Carro. Ahora establecemos las propiedades:
    • miElectrico.Modelo igual a Tesla Model 3
    • miElectrico.Color igual a Azul
    • y miElectrico.Anio igual a 2024
  • Y así podríamos seguir creando carros hasta el infinito, dependiendo del tipo y propiedades que nosotros necesitemos en nuestros programas.
  • Pero qué más podemos hacer con nuestros objetos, pues podemos invocar los diferentes métodos que tienen nuestro plano o clase Carro, por ejemplo:
    • Invocamos a través de miDeportivo.ArrancarMotor,  qué imprime el carro con modelo Ferrari F8 ha arrancado el motor.
    • Invocamos también acelerar le pasamos el valor de 100 que imprime acelerando. Velocidad actual 100 km/h.
    • Ahora, invocamos frenar que imprime el carro con modelo Ferrari F8, se ha detenido por completo.
  • Lo mismo hacemos para nuestro segundo objeto:
    • El método arrancar motor que imprime el carro con modelo Tesla Model tres ha arrancado el motor.
    • El método acelerar le pasamos 80, como parámetro que imprime acelerando velocidad actual, 80 km/h.
    • Por último, el método frenar que imprime el carro con modelo Tesla Model tres, se ha detenido por completo.
  • Si ejecutamos nuestro proyecto en la terminal mediante el comando "dotnet run --project console-poo-ewebik" veremos todos los mensajes en consola, así que nuestro código esta funcionado correctamente.
//Program.cs
using console_poo_ewebik;

// OBJETO 1: Creamos un deportivo rojo.
Carro miDeportivo = new Carro();
miDeportivo.Modelo = "Ferrari F8";
miDeportivo.Color = "Rojo";
miDeportivo.Anio = 2025;

// OBJETO 2: Creamos un sedán eléctrico azul.
Carro miElectrico = new Carro();
miElectrico.Modelo = "Tesla Model 3";
miElectrico.Color = "Azul";
miElectrico.Anio = 2024;

miDeportivo.ArrancarMotor();
//Que imprime: El carro con modelo Ferrari F8 a arrancado el motor.
miDeportivo.Acelerar(100);
//Que imprime: Acelerando. Velocidad actual: 100 km/h.
miDeportivo.Frenar();
//Que imprime: El carro con modelo Ferrari F8 se ha detenido por completo.

miElectrico.ArrancarMotor();
//Que imprime: El carro con modelo Tesla Model 3 a arrancado el motor.
miElectrico.Acelerar(80);
//Que imprime: Acelerando. Velocidad actual: 80 km/h.
miElectrico.Frenar();
//Que imprime: El carro con modelo Tesla Model 3 se ha detenido por completo.

¡Fantástico! Fíjate cómo miDeportivo y miElectrico son dos objetos completamente distintos. Acelerar uno no afecta la velocidad del otro. ¡Esto es organización! ¡Esto es poder!"

Diseño de páginas web EWebik

Constructor y Composición en POO: Instalando un sistema de navegación GPS a nuestro carro.

¿Pero qué pasa cuando las cosas se complican? Un coche moderno es más que un motor y ruedas, tiene un sistema de navegación y un montón de otros 'objetos' complejos dentro de él.

Aquí es donde las clases y la programación orientada a objetos realmente brillan. Podemos utilizar la composición en programación orientada a objetos, es decir,  crear una clase para cada componente.

Así crearemos objetos complejos a partir de objetos más simples, por ejemplo, hagamos una clase para un Sistema de Navegación GPS con varios constructores y se lo instalamos a nuestro carro.

¿Qué es un constructor en programación orientada a objetos?

Un constructor es un método especial dentro de una clase que se ejecuta automáticamente al crear un nuevo objeto con la palabra new.

Su trabajo es inicializar el objeto, es decir, darle sus valores iniciales, hasta ahora, C# nos ha dado uno por defecto, invisible para nosotros.

Pero podemos crear el nuestro para obligar a que un sistema de navegación GPS se cree con una cartografía en particular o establecer una diferente.

  1. Primero  creamos un nuevo archivo y lo nombramos. SistemaNavegaciónGPS.cs.
  2. En este archivo, lo primero que hacemos es que creamos nuestro Name Space para organizar nuestro código que va a ser el mismo que hemos manejado.
  3. Creamos nuestra  nueva plantilla para cualquier sistema de navegación, mediante public Class y establecemos el nombre SistemaNavegaciónGPS.
  4. Establecemos una propiedad Rad Only, que es de sólo lectura de tipo string y la llamamos cartografía y la inicializamos con Google Maps. Por lo tanto, aquí definimos qué cartografía utilizará nuestro sistema de navegación.
  5. Ahora viene este nuevo concepto de constructor, por defecto, C# establece un constructor y podemos o no agregarlo explícitamente a nuestra clase, como lo hicimos anteriormente, donde, en nuestro código no teníamos ningún constructor en nuestras clase Carro, pero, en este caso si lo vamos a agregar explícitamente, simplemente lo que vamos a hacer es que declaramos un método público y se va a llamar igual que nuestra clase, sistema de navegación GPS, pero, no recibe ningún parámetro, esto quiere decir que cuando instanciamos un objeto nuestro sistema de navegación, por defecto va a tener la cartografía igual a Google Maps.
  6. Nosotros podemos tener más de un constructor en una misma clase, nosotros podemos agregar un nuevo constructor que permita establecer la cartografía del sistema de navegación GPS, pero, no pasa nada si no utilizamos este nuevo constructor para crear nuestros objetos, simplemente tomará la cartografía de Google Maps por defecto. Así que simplemente declaramos otro método público lo llamamos igual que nuestra clase sistema de navegación GPS, pero aquí sí, recibimos un parámetro de tipo String con la cartografía.
  7. Y como es un ejemplo básico, esta clase solamente va a contar con un método, el cual, sirve para calcular una ruta, es un método public que no regresa nada y lo vamos a llamar CalcularRuta, el cual, recibe un string con el destino de nuestra ruta.
  8. Y simplemente vamos a mandar a Consola el mensaje, calculando la mejor ruta hacia destino, mediante la cartografía que esta asignada en la clase.
  9. Y listo, ya tenemos nuestra clase sistema de navegación GPS, que además posee dos constructores.
//SistemaNavegacionGPS.cs
// Creamos nuestro namespace para organizar nuestro código.
namespace console_poo_ewebik;

// La plantilla para cualquier sistema de navegación.
public class SistemaNavegacionGPS
{
    private readonly string Cartografia = "Google Maps";

    /// <summary>
    /// Constructor por defecto para el sistema de navegación GPS.
    /// </summary>
    public SistemaNavegacionGPS() { }

    /// <summary>
    /// Constructor que permite establecer la cartografía del sistema de navegación GPS.
    /// Si no se proporciona, se utilizará "Google Maps" por defecto.
    /// </summary>
    /// <param name="cartografia"></param>
    public SistemaNavegacionGPS(string cartografia)
    {
        Cartografia = cartografia;
    }

    public void CalcularRuta(string Destino)
    {
        Console.WriteLine($"Calculando la mejor ruta hacia {Destino} mediante la cartografía {Cartografia}.");
    }

}

Y ahora, lo más interesante, podemos decirle a nuestro clase Carro que tiene un objeto de SistemaNavegacionGPS a esto se llama composición.

  • Primero en nuestra clase carro, agregamos una nueva propiedad que es de tipo sistema navegación GPS y le llamamos simplemente GPS y la instanciamos a través de new SistemaNavegacionGPS(), así, todos los objetos creados de la clase carro, por defecto, tendrán la cartografía Google Maps.
  • Y listo con tan sólo este cambio nuestra clase Carro, ahora tiene la capacidad de calcular rutas, gracias a la composición con la clase sistema de navegación GPS.
  • Claro que hay formas más elegantes y mejores para hacer composición en programación orientado objetos, pero, como este es un ejemplo básico con esto nos basta.
  • Ahora nos regresamos a Program.cs, que es nuestra fábrica para construir nuestros objetos de carro.
  • Y aquí simplemente para el objeto miDeportivo, le dejamos el valor por defecto del SistemaNavegacionGPS.
  • Pero para el objeto miElectrico, si se lo vamos a cambiar, mediante miElectrico.GPS es igual a  new SistemaNavegacionGPS y establecemos como cartografía Waze.
  • Y ahora debemos invocar el método, calcular ruta en cada uno de nuestros objetos, y pasarle el destino, que en este caso, simplemente le paso la frase la cima del éxito en programación.
  • Se ejecutamos nuestro programa, veremos todos los mensajes en Consola y este nuevo que es calculando la mejor ruta hacia la cima del éxito en programación mediante la cartografía Goolge Maps y Waze, respectivamente.
  • Con esto, comprobamos que nuestro código está funcionando correctamente.
// Carro.cs
// Creamos nuestro namespace para organizar nuestro código.
namespace console_poo_ewebik;

// Esta es nuestra PLANTILLA o nuestro PLANO.

public class Carro
{
// ... (Propiedades anteriores: Modelo, Color, etc.)

// Un carro AHORA TIENE un sistema de navegación.
public SistemaNavegacionGPS GPS { get; set; }

// ... (Métodos anteriores: ArrancarMotor, etc.)

}

//Program.cs
// --- En la fábrica (main) ---

// OBJETO 1: Creamos un deportivo rojo.
Carro miDeportivo = new Carro();
miDeportivo.Modelo = "Ferrari F8";
miDeportivo.Color = "Rojo";
miDeportivo.Anio = 2025;


// OBJETO 2: Creamos un sedán eléctrico azul.
Carro miElectrico = new Carro();
miElectrico.Modelo = "Tesla Model 3";
miElectrico.Color = "Azul";
miElectrico.Anio = 2024;
// Instalamos el GPS directamente y cambiamos la cartografía
miElectrico.GPS = new SistemaNavegacionGPS("Waze");

miDeportivo.GPS.CalcularRuta("La cima del éxito en programación");
miDeportivo.ArrancarMotor();
//Que imprime: El carro con modelo Ferrari F8 a arrancado el motor.
miDeportivo.Acelerar(100);
//Que imprime: Acelerando. Velocidad actual: 100 km/h.
miDeportivo.Frenar();
//Que imprime: El carro con modelo Ferrari F8 se ha detenido por completo.

miElectrico.GPS.CalcularRuta("La cima del éxito en programación");
miElectrico.ArrancarMotor();
//Que imprime: El carro con modelo Tesla Model 3 a arrancado el motor.
miElectrico.Acelerar(80);
//Que imprime: Acelerando. Velocidad actual: 80 km/h.
miElectrico.Frenar();
//Que imprime: El carro con modelo Tesla Model 3 se ha detenido por completo.

¡Y Boom! Nuestro objeto Carro ahora contiene otro objeto GPS, así es como se construyen aplicaciones complejas: creando pequeñas plantillas o clases expertas en una sola cosa y luego combinándolas.

¡Reforzando Conceptos de Clases y Objetos en la Programación Orientada a Objetos!

Ok, para finalizar, vamos a solidificar estas ideas con tres preguntas que siempre surgen.

¿Qué es una CLASE en programación orientada a objetos?

Una clase es una plantilla o un plano, un bloque de código que define un nuevo tipo de dato, agrupando propiedades y métodos relacionadas y no ocupa memoria por sí misma, solo sirve como un molde.

¿Y qué es un OBJETO en programación orientada a objetos?

Un objeto es la instancia de una clase, es el producto final creado a partir de la plantilla. Si la clase Carro es el plano, miDeportivo y miElectrico son los objetos, los coches reales que ocupan un lugar en memoria y con los que puedes interactuar.

¿Qué es un CONSTRUCTOR en programación orientada a objetos?

Un constructor es un método especial dentro de una clase que se ejecuta automáticamente al crear un nuevo objeto con la palabra new. Su trabajo es inicializar el objeto, es decir, darle sus valores iniciales.

Excelente, eso ha sido todo, espero que te haya gustado esta clase  y que hayas aprendido ¿Qué son las clases, objetos, constructores y la composición en la programación orientada a objetos? 

Y ya sabes que si deseas aprender más respecto a la programación orientada a objetos suscríbete y activa la campanita para que te enteres cuando suba nuevo contenido.

Y recuerda sigue viajando por la web.

Diseño de páginas web EWebik

🧐 Autoevaluación: Clases y Objetos en POO

¿Qué es una CLASE en programación orientada a objetos?

¿Qué es un OBJETO en programación orientada a objetos?

¿Qué es un CONSTRUCTOR en programación orientada a objetos?

Juan Carlos

Juan Carlos García

Desarrollador de software / SEO / Ing. eléctrico - electrónico UNAM

Durante años he desarrollado plataformas dedicadas al rastreo satelital y varios sitios web que se encuentran en la primera página de Google, y hoy quiero compartir contigo lo que se en tecnologías como: Node JS, PHP, C# y Bases de datos.

Si quieres apoyarme sígueme en mis redes sociales y suscríbete a mi canal de YouTube.

© 2025 EWebik