¿Y qué son en general?

Como en el viejo chiste: sobre la programación orientada a objetos se puede hablar de forma simple e incorrecta o compleja e incorrecta. Intentaremos hablar sobre otro aspecto de la POO de manera simple.

💪
¿Por qué es esto?: la POO es uno de los conceptos principales del desarrollo moderno. No es aplicable a ningún lenguaje en concreto, es más bien una forma de pensar en la programación. Si comprendes la POO, tu código en cualquier lenguaje será más limpio, legible y eficiente.

En este artículo, analizaremos dos conceptos complejos de la programación orientada a objetos: las abstracciones y las interfaces. Este es otro paso en la comprensión de lo incomprensible.

Ideas principales de la POO

  • La programación orientada a objetos se basa en objetos. Puedes imaginar que un objeto es una caja que contiene datos y funciones.
  • La división en objetos es necesaria para poder crear, mantener y modificar partes del programa, sin afectar a otras partes y al programa en general. De forma inteligente esto se denomina «para aumentar el nivel de abstracción».
  • El sentido del objeto es que sabe hacer sus propios asuntos, y los demás objetos no deberían saber cómo lo hace.
  • El objeto tiene el concepto de atributo y método. Un atributo son los datos que se almacenan en la «caja» del objeto. Los métodos son las acciones que se pueden realizar sobre o dentro del objeto. Los atributos suelen expresarse mediante variables y los métodos mediante funciones.
  • Los objetos son necesarios, por ejemplo, en los juegos de ordenador, donde cada cosita en el campo de juego es un objeto con algunas propiedades. O en una tienda de Internet, donde un objeto se encarga de la cesta y otro de la presentación del producto.
  • Los objetos se pueden crear a partir de una plantilla; estas plantillas se denominan clases.

Explicación de Abstracción

Imagina que les has pedido a varias personas que describan de forma general qué es un teléfono y cómo usarlo: que sean una abuela, una madre y una amiga. La abuela recordará los teléfonos de disco y los tubos con cable rizado. Mamá hablará sobre teléfonos inalámbricos, que tienen una base y un tubo con el que puedes caminar por toda la casa, y la amiga comenzará a describir el teléfono móvil.

A pesar de que las historias serán muy diferentes entre sí, tendrán varios puntos en común sobre el teléfono:

  • El teléfono tiene un tubo;
  • Hablamos por el tubo y escuchamos por el tubo;
  • Puedes marcar el número de la persona que necesitas y llamarla;
  • Si te llaman por teléfono, lo oirás y aceptarás la llamada.

Resulta que si imaginamos un teléfono abstracto, obtendremos un dispositivo de este tipo con altavoz, micrófono y medio de marcación.

Esa es la abstracción: cuando describimos solo los detalles más importantes que son importantes para la tarea. En nuestro caso, la tarea es así: entender qué es un teléfono y cómo usarlo. Por lo tanto, el micrófono y el altavoz son importantes para esta tarea, pero la forma en que el teléfono se conecta a la red no lo es. El dispositivo de marcación es importante, pero la melodía que suena durante una llamada no lo es.

La abstracción es cuando nos centramos solo en los detalles esenciales para la tarea e ignoramos todo lo demás. En la POO, la abstracción significa que para cada objeto establecemos la cantidad mínima de métodos, campos y descripciones que nos permitirán resolver la tarea. Cuantas menos características, mejor será la abstracción, pero no se pueden eliminar las características clave.

Para trabajar con abstracciones, se utilizan interfaces.

Explicación de Interfaz

Entonces, tenemos un dispositivo con tubo, micrófono, altavoz y un medio de marcación. Pero si recuerdas las historias de mamá, abuela y amiga, descubrirás lo siguiente:

  • Hablan por el micrófono para que el interlocutor pueda oírte;
  • Para escuchar tú mismo, pones la oreja en el altavoz;
  • Para marcar un número, debes llamar a la secuencia de números deseada utilizando el marcador;
  • Cuando hay una llamada, se oyen pitidos en el altavoz.

Todo esto son interfaces. Permiten trabajar con el objeto sin profundizar en cómo está organizado en su interior. Si sabes trabajar con la interfaz del marcador, no te importa si tienes que girar un disco, presionar botones físicos en el auricular o presionar con el dedo en la pantalla táctil.

Tal interfaz nos dice, por así decirlo, que transmitiré al teléfono los números que quieras. Cómo lo haré internamente y cómo serán procesados, no importa, solo marca el número y el teléfono se encargará del resto.

Las interfaces son acciones sobre el objeto, disponibles para otros objetos (por eso se llaman públicas).

También existen métodos encapsulados, es decir, internos. Por ejemplo, el micrófono tiene un método público «Escuchar voz» y un método interno «Convertir voz en señales eléctricas«. Con su ayuda, interactúa con otras partes de nuestro teléfono abstracto. Habrá un artículo aparte sobre encapsulación, porque el tema es amplio.

Terminología Compleja

Estrictamente hablando, las interfaces no son acciones, sino métodos. Ahora lo explicaremos.

En programación existen operaciones: son las acciones más simples, por ejemplo, copiar un valor de una variable a otra.

A partir de acciones simples se componen funciones: esto es cuando varias operaciones se «pegan» en una sola. Le damos un nombre a esta fusión y obtenemos una función. Por ejemplo, puede haber una función «comprobar la exactitud del correo electrónico«, que consta de varias docenas de operaciones simples.

En el lenguaje de la POO, las funciones vinculadas a objetos se denominan métodos. Un término así. En esencia, son funciones, es decir, operaciones pegadas.

Total: el método es un conjunto de acciones simples que se unieron en un todo y se colocaron en el objeto.

¿Para qué Sirve Todo Esto?

Digamos que estás trabajando en equipo en un gran producto. En tales casos, es conveniente dividir un programa grande en muchos subprogramas y servicios, cada uno de los cuales resuelve su propia tarea limitada.

Si no se acuerda de antemano cómo estos componentes intercambian datos entre sí, entonces puede suceder lo que ya hemos advertido:

  • Un programador realiza una función que se ocupa del registro de nuevos usuarios;
  • Todos los demás usan esta función, están acostumbrados a sus parámetros y saben que allí es donde se deben transmitir;
  • De repente, este programador se da cuenta de que es posible programar una opción de registro más eficaz, que funcionará mucho más rápido;
  • Reescribe completamente la función y, en este momento, toda la lógica del programa de todo el equipo se rompe: las llamadas antiguas no funcionan porque ahora la función acepta otros datos (o en una secuencia diferente).

Para que esto no suceda, se hace lo siguiente:

  • Un programador se ocupa del registro de nuevos usuarios.
  • Crea un objeto «Usuario» y le prescribe la interfaz «Registrar«.
  • También dice que la interfaz «Registrar» aceptará tres variables: nombre, correo electrónico y contraseña.
  • Ahora el programador les dice a los demás: «Chicos, si necesitan registrar un nuevo usuario, usen la interfaz Usuario.Registrar (nombre, correo electrónico, contraseña)«.
  • Incluso si toda la lógica de trabajo cambia dentro del objeto, esto no afectará de ninguna manera la interfaz: todos podrán usarla igualmente.
  • Y todo porque a nadie le importa cómo implementó su parte ese programador, si todo funciona normalmente a través de la interfaz. No importa cómo cifre la contraseña, dónde almacene el correo electrónico, cómo procese el nombre y en qué base de datos guarde todo esto. Si la interfaz funciona, todos los demás pueden continuar el desarrollo.

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,