En ingeniería de software y teoría de lenguajes de programación , el principio de abstracción es un precepto fundamental que busca reducir la duplicación de información en un programa (generalmente con énfasis en la duplicación de código ) siempre que sea posible, mediante el uso de abstracciones proporcionadas por el lenguaje de programación o las bibliotecas de software . [ 1 ] A veces, este principio se enuncia como una recomendación para el programador, pero otras veces como un requisito del lenguaje de programación, asumiendo que se comprende por sí mismo por qué es deseable usar abstracciones. Los orígenes del principio son inciertos; se ha reinventado varias veces, a veces con un nombre diferente y con ligeras variaciones.
Cuando se interpreta como una recomendación para el programador, el principio de abstracción puede generalizarse como el principio " no te repitas " (DRY, por sus siglas en inglés), 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 para el 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 funcionalidad importante de un programa debe implementarse en un único lugar del código fuente. Cuando funciones similares se realizan mediante fragmentos de código distintos, suele ser beneficioso combinarlos en uno solo, abstraiendo las partes que varían.
Como requisito del lenguaje de programación, en su formulación por David A. Schmidt en The structure of typed programming languages (1994), el principio de abstracción dice: [ 3 ]
Se pueden nombrar las frases de cualquier clase sintáctica semánticamente significativa.
Historia y variaciones
El principio de abstracción se menciona en varios libros. Algunos de ellos, junto con su formulación cuando es concisa, se enumeran a continuación.
- 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 de lenguajes es definir todas las categorías sintácticas semánticamente significativas en el lenguaje y permitir una abstracción sobre ellas". [ 4 ]
- Bruce J. MacLennan (1983) Principios de los lenguajes de programación: diseño, evaluación e implementación : "Evite requerir que algo se indique más de una vez; extraiga el patrón recurrente". [ 5 ]
- Jon Pearce (1998) Programación y metaprogramación en Scheme : "La estructura y la función deben ser independientes". [ 6 ]
Este principio desempeña un papel fundamental en los patrones de diseño de la programación orientada a objetos , aunque la mayoría de los escritos sobre el tema no le dan un nombre. El libro «Design Patterns» del Grupo de los Cuatro afirma: «El objetivo aquí es encapsular el concepto que varía , un tema recurrente en muchos patrones de diseño». Otros autores han reformulado esta afirmación como «Encuentra lo que varía y encapsúlalo». [ 7 ]
En este siglo, el principio se ha reinventado en la programación extrema bajo el lema "Una y solo 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 como aplicable a otros aspectos del desarrollo de software: "Automatiza todo proceso que valga la pena automatizar. Si te encuentras realizando una tarea muchas veces, crea un script para ella". [ 9 ]
Trascendencia
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 abstracción de control es una función o subrutina . Las abstracciones de datos incluyen diversas formas de polimorfismo de tipos . Mecanismos más elaborados que pueden combinar abstracciones de datos y control incluyen: tipos de datos abstractos , como clases , politipismo , etc. La búsqueda de abstracciones más ricas que permitan una menor duplicación en escenarios complejos es uno de los principales motores 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 sus programas , abstracción que no se utilizará más de una vez. Un principio complementario que enfatiza este problema es " No lo vas a necesitar " y, de forma más general, el principio KISS ( Keep It Simple, Stupid) .
Dado que el código suele estar sujeto a revisiones, seguir el principio de abstracción puede implicar refactorizarlo . El esfuerzo que supone reescribir una parte del código debe sopesarse frente a los beneficios futuros estimados de la abstracción. Martin Fowler ideó una regla práctica para esto , popularizada como la regla de tres . Esta regla establece que si una parte del código se copia más de dos veces, es decir, si termina teniendo tres o más copias, entonces debe abstraerse.
Generalizaciones
El principio DRY ( Don't Repeat Yourself ) es una generalización desarrollada en el contexto de arquitecturas multicapa , donde el código relacionado se duplica necesariamente en cierta medida entre las distintas capas, generalmente en lenguajes diferentes. En la práctica, se recomienda utilizar herramientas automatizadas, como generadores de código y transformaciones de datos, para evitar la repetición.
Interfaces de programación de hardware
Además de optimizar el código, un 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 del hardware, también llamadas "niveles de abstracción" y "capas de abstracción". En este caso, el nivel de abstracción suele ser sinónimo de interfaz. Por ejemplo, al examinar el shellcode y la interfaz entre lenguajes de alto y bajo nivel, el nivel de abstracción cambia desde comandos del sistema operativo (por ejemplo, en C) hasta llamadas y comandos a 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 ]
Referencias
- ↑ Mishra, Jibitesh (2011). Ingeniería de software . Pearson Education India. ISBN 978-81-317-5869-4.
- ↑ Pierce, Benjamin (2002). Tipos y lenguajes de programación . MIT Press. pág. 339. ISBN 0-262-16209-1.
- ↑ David A. Schmidt, La estructura de los lenguajes de programación tipados , MIT Press, 1994, ISBN 0-262-19349-3pág. 32
- ↑ Alfred John Cole, Ronald Morrison, Introducción a la programación con S-algol , Archivo CUP, 1982, ISBN 0-521-25001-3pá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ág. 53
- ↑ Jon Pearce, Programación y metaprogramación en Scheme , Birkhäuser, 1998, ISBN 0-387-98320-1pág. 40
- ↑ Alan Shalloway, James Trott, Patrones de diseño explicados: una nueva perspectiva sobre el diseño orientado a objetos , Addison-Wesley, 2002, ISBN 0-201-71594-5pág. 115
- ↑ Kent Beck, Programación extrema explicada: acepta el cambio , 2.ª edición, Addison-Wesley, 2000, ISBN 0-201-61641-6pág. 61
- ↑ Chromatic, Extreme Programming Pocket Guide , O'Reilly, 2003, ISBN 0-596-00485-0
- ↑ Koziol, " The Shellcoders Handbook" , Wiley, 2004, pág. 10, ISBN 0-7645-4468-3
- Temas de lenguajes de programación
- Principios de programación