Qué y cuándo es mejor usar para escribir un buen código.

Continuamos hablando de programación orientada a objetos: por qué es necesaria y cuál es su poder. Esto es más bien teoría, que práctica diaria necesaria, pero tales cosas ponen en orden la imagen del mundo.

👉 Si escribes programas simples para ti mismo, es posible que todo esto no te sea útil. Pero si quieres convertirte en un profesional, bienvenido.

Recordamos Conceptos Básicos

  • Hay un programa. En la programación imperativa, un programa es una secuencia de tareas que le damos a la computadora. Haz uno, luego otro, luego un tercero. También existe la programación funcional, pero es un poco diferente.
  • Las tareas en sí son simples, pero a partir de tareas simples puedes hacer otras más complejas. Si puedes nombrar de alguna manera una tarea tan compleja, puedes decir que es una función, un miniprograma dentro de un programa.
  • Puedes empaquetar en una función cualquier secuencia de acciones que necesites a menudo en el programa: por ejemplo, guardar un archivo de forma especial, mostrar algo en una pantalla especial o enviar un correo electrónico a una dirección especial.
  • Puedes llamar a otras dentro de algunas funciones. Por ejemplo, en el administrador de tareas puede haber una función «Cerrar tarea«, dentro de la cual primero se guarda el archivo, luego se envía un correo electrónico, luego todo se muestra en una pantalla especial.
  • Problema: cuando se llaman muchas funciones entre sí, se entrelazan y crean muchas dependencias. Si cambias el trabajo de una de las funciones, pueden desmoronarse otras.
  • Solución: estandarizar los enfoques para el trabajo de las funciones. En particular, para esto se les ocurrió la programación orientada a objetos.
  • En la programación orientada a objetos, lo principal no es la función, sino el objeto. Un objeto puede representarse como una caja con datos y funciones.

Qué es una Clase

Puedes crear un objeto manualmente a partir de cualquier función y datos que necesites. Pero si para que el programa funcione necesitas docenas de objetos similares entre sí, tiene sentido estandarizarlos de alguna manera.

En términos simples, una clase es un «esquema» según el cual puedes crear objetos. Registras una clase, defines su comportamiento y propiedades, y luego das la orden de crear la cantidad necesaria de objetos basados ​​en esta clase.

Por ejemplo:

  • Puedes tener una clase para un usuario de una tienda en línea. La clase te dirá que el usuario tiene nombre, dirección, correo y contraseña, y también puede realizar compras mediante tales y tales funciones. En base a esta clase, registrarás muchos usuarios.
  • Puede haber una clase para un botón en la interfaz. Sabes que se puede hacer clic en el botón y se puede desactivar en determinadas condiciones. Describes este comportamiento en la clase, luego creas muchos botones en la interfaz.

Ejemplo: Objetos, Clases y Funciones en un Juego

Digamos que estás escribiendo un juego de computadora. Tienes un héroe controlado por el jugador y muchos enemigos controlados por la computadora. Tanto el héroe como los enemigos pueden disparar y curarse.

Si escribieras todo sobre funciones, tendrías estas funciones:

Heroe_disparar();
Heroe_curarse();
Enemigo1_disparar(); ... Enemigo99_disparar();
Enemigo1_curarse(); ... Enemigo99_curarse();
Ilustración de ejemplo de Clases y funciones
Ilustración de ejemplo de Clases y funciones

Este es un conjunto bastante grande de funciones, no debes hacerlo. Es mucho mejor crear objetos y colocar dentro de ellos las funciones necesarias:

Heroe.disparar();
Heroe.curarse();
Enemigo1.disparar(); ... Enemigo99.curarse();
Cada personaje del juego es un objeto
Imaginemos que cada personaje del juego es un objeto. Dentro del objeto, hay algo

Para no registrar todas estas funciones y objetos manualmente, crearemos la clase «Personaje»:

Clase "Personaje"{
    nombre: aquí estará el nombre;
    tipo: héroe o enemigo;
    salud: 100;
    función "Disparar" {describimos cómo disparar};
    función "Curarse" {describimos cómo curarse};
}

Ahora podemos crear tantos personajes como queramos, por ejemplo, así:

Nuevo Personaje (nombre: Héroe);
Nuevo Personaje (nombre: Enemigo1, salud: 10);
Nuevo Personaje (nombre: Enemigo2, salud: 20);
Ejemplo de clase y objeto
Ejemplo de clase y objeto

Digamos que decidimos agregar un sistema de inventario a nuestro juego. Para no recorrer todos nuestros enemigos y héroes y copiar y pegar el código en ellos, registraremos este sistema dentro de la clase:

Clase "Personaje"{
    nombre: aquí estará el nombre;
    tipo: héroe o enemigo;
    salud: 100;
    función "Disparar" {describimos cómo disparar};
    función "Curarse" {describimos cómo curarse};
    
    inventario: [botas-veloces, espada-tesoro];
    función "Resetear_inventario" {cómo resetear};
    función "Recoger_objeto" {cómo recoger};
}

Ahora todos los personajes tienen un inventario. de forma predeterminada, todos tienen botas y espada, pero al crear un personaje, esto se puede redefinir. Además, todos los personajes tienen la posibilidad de deshacerse de todo el inventario o recoger un objeto del suelo.

Ten en cuenta que agregamos todo esto en un solo lugar, y todo apareció para todos a la vez. En esto radica el poder de la clase.

El poder de las clases en POO
El poder de las clases en POO

Dónde Aplicar Clases y POO, y dónde Funciones

Si estás creando un programa simple, que se puede hacer con tres funciones, hazlo. O incluso si el programa se vuelve más complejo, habrá muchas funciones en él, pero todas están lógicamente conectadas y está claro por qué se hizo así, también está bien. No hay nada de malo en que no uses la programación orientada a objetos donde puedas prescindir de ella.

Pero si tienes un proyecto con muchas abstracciones, interconexiones internas y de antemano no puedes predecir cuándo y con qué interactuará algo, es mejor utilizar clases y todas las ventajas de las POO. Es posible que el código se vuelva más complejo, pero no siempre es así. Por otro lado, podrás implementar una lógica tal que en las funciones sería difícil de hacer.

Serie de Guías Relacionadas a POO:

  1. Explicación Programación Orientada a Objetos
  2. ¿Qué son las Clases en Programación Orientada a Objetos?
  3. ¿Qué son los Objetos en Programación Orientada a Objetos?
  4. Clases y Funciones en Programación Orientada a Objetos
  5. Atributos y Métodos en Programación Orientada a Objetos
  6. Abstracciones e Interfaces: ¿Por qué son Necesarias?
  7. ¿Qué son los Getters y Setters en Programación?

Categorizado en:

Fundamentos,