En ingeniería de software y teoría de lenguajes de programación , el principio de abstracción (o principio de abstracción ) es un dictamen básico que tiene como objetivo reducir la duplicación de información en un programa (generalmente con énfasis en la duplicación de código ) siempre que sea práctico haciendo uso de abstracciones proporcionadas por el lenguaje de programación o bibliotecas de software . [1] El principio a veces se enuncia como una recomendación para el programador, pero a veces se enuncia como un requisito del lenguaje de programación, asumiendo que se entiende por sí mismo por qué es deseable utilizar abstracciones. Los orígenes del principio son inciertos; se ha reinventado varias veces, a veces con un nombre diferente, con ligeras variaciones.
Cuando se lee como recomendaciones al programador, el principio de abstracción puede generalizarse como el principio de " no repetirse " (DRY), que recomienda evitar la duplicación de información en general, y también evitar la duplicación del esfuerzo humano involucrado en el proceso de desarrollo de software.
Como recomendación al programador, en su formulación por Benjamin C. Pierce en Types and Programming Languages (2002), el principio de abstracción dice (énfasis en el original): [2]
Cada pieza significativa de funcionalidad de un programa debe implementarse en un solo lugar en el código fuente. Cuando funciones similares se llevan a cabo mediante distintas piezas de código, generalmente es beneficioso combinarlas en una sola abstrayendo las distintas partes.
Como requisito del lenguaje de programación, en su formulación por David A. Schmidt en La estructura de los lenguajes de programación tipados (1994), el principio de abstracción dice: [3]
Las frases de cualquier clase sintáctica semánticamente significativa pueden ser nombradas.
El principio de abstracción se menciona en varios libros. A continuación se enumeran algunos de ellos, junto con su formulación, si es sucinta.
El principio juega un papel central en los patrones de diseño en la programación orientada a objetos , aunque la mayoría de los escritos sobre ese tema no le dan un nombre. El libro Design Patterns de Gang of Four afirma: "El enfoque aquí es encapsular el concepto de que varía , un tema de muchos patrones de diseño". Esta afirmación ha sido reformulada por otros autores como "Encuentre lo que varía y encapsúlelo". [7]
En este siglo, el principio se ha reinventado en la programación extrema bajo el lema “Una vez y sólo una vez”. La definición de este principio fue bastante sucinta en su primera aparición: “sin código duplicado”. [8] Posteriormente se ha desarrollado para que sea aplicable a otras cuestiones del desarrollo de software: “Automatiza todos los procesos que valga la pena automatizar. Si te encuentras realizando una tarea muchas veces, escribe un script para ella”. [9]
El principio de abstracción se suele enunciar en el contexto de algún mecanismo destinado a facilitar la abstracción. El mecanismo básico de la abstracción de control es una función o subrutina . Las abstracciones de datos incluyen varias formas de polimorfismo de tipos . Los mecanismos más elaborados que pueden combinar abstracciones de datos y control incluyen: tipos de datos abstractos , incluidas las clases , politipismo , etc. La búsqueda de abstracciones más ricas que permitan una menor duplicación en escenarios complejos es una de las fuerzas impulsoras de la investigación y el diseño de lenguajes de programación.
Los programadores inexpertos pueden verse tentados a introducir demasiada abstracción en su programa, abstracción que no se utilizará más de una vez. [ cita requerida ] Un principio complementario que enfatiza esta cuestión es " No lo vas a necesitar " y, de forma más general, el principio KISS .
Dado que el código suele estar sujeto a revisiones, seguir el principio de abstracción puede implicar refactorizar el código. [ cita requerida ] El esfuerzo de reescribir un fragmento de código de manera genérica debe amortizarse frente a los beneficios futuros estimados de una abstracción. Martin Fowler ideó una regla general que rige esto y se popularizó como la regla de tres . Establece que si un fragmento de código se copia más de dos veces, es decir, si terminara teniendo tres o más copias, entonces debe abstraerse.
El principio " No te repitas ", o "principio DRY", es una generalización desarrollada en el contexto de arquitecturas multicapa , donde el código relacionado se duplica necesariamente en cierta medida entre niveles, generalmente en diferentes lenguajes. En términos prácticos, la recomendación aquí es confiar en herramientas automatizadas, como generadores de código y transformaciones de datos para evitar la repetición. [ cita requerida ]
Además de optimizar el código, el significado jerárquico/recursivo del nivel de abstracción en programación también se refiere a las interfaces entre las capas de comunicación de hardware, también llamadas "niveles de abstracción" y "capas de abstracción". En este caso, el nivel de abstracción a menudo es sinónimo de interfaz. Por ejemplo, al examinar el código shell y la interfaz entre lenguajes de nivel superior e inferior, el nivel de abstracción cambia de los comandos del sistema operativo (por ejemplo, en C) a las llamadas y comandos de nivel de registro y circuito (por ejemplo, en ensamblador y binario). En el caso de ese ejemplo, el límite o interfaz entre los niveles de abstracción es la pila. [10]