Cómo hacer que su código sea más legible con abstracción

Mientras aprende a programar, es común ver a personas que usan un término llamado abstracción. Empiezas a cuestionarte: ¿qué es la abstracción y por qué es importante?

En este artículo te explicaré el concepto de abstracción y cómo usarlo, y daré algunos ejemplos en Python.

Lo primero es lo primero: ¿Qué es la abstracción?

Según mi profesor de Fundamentos de la Programación:

"La abstracción es una especificación simplificada de una entidad"

Lo que esto significa es que una abstracción es una representación de una entidad de cálculo. Es una forma de ocultar su información particular y solo dar la información más relevante al programador.

Una abstracción también es situacional: cada una se adapta a una necesidad, por lo que puede asociar una buena abstracción con el uso particular de esa entidad.

Echemos un vistazo a los árboles de búsqueda binaria (si no sabe qué son, consulte mi artículo sobre ellos). Podemos definir un nodo como una entidad con las siguientes propiedades:

A Node has: Node * left Node * right int val

Aquí diríamos que un nodo tiene dos punteros a otros nodos y un valor int. Pero, ¿qué tan útil es esto para alguien en comparación con una función insert(node, value)y simplemente la insertaría correctamente? De esa manera, solo necesitaría llamarlo y listo. Simple.

Así es como es útil la abstracción. Todas las bibliotecas que usa en sus programas lo usan para que sea realmente simple usar una biblioteca.

Ok, pero ¿qué tan buena es la abstracción de datos?

La abstracción de datos nos permite transformar una estructura de datos compleja en una que sea simple y fácil de usar. El efecto de esto es que un programa con un alto nivel de complejidad de código puede transformarse en uno que se parezca al inglés (llamémoslo código de alto nivel ).

Un tipo de datos se compone de 2 cosas: propiedades y métodos, que pueden ser públicos o privados. Los públicos son la única forma de utilizar los datos. Deben cubrir todas las funcionalidades que desea que puedan hacer los datos.

¿Qué pasa entonces si estás usando tu código abstracto? Realmente no importa si sus propiedades internas cambian siempre que los métodos sigan recibiendo los mismos argumentos y hagan lo mismo que antes. Si algo está mal, solo necesita cambiarlo una vez.

Escojamos un ejemplo y trabajemos con él: Vectores

Asumiremos que los Vectores son:

  • Objetos con 2 valores, xey
  • xey son números no negativos

De esta manera, los vectores son algo como (2, 5), (0, 19), etc.

Una buena forma de crear abstracciones es utilizar Objetos. Proporcionan ocultación de información y representación anónima. Esto permite al usuario mantener la abstracción.

Comencemos por definir nuestra clase (no definiré la validación de tipo para mantener el código más limpio, pero debes hacerlo):

Así que definimos varios métodos y ahora tenemos muchas cosas que podemos hacer:

Para un vector 2D, esto puede parecer simple. Si comienza a implementar esto en programas más grandes y complejos, notará que son muy útiles.

Hagamos ahora una implementación diferente del vector de clase (cambie su estado interno) a algo con los mismos métodos pero con código diferente:

Si ejecutamos los mismos comandos, la salida seguirá siendo la misma. Esto se debe a la abstracción que usamos, incluso si el código cambió por completo. Por eso es muy importante utilizar la abstracción. Permite flexibilidad en su código e independencia del código de otras personas.

Usemos ahora otro ejemplo, esta vez con 2 clases: Ciudad y Ciudadano.

Y obtenemos lo siguiente:

### OUTPUT ###City population is 1000, random: Citizen is a female 20 years oldCity population is 1000, random: Citizen is a male 74 years old

Pero imagina ahora que queremos cambiar el funcionamiento de la clase Ciudadano por dentro. Si no usáramos la abstracción, ¡tendríamos que cambiar todo el código! ¡Eso es mucho trabajo!

Ahora bien, si se vuelve a ejecutar el código sabemos que está funcionando, aunque los resultados son diferentes. Como puede ver, cambiamos toda una clase, ¡pero todo funciona!

Terminando

Al principio, la abstracción puede parecer que no es necesaria. Cuanto menor sea el nivel del lenguaje que está utilizando, más importante es utilizar la abstracción. Esto evita tener un código complejo y realmente lo mantiene todo simple. En lenguajes como C es realmente muy útil. Si lo dudas, revisa este proyecto que hice donde implementé la abstracción y fue realmente fácil entender lo que estaba pasando.

Si tiene alguna pregunta o algo sobre lo que quiera hablar o discutir, ¡deje un comentario a continuación!

¡No olvides seguirme en Instagram y Twitter!