Los lenguajes de programación nos permiten implementar modelos abstractos de la realidad sobre la que estamos trabajando para resolver problemas. En este sentido, la abstracción en estos los lenguajes de programación se divide en dos categorías: abstracción de datos y abstracción de control. Empecemos por la última, pues es la que ya conocemos.
La abstracción de control hace referencia a la abstracción que logramos en cuanto al control de ejecución del código.
Normalmente, esto lo logramos con las estructuras de control como for
, if
, o while
. Sucede que estas instrucciones, son en realidad abstracciones sobre lo que está sucediendo a bajo nivel, pues los microprocesadores carecen de estas instrucciones, pero nos permiten controlar el flujo de ejecución de instrucciones con dos mecanismos: la secuencia y el salto. Los primeros lenguajes de programación de alto nivel introdujeron las sentencias de bifurcación y los bucles para abstraer estos procesos y describir el orden en el que se ejecutan las sentencias o grupos de sentencias
Junto a estas estructuras de control, entran en juego los subprogramas, como una herramienta adicional de abstracción pues, durante su implementación, quien los programa describe en detalle cómo funcionan y cuando se invocan basta con conocer lo que hacen y no cómo lo hacen.
Los subprogramas funcionan de facto como abstracciones que pemiten extender el lenguaje de programación que se está utilizando.
En resumen, las abstracciones de control se clasifican en estructuras de control a nivel de sentencia (con las bifurcaciones y los bucles) y abstracciones procedimentales (a nivel de unidades).
La abstracción procedimental es esencial para diseñar software modular y fiable. Se basa en la utilización de procedimientos o funciones sin preocuparse de cómo se implementan. La abstracción en los subprogramas se logra de tres formas:
La abstracción de datos es una técnica de programación que permite crear o definir nuevos tipos de datos adaptados a la aplicación deseada. Esta potente técnica facilita el diseño de programas más concisos, legibles y flexibles. La esencia de la abstracción radica en usar un tipo de dato sin necesidad de conocer cómo está representado o implementado internamente.
Los tipos de datos son abstracciones, y el proceso de construir nuevos tipos se denomina abstracción de datos. Estos nuevos tipos definidos por el usuario se conocen como tipos abstractos de datos (TAD).
Los primeros pasos hacia la abstracción de datos surgieron con lenguajes como FORTRAN, COBOL y ALGOL 60, que introdujeron diferentes tipos de variables para manipular enteros, números reales, caracteres y valores lógicos. Sin embargo, estos tipos de datos no podían modificarse y no siempre se ajustaban a las necesidades específicas. Por ejemplo, FORTRAN presentaba deficiencias en el tratamiento de cadenas, aunque ofrecía alta precisión y fiabilidad para cálculos matemáticos.
La siguiente generación de lenguajes, como Pascal, SIMULA-67 y ALGOL 68, ofreció una amplia selección de tipos de datos y permitió a los programadores modificar y ampliar los tipos existentes mediante construcciones específicas (por ejemplo, arrays y registros).
SIMULA-67 marcó un hito al ser el primer lenguaje que combinó datos y procedimientos mediante la construcción de clases, sentando las bases para el desarrollo de la programación orientada a objetos.
El concepto de tipo de dato, según se definió en Pascal y ALGOL 68, constituyó un avance crucial para el desarrollo de lenguajes capaces de soportar programación estructurada.
Un tipo de dato definible por el usuario se considera tipo abstracto de dato (TAD) cuando: