En la ingeniería de software y la teoría del lenguaje de programación , el principio de abstracción (o el principio de abstracción ) es un dictum 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 lenguaje de programación o bibliotecas de software [ cita requerida ]. El principio a veces se establece como una recomendación para el programador, pero a veces se establece como un requisito del lenguaje de programación, asumiendo que se comprende 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 una recomendación al programador, el principio de abstracción se puede generalizar como el principio de " no repetir ", 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.
El principio
Como recomendación al programador, en su formulación de Benjamin C. Pierce en Tipos y lenguajes de programación (2002), el principio de abstracción dice (énfasis en el original): [1]
Cada parte importante de la funcionalidad de un programa debe implementarse en un solo lugar del código fuente. Cuando funciones similares se llevan a cabo mediante distintos fragmentos de código, generalmente es beneficioso combinarlas en una 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 mecanografiados (1994), el principio de abstracción dice :. [2]
Se pueden nombrar las frases de cualquier clase sintáctica semánticamente significativa.
Historia y variaciones
Bajo este mismo nombre, el principio de abstracción aparece en una larga lista de libros. Aquí damos una lista necesariamente incompleta, junto con la formulación si es sucinta:
- Alfred John Cole, Ronald Morrison (1982) Una introducción a la programación con S-algol : "[La abstracción] cuando se aplica al diseño del lenguaje es definir todas las categorías sintácticas semánticamente significativas en el lenguaje y permitir una abstracción sobre ellas". [3]
- Bruce J. MacLennan (1983) Principios de los lenguajes de programación: diseño, evaluación e implementación : "Evite requerir que algo se declare más de una vez; factorizar el patrón recurrente". [4]
- Jon Pearce (1998) Programación y metaprogramación en esquema : "La estructura y la función deben ser independientes". [5]
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 influyente libro de Gang of Four afirma: "El enfoque aquí es encapsular el concepto que varía , un tema de muchos patrones de diseño". Esta afirmación ha sido reformulada por otros autores como "Encuentra lo que varía y encapsúlalo". [6]
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". [7] Más tarde se elaboró como aplicable a otros problemas en el desarrollo de software: "Automatice todos los procesos que valga la pena automatizar. Si se encuentra realizando una tarea muchas veces, escríbala". [8]
Trascendencia
El principio de abstracción a menudo se enuncia en el contexto de algún mecanismo destinado a facilitar la abstracción. El mecanismo básico de 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 control y datos incluyen: tipos de datos abstractos , incluidas clases , politipismo , etc. La búsqueda de abstracciones más ricas que permitan menos duplicaciones en escenarios complejos es una de las fuerzas impulsoras en la investigación y el diseño de lenguajes de programación.
Los programadores sin experiencia pueden verse tentados a introducir demasiada abstracción en su programa, una abstracción que no se utilizará más de una vez. [ cita requerida ] Un principio complementario que enfatiza este tema es " No lo vas a necesitar " y, de manera más general, el principio KISS .
Dado que el código suele estar sujeto a revisiones, seguir el principio de abstracción puede implicar la refactorización del código. El esfuerzo de reescribir un fragmento de código generalmente debe amortizarse contra los beneficios futuros estimados de una abstracción. Martin Fowler ideó una regla empírica que rige esto y la popularizó como la regla de tres . Establece que si un fragmento de código se copia más de dos veces, es decir, terminaría teniendo tres o más copias, entonces es necesario abstraerlo.
Generalizaciones
" No se repita ", o el "principio DRY", es una generalización desarrollada en el contexto de arquitecturas de varios niveles , donde el código relacionado se duplica necesariamente hasta cierto punto en los niveles, normalmente en diferentes idiomas. 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 ]
Interfaces de programación de hardware
Además de optimizar el código, un significado jerárquico / recursivo del nivel de abstracción en la 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 shellcode 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. [9]
Referencias
- ^ Pierce, Benjamin (2002). Tipos y lenguajes de programación . Prensa del MIT. pag. 339. ISBN 0-262-16209-1.
- ^ David A. Schmidt, La estructura de los lenguajes de programación mecanografiados , MIT Press, 1994, ISBN 0-262-19349-3 , pág. 32
- ^ Alfred John Cole, Ronald Morrison, Introducción a la programación con S-algol , CUP Archive, 1982, ISBN 0-521-25001-3 , pág. 150
- ^ Bruce J. MacLennan, Principios de los lenguajes de programación: diseño, evaluación e implementación , Holt, Rinehart y Winston, 1983, p. 53
- ^ Jon Pearce, Programación y metaprogramación en esquema , Birkhäuser, 1998, ISBN 0-387-98320-1 , pág. 40
- ^ Alan Shalloway, James Trott, Explicación de los patrones de diseño: una nueva perspectiva sobre el diseño orientado a objetos , Addison-Wesley, 2002, ISBN 0-201-71594-5 , pág. 115
- ^ Kent Beck, Explicación de la programación extrema: cambio de abrazo , 2da edición, Addison-Wesley, 2000, ISBN 0-201-61641-6 , pág. 61
- ^ Guía de bolsillo de programación cromática, extrema , O'Reilly, 2003, ISBN 0-596-00485-0
- ^ Koziol, El manual de Shellcoders " , Wiley, 2004, p. 10, ISBN 0-7645-4468-3