In software, an abstraction provides access while hiding details that otherwise might make access more challenging.[1] It focuses attention on details of greater importance.[2][3] Examples include the abstract data type which separates use from the representation of data[4] and functions that form a call tree that is more general at the base and more specific towards the leaves.
Rationale
The essence of abstraction is preserving information that is relevant in a given context, and forgetting information that is irrelevant in that context.
Computing mostly operates independently of the concrete world. The hardware implements a model of computation that is interchangeable with others.[6] The software is structured in architectures to enable humans to create the enormous systems by concentrating on a few issues at a time. These architectures are made of specific choices of abstractions. Greenspun's tenth rule is an aphorism on how such an architecture is both inevitable and complex.
Language abstraction is a central form of abstraction in computing: new artificial languages are developed to express specific aspects of a system. Modeling languages help in planning. Computer languages can be processed with a computer. An example of this abstraction process is the generational development of programming language from the first-generation programming language (machine language) to the second-generation programming language (assembly language) and the third-generation programming language (high-level programming language). Each stage can be used as a stepping stone for the next stage. The language abstraction continues for example in scripting languages and domain-specific languages.
Dentro de un lenguaje de programación, algunas características permiten al programador crear nuevas abstracciones. Estas incluyen subrutinas , módulos , polimorfismo y componentes de software . Otras abstracciones, como los patrones de diseño de software y los estilos arquitectónicos, permanecen invisibles para un traductor y solo intervienen en el diseño del sistema.
Algunas abstracciones intentan limitar el rango de conceptos que un programador necesita conocer, ocultando por completo las abstracciones en las que se basan. El ingeniero de software y escritor Joel Spolsky ha criticado estos esfuerzos afirmando que todas las abstracciones son imperfectas , es decir, que nunca pueden ocultar por completo los detalles subyacentes; [ 7 ] sin embargo, esto no niega la utilidad de la abstracción.
Algunas abstracciones están diseñadas para interactuar con otras abstracciones; por ejemplo, un lenguaje de programación puede contener una interfaz de función externa para realizar llamadas al lenguaje de nivel inferior.
Características de abstracción
Lenguajes de programación
Los distintos lenguajes de programación proporcionan diferentes tipos de abstracción, dependiendo de las aplicaciones previstas para el lenguaje. Por ejemplo:
- En lenguajes de programación orientados a objetos como C++ , Object Pascal o Java , el concepto de abstracción se ha convertido en una declaración, utilizando la sintaxis (en C++ ) o las palabras reservadas (keywords) [ 8 ] y [ 9 ] (en Java ). Tras dicha declaración, es responsabilidad del programador implementar una clase para instanciar el objeto declarado.
function(parameters) = 0;abstractinterface - Los lenguajes de programación funcional suelen presentar abstracciones relacionadas con funciones, como las abstracciones lambda (que convierten un término en una función de alguna variable) y las funciones de orden superior (los parámetros son funciones). [ 10 ]
- Los miembros modernos de la familia de lenguajes de programación Lisp, como Clojure , Scheme y Common Lisp, admiten sistemas de macros para permitir la abstracción sintáctica. Otros lenguajes de programación, como Scala, también cuentan con macros o características de metaprogramación muy similares (por ejemplo, Haskell tiene Template Haskell y OCaml tiene MetaOCaml ). Estas características permiten omitir código repetitivo , abstraer secuencias de llamadas a funciones tediosas, implementar nuevas estructuras de flujo de control e implementar lenguajes específicos de dominio (DSL), que permiten expresar conceptos específicos de dominio de forma concisa y elegante. Todas estas características, cuando se utilizan correctamente, mejoran tanto la eficiencia del programador como la claridad del código fuente al hacer más explícito el propósito previsto. Una consecuencia de la abstracción sintáctica es que cualquier dialecto de Lisp, y casi cualquier lenguaje de programación, puede, en principio, implementarse en cualquier Lisp moderno con un esfuerzo significativamente reducido (aunque aún considerable en la mayoría de los casos) en comparación con lenguajes de programación "más tradicionales" como Python , C o Java .
Métodos de especificación
Los analistas han desarrollado diversos métodos para especificar formalmente los sistemas de software. Algunos métodos conocidos incluyen:
- Método basado en modelos abstractos (VDM, Z);
- Técnicas algebraicas (Larch, CLEAR, OBJ, ACT ONE, CASL);
- Técnicas basadas en procesos (LOTOS, SDL, Estelle);
- Técnicas basadas en trazas (SPECIAL, TAM);
- Técnicas basadas en el conocimiento (Refine, Gist).
Lenguajes de especificación
Los lenguajes de especificación generalmente se basan en abstracciones de un tipo u otro, ya que las especificaciones suelen definirse antes en un proyecto (y a un nivel más abstracto) que la implementación final. El lenguaje de especificación Unified Modeling Language (UML), por ejemplo, permite la definición de clases abstractas , que en un proyecto en cascada permanecen abstractas durante la fase de arquitectura y especificación del proyecto.
abstracción de control
Los lenguajes de programación ofrecen abstracción de control como uno de los principales propósitos de su uso. Las computadoras entienden operaciones a un nivel muy bajo, como mover bits de una ubicación de memoria a otra y calcular la suma de dos secuencias de bits. Los lenguajes de programación permiten realizar esto a un nivel superior. Por ejemplo, considere esta instrucción escrita al estilo de Pascal :
a := (1 + 2) * 5
Para un humano, esto parece un cálculo bastante simple y obvio ( "uno más dos es tres, por cinco es quince" ). Sin embargo, los pasos de bajo nivel necesarios para realizar esta evaluación, devolver el valor "15" y luego asignar ese valor a la variable "a" son en realidad bastante sutiles y complejos. Los valores deben convertirse a representación binaria (a menudo una tarea mucho más complicada de lo que uno pensaría) y los cálculos deben descomponerse (por el compilador o intérprete) en instrucciones de ensamblaje (que, de nuevo, son mucho menos intuitivas para el programador: operaciones como desplazar un registro binario a la izquierda o sumar el complemento binario del contenido de un registro a otro, simplemente no son la forma en que los humanos piensan sobre las operaciones aritméticas abstractas de suma o multiplicación). Finalmente, asignar el valor resultante de "15" a la variable etiquetada como "a", para que "a" pueda usarse más adelante, implica pasos adicionales "entre bastidores" de búsqueda de la etiqueta de una variable y la ubicación resultante en la memoria física o virtual, almacenar la representación binaria de "15" en esa ubicación de memoria, etc.
Sin abstracción de control, un programador tendría que especificar todos los pasos a nivel de registro/binario cada vez que simplemente quisiera sumar o multiplicar un par de números y asignar el resultado a una variable. Esta duplicación de esfuerzos tiene dos graves consecuencias negativas:
- Esto obliga al programador a repetir constantemente tareas bastante comunes cada vez que se necesita una operación similar.
- obliga al programador a programar para el hardware y el conjunto de instrucciones específicos.
Programación estructurada
La programación estructurada implica la división de tareas de programas complejos en partes más pequeñas con un control de flujo claro e interfaces entre componentes, lo que reduce la complejidad y el potencial de efectos secundarios.
En un programa sencillo, esto puede tener como objetivo garantizar que los bucles tengan puntos de salida únicos u obvios y (en la medida de lo posible) que las funciones y los procedimientos tengan puntos de salida únicos.
En un sistema más grande, puede implicar dividir tareas complejas en muchos módulos diferentes. Consideremos un sistema que gestiona la nómina en barcos y en oficinas en tierra:
- El nivel superior puede incluir un menú con las operaciones típicas para el usuario final.
- Dentro de ello podrían encontrarse archivos ejecutables independientes o bibliotecas para tareas como registrar la entrada y salida de empleados o imprimir cheques.
- Dentro de cada uno de esos componentes independientes, podría haber muchos archivos fuente diferentes, cada uno con el código del programa para resolver una parte del problema, con solo algunas interfaces disponibles para otras partes del programa. Un programa de inicio de sesión podría tener archivos fuente para cada pantalla de entrada de datos y la interfaz de la base de datos (que a su vez podría ser una biblioteca independiente de terceros o un conjunto de rutinas de biblioteca enlazadas estáticamente).
- Tanto la base de datos como la aplicación de nóminas deben iniciar el proceso de intercambio de datos entre el barco y tierra, y esa tarea de transferencia de datos a menudo contendrá muchos otros componentes.
Estas capas producen el efecto de aislar los detalles de implementación de un componente y sus diversos métodos internos de los demás. La programación orientada a objetos adopta y amplía este concepto.
abstracción de datos
La abstracción de datos impone una clara separación entre las propiedades abstractas de un tipo de dato y los detalles concretos de su implementación. Las propiedades abstractas son aquellas visibles para el código cliente que utiliza el tipo de dato (la interfaz del tipo de dato), mientras que la implementación concreta se mantiene completamente privada e incluso puede cambiar, por ejemplo, para incorporar mejoras de eficiencia con el tiempo. La idea es que dichos cambios no deberían tener ningún impacto en el código cliente, ya que no implican ninguna diferencia en el comportamiento abstracto.
Por ejemplo, se podría definir un tipo de dato abstracto llamado tabla de búsqueda que asocie de forma única claves con valores , y en la que los valores se puedan recuperar especificando sus claves correspondientes. Dicha tabla de búsqueda puede implementarse de diversas maneras: como una tabla hash , un árbol de búsqueda binaria o incluso una simple lista lineal de pares (clave:valor). En lo que respecta al código del cliente, las propiedades abstractas del tipo son las mismas en todos los casos.
Por supuesto, todo esto depende de que los detalles de la interfaz estén bien definidos desde el principio, ya que cualquier cambio puede tener un impacto significativo en el código del cliente. En otras palabras: la interfaz establece un contrato sobre el comportamiento acordado entre el tipo de datos y el código del cliente; todo lo que no esté especificado en el contrato está sujeto a cambios sin previo aviso.
Extracción manual de datos
Si bien gran parte de la abstracción de datos se realiza mediante informática y automatización, en ocasiones este proceso se lleva a cabo manualmente y sin intervención de programación. Un ejemplo de esto es la abstracción de datos durante la realización de una revisión sistemática de la literatura. En esta metodología, uno o varios extractores abstraen los datos al realizar un metaanálisis , y los errores se reducen mediante la abstracción dual de datos seguida de una verificación independiente, conocida como adjudicación . [ 11 ]
Abstracción en la programación orientada a objetos
En la teoría de la programación orientada a objetos , la abstracción implica la capacidad de definir objetos que representan "actores" abstractos que pueden realizar tareas, informar sobre su estado y modificarlo, y "comunicarse" con otros objetos del sistema. El término encapsulación se refiere a la ocultación de los detalles del estado , pero extender el concepto de tipo de dato de lenguajes de programación anteriores para asociar el comportamiento de forma más directa con los datos, y estandarizar la forma en que interactúan los diferentes tipos de datos, es el comienzo de la abstracción . Cuando la abstracción se extiende a las operaciones definidas, permitiendo la sustitución de objetos de diferentes tipos, se denomina polimorfismo . Cuando se extiende en la dirección opuesta, dentro de los tipos o clases, estructurándolos para simplificar un conjunto complejo de relaciones, se denomina delegación o herencia .
Diversos lenguajes de programación orientados a objetos ofrecen funcionalidades similares para la abstracción, todas ellas orientadas a apoyar una estrategia general de polimorfismo , que incluye la sustitución de un tipo de dato por otro con la misma función o una similar. Si bien no es una práctica tan extendida, una configuración , imagen o paquete puede predeterminar gran parte de estas vinculaciones en tiempo de compilación , de enlace o de carga . Esto dejaría solo un mínimo de dichas vinculaciones para modificar en tiempo de ejecución .
Por ejemplo, Common Lisp Object System o Self presentan una menor distinción entre clases e instancias y un mayor uso de la delegación para el polimorfismo . Los objetos y funciones individuales se abstraen de forma más flexible para adaptarse mejor a una herencia funcional compartida de Lisp .
C++ ejemplifica otro extremo: depende en gran medida de las plantillas , la sobrecarga y otras vinculaciones estáticas en tiempo de compilación, lo que a su vez presenta ciertos problemas de flexibilidad.
Si bien estos ejemplos ofrecen estrategias alternativas para lograr la misma abstracción, no alteran fundamentalmente la necesidad de admitir sustantivos abstractos en el código; toda la programación se basa en la capacidad de abstraer verbos como funciones, sustantivos como estructuras de datos y ambos como procesos.
Consideremos, por ejemplo, un fragmento de código Java para representar algunos "animales" comunes de granja con un nivel de abstracción adecuado para modelar aspectos simples de su hambre y alimentación. Define una Animalclase para representar tanto el estado del animal como sus funciones:
public class Animal extends LivingThing { private Location loc ; private double energyReserves ;public boolean isHungry () { return energyReserves < 2.5 ; } public void eat ( Food food ) { // Consumir comida energyReserves + = food.getCalories (); } public void moveTo ( Location location ) { // Moverse a una nueva ubicación this.loc = location ; } }Con la definición anterior, se podrían crear objetos de tipoAnimaly llaman a sus métodos de esta manera:
elCerdo = nuevo Animal ( ) ; laVaca = nuevo Animal ( ) ; si ( elCerdo.tieneHambre ( ) ) { elCerdo.come ( sobrasdemesa ) ; } si ( laVaca.tieneHambre ( ) ) { laVaca.come ( hierba ) ; } laVaca.moverAlGranero ;En el ejemplo anterior, la clase Animales una abstracción utilizada en lugar de un animal real, LivingThinges una abstracción adicional (en este caso una generalización) de Animal.
Si se requiere una jerarquía de animales más diferenciada —para diferenciar, por ejemplo, a los que proporcionan leche de los que no proporcionan nada más que carne al final de sus vidas—, ese es un nivel intermedio de abstracción, probablemente Animal Lechero (vacas, cabras) que comería alimentos adecuados para dar buena leche, y Animal de Carne (cerdos, novillos) que comería alimentos para dar la mejor calidad de carne.
Esta abstracción podría eliminar la necesidad de que el programador especifique el tipo de alimento, permitiéndole concentrarse en el horario de alimentación. Las dos clases podrían estar relacionadas mediante herencia o ser independientes, y el programador podría definir distintos grados de polimorfismo entre ambos tipos. Estas funcionalidades suelen variar drásticamente entre lenguajes, pero en general, cada uno permite lograr lo mismo que los demás. Numerosas sobrecargas de operaciones, tipo por tipo de dato, pueden tener el mismo efecto en tiempo de compilación que cualquier grado de herencia u otro método para lograr el polimorfismo. La notación de clases es simplemente una herramienta práctica para el programador.
Diseño orientado a objetos
Las decisiones sobre qué abstraer y qué mantener bajo el control del programador se convierten en la principal preocupación del diseño orientado a objetos y del análisis de dominio ; determinar las relaciones relevantes en el mundo real es la preocupación del análisis orientado a objetos o del análisis de sistemas heredados .
En general, para determinar la abstracción adecuada, es necesario tomar muchas decisiones pequeñas sobre el alcance (análisis de dominio), determinar con qué otros sistemas se debe cooperar (análisis de sistemas heredados) y, finalmente, realizar un análisis detallado orientado a objetos que se expresa dentro de las restricciones de tiempo y presupuesto del proyecto como un diseño orientado a objetos. En nuestro ejemplo simple, el dominio es el corral, los cerdos y vacas vivos y sus hábitos alimenticios son las restricciones de sistemas heredados, el análisis detallado indica que los programadores deben tener la flexibilidad de alimentar a los animales con lo que esté disponible y, por lo tanto, no hay razón para codificar el tipo de alimento en la clase misma, y el diseño es una única clase simple de Animal de la cual los cerdos y las vacas son instancias con las mismas funciones. Una decisión para diferenciar DairyAnimal cambiaría el análisis detallado, pero el análisis de dominio y de sistemas heredados permanecería sin cambios; por lo tanto, está completamente bajo el control del programador, y se denomina abstracción en la programación orientada a objetos, a diferencia de la abstracción en el análisis de dominio o de sistemas heredados.
Consideraciones
Al hablar de semántica formal de lenguajes de programación , métodos formales o interpretación abstracta , la abstracción se refiere a considerar una definición menos detallada, pero segura, del comportamiento observado del programa. Por ejemplo, se puede observar solo el resultado final de la ejecución del programa en lugar de considerar todos los pasos intermedios. La abstracción se define como un modelo concreto (más preciso) de ejecución.
La abstracción puede ser exacta o fiel con respecto a una propiedad si se puede responder a una pregunta sobre la propiedad igualmente bien en el modelo concreto o abstracto. Por ejemplo, si se desea saber cuál es el valor módulo n del resultado de la evaluación de una expresión matemática que involucra solo enteros +, -, ×, entonces solo se necesita realizar todas las operaciones módulo n (una forma común de esta abstracción es la extracción de nueves ).
Las abstracciones, aunque no necesariamente exactas , deben ser sólidas . Es decir, debe ser posible obtener respuestas sólidas a partir de ellas, incluso si la abstracción simplemente produce un resultado indecidible . Por ejemplo, los estudiantes de una clase pueden abstraerse mediante sus edades mínima y máxima; si se pregunta si una persona pertenece a esa clase, se puede comparar su edad con las edades mínima y máxima; si su edad está fuera del rango, se puede responder con seguridad que la persona no pertenece a la clase; si no pertenece, se puede simplemente responder "No lo sé".
El nivel de abstracción de un lenguaje de programación puede influir en su usabilidad general . El marco de dimensiones cognitivas incorpora el concepto de gradiente de abstracción en un formalismo. Este marco permite al diseñador de un lenguaje de programación analizar las ventajas y desventajas de la abstracción frente a otras características del diseño, así como la influencia de los cambios en la abstracción sobre la usabilidad del lenguaje.
Las abstracciones pueden resultar útiles al trabajar con programas informáticos, ya que las propiedades no triviales de estos son esencialmente indecidibles (véase el teorema de Rice ). En consecuencia, los métodos automáticos para obtener información sobre el comportamiento de los programas informáticos deben sacrificar la terminación (en ocasiones pueden fallar, bloquearse o no arrojar ningún resultado), la solidez (pueden proporcionar información falsa) o la precisión (pueden responder "No lo sé" a algunas preguntas).
La abstracción es el concepto central de la interpretación abstracta . La verificación de modelos generalmente se realiza sobre versiones abstractas de los sistemas estudiados.
Niveles de abstracción
La informática suele presentar niveles (o, con menos frecuencia, capas ) de abstracción, donde cada nivel representa un modelo diferente de la misma información y procesos, pero con distintos grados de detalle. Cada nivel utiliza un sistema de expresión que implica un conjunto único de objetos y composiciones que se aplican solo a un dominio particular. [ 12 ] Cada nivel relativamente abstracto, o "superior", se basa en un nivel relativamente concreto, o "inferior", que tiende a proporcionar una representación cada vez más "granular". Por ejemplo, las compuertas se basan en circuitos electrónicos, el binario en compuertas, el lenguaje máquina en binario, el lenguaje de programación en lenguaje máquina, y las aplicaciones y los sistemas operativos en lenguajes de programación. Cada nivel está incorporado, pero no determinado, por el nivel inferior, lo que lo convierte en un lenguaje de descripción que es, en cierto modo, autocontenido.
Sistemas de bases de datos
Dado que muchos usuarios de sistemas de bases de datos carecen de un conocimiento profundo de las estructuras de datos informáticas, los desarrolladores de bases de datos suelen ocultar la complejidad a través de los siguientes niveles:

Nivel físico : El nivel de abstracción más bajo describe cómo un sistema almacena realmente los datos. El nivel físico describe en detalle las estructuras de datos complejas de bajo nivel.
Nivel lógico : El siguiente nivel de abstracción describe qué datos almacena la base de datos y qué relaciones existen entre ellos. El nivel lógico describe, por lo tanto, toda la base de datos en términos de un pequeño número de estructuras relativamente simples. Si bien la implementación de las estructuras simples en el nivel lógico puede implicar estructuras complejas en el nivel físico, el usuario del nivel lógico no necesita ser consciente de esta complejidad. Esto se conoce como independencia física de los datos . Los administradores de bases de datos , quienes deben decidir qué información conservar en una base de datos, utilizan el nivel de abstracción lógico.
Nivel de vista : El nivel más alto de abstracción describe solo una parte de la base de datos completa. Aunque el nivel lógico utiliza estructuras más simples, la complejidad persiste debido a la variedad de información almacenada en una base de datos grande. Muchos usuarios de un sistema de base de datos no necesitan toda esta información; en cambio, solo necesitan acceder a una parte de la base de datos. El nivel de vista existe para simplificar su interacción con el sistema. El sistema puede proporcionar múltiples vistas para la misma base de datos.
Arquitectura por capas
La capacidad de proporcionar un diseño de diferentes niveles de abstracción puede
- simplificar considerablemente el diseño
- permitir que los diferentes actores trabajen eficazmente en varios niveles de abstracción.
- apoyar la portabilidad de los artefactos de software (idealmente basados en modelos)
Tanto el diseño de sistemas como el diseño de procesos de negocio pueden utilizar esto. Algunos procesos de diseño generan específicamente diseños que contienen varios niveles de abstracción.
La arquitectura por capas divide las funcionalidades de la aplicación en grupos apilados (capas). Es una técnica utilizada en el diseño de software, hardware y comunicaciones informáticas en la que los componentes del sistema o de la red se aíslan en capas, de modo que los cambios realizados en una capa no afecten a las demás.
Véase también
- Principio de abstracción (programación informática)
- Inversión de abstracción para un antipatrón de un peligro en la abstracción
- Tipo de datos abstracto para una descripción abstracta de un conjunto de datos.
- Algoritmo para una descripción abstracta de un procedimiento computacional
- Modelado de datos para estructurar los datos independientemente de los procesos que los utilizan.
- Descomposición (informática)
- Encapsulación para abstracciones que ocultan detalles de implementación
- La décima regla de Greenspun para un aforismo sobre un punto óptimo en el espacio de las abstracciones.
- Función de orden superior para la abstracción donde las funciones producen o consumen otras funciones.
- Abstracción Lambda para convertir un término en una función de alguna variable.
- Lista de abstracciones (informática)
- Refinamiento para lo opuesto a la abstracción en computación
- Indirección
- Número entero (informática)
- Heurística (informática)
Referencias
- ↑ Colburn, Timothy; Shute, Gary (5 de junio de 2007). "Abstracción en Ciencias de la Computación". Minds and Machines . 17 (2): 169– 184. doi : 10.1007/s11023-007-9061-7 . ISSN 0924-6495 . S2CID 5927969 .
- ↑ Kramer, Jeff (1 de abril de 2007). "¿Es la abstracción la clave de la computación?". Communications of the ACM . 50 (4): 36– 42. doi : 10.1145/1232743.1232745 . ISSN 0001-0782 . S2CID 12481509 .
- ↑ Ben-Ari, Mordechai (1 de marzo de 1998). "Constructivismo en la enseñanza de la informática" . Boletín ACM SIGCSE . 30 (1): 257, 257– 261. doi : 10.1145/274790.274308 . ISSN 0097-8418 .
- ↑ Liskov, Barbara (1 de mayo de 1988). «Discurso principal: abstracción y jerarquía de datos». Anexo a las actas sobre sistemas, lenguajes y aplicaciones de programación orientada a objetos (Anexo) - OOPSLA '87 . Vol. 23. ACM. págs. 17–34 . doi : 10.1145/62138.62141 . ISBN 0897912667. S2CID 14219043 .
{{cite book}}:|journal=ignorado ( ayuda ) - ↑ Guttag, John V. (18 de enero de 2013). Introducción a la computación y la programación con Python ( edición de primavera de 2013). Cambridge, Massachusetts: The MIT Press. ISBN 978-0262519632.
- ↑ Floridi, Luciano (septiembre de 2008). "El método de los niveles de abstracción" . Mentes y máquinas . 18 (3): 303–329 . doi : 10.1007/s11023-008-9113-7 . hdl : 2299/2998 . ISSN 0924-6495 . S2CID 7522925 .
- ↑ Spolsky, Joel (11 de noviembre de 2002). "La ley de las abstracciones con fugas" .
- ↑ "Métodos y clases abstractas" . Los tutoriales de Java . Oracle . Consultado el 4 de septiembre de 2014 .
- ↑ "Uso de una interfaz como tipo" . Los tutoriales de Java . Oracle . Consultado el 4 de septiembre de 2014 .
- ↑ Este artículo se basa en material tomado de Abstraction en el Free On-line Dictionary of Computing antes del 1 de noviembre de 2008 e incorporado bajo los términos de "relicencia" de la GFDL , versión 1.3 o posterior.
- ↑ E, Jian-Yu; Saldanha, Ian J.; Canner, Joseph; Schmid, Christopher H.; Le, Jimmy T.; Li, Tianjing (2020). "La adjudicación, más que la experiencia en la abstracción de datos, es más importante para reducir los errores en la abstracción de datos en las revisiones sistemáticas". Research Synthesis Methods . 11 (3): 354– 362. doi : 10.1002/jrsm.1396 . ISSN 1759-2879 . PMID 31955502. S2CID 210829764 .
- ↑ Luciano Floridi , Nivelismo y el método de abstracción IEG – Informe de investigación 22.11.04
Lecturas adicionales
- Abelson, Harold ; Sussman, Gerald Jay ; Sussman, Julie (25 de julio de 1996). Estructura e interpretación de programas informáticos (2.ª ed.). MIT Press. ISBN 978-0-262-01153-2Archivado del original el 26 de febrero de 2009. Consultado el 22 de junio de 2012 .
- Spolsky, Joel (11 de noviembre de 2002). "La ley de las abstracciones con fugas" . Joel sobre software .
- Abstracción/ocultación de información – Curso CS211, Universidad de Cornell.
- Roberts, Eric S. (1997). Abstracciones de programación en CA Segundo curso de Ciencias de la Computación .
- Palermo, Jeffrey (29 de julio de 2008). "La arquitectura de la cebolla" . Jeffrey Palermo .
- Vishkin, Uzi (enero de 2011). "Uso de abstracción simple para reinventar la computación para el paralelismo" . Communications of the ACM . 54 (1): 75– 85. doi : 10.1145/1866739.1866757 .
Enlaces externos
- SimArch es un ejemplo de arquitectura por capas para sistemas de simulación distribuidos.
- Gestión de datos
- Abstracción
- Ingeniería de software
- Programación orientada a objetos