Abstracción (Ciencias de la computación)

L ' Abstracción-en Ciencias de la computación, es la aplicación del método lógico de abstracción en la estructuración de la descripción de sistemas informáticos complejos para facilitar el diseño y mantenimiento o la misma comprensión.

La práctica consiste en presentar el sistema, por ejemplo, un código fuente o un intercambio de transmisiones de datos, de una manera reducida a solo detalles considerados esenciales para el interés específico, por ejemplo, agrupando el código en una función o formalizando un protocolo de comunicación. Indica cuánto código escrito en un lenguaje de programación se separa de las instrucciones del lenguaje máquina que le corresponderán después de la operación de compilación. Las instrucciones escritas en Java, por ejemplo, están mucho más cerca del lenguaje legible por humanos que del lenguaje legible por máquinas (alto nivel de abstracción). Por el contrario, las instrucciones escritas en ensamblados son bastante cercanas (pero no iguales) a las instrucciones en formato legible por máquina (bajo nivel de abstracción). La siguiente definición de abstracción ayuda a entender cómo se aplica este término a la informática: el concepto se originó por analogía con la abstracción en matemáticas. La técnica matemática de la abstracción comienza con definiciones matemáticas; por ejemplo, en Ciencias de la Computación y matemáticas los números son conceptos en lenguajes de programación. Los detalles de la implementación dependen del hardware y el software, pero no es una restricción, ya que el concepto de número en Ciencias de la Computación todavía se basa en el concepto matemático. En la programación, la abstracción se puede aplicar a estructuras de control o estructuras de datos. El hecho de que los programadores utilicen abstracciones cuando sea posible para evitar duplicaciones (generalmente de código) se conoce como el principio de abstracción. La informática opera principalmente independientemente del mundo real: el hardware implementa un modelo de computación que es intercambiable con otros, el software está estructurado en arquitecturas para permitir al hombre crear sistemas enormes que se centran en unos pocos problemas a la vez. Estas arquitecturas están hechas por elecciones precisas de abstracciones. Una forma importante de abstracción en la informática es la abstracción del lenguaje: se desarrollan nuevos lenguajes artificiales para expresar aspectos específicos de un sistema. Los lenguajes de modelado ayudan en la organización. Los lenguajes de programación se pueden procesar con un ordenador. Un ejemplo de este proceso de abstracción es el desarrollo de lenguajes de programación del lenguaje máquina, al lenguaje ensamblador y a lenguajes de alto nivel. Cada una de estas etapas se puede utilizar como base para la siguiente etapa. En un lenguaje de programación, algunas funciones permiten al programador crear nuevas abstracciones. Estos incluyen subrutinas, módulos y componentes de software. Algunas abstracciones intentan limitar el ancho de los conceptos que un programador necesita ocultando completamente las abstracciones sobre las que a su vez se construyen. Joel Spolsky, sin embargo, afirma que ninguna abstracción puede ocultar completamente todos los detalles: de todos modos, esto no niega la utilidad de la abstracción. Algunas abstracciones están designadas para interactuar con otras, por ejemplo, un lenguaje de programación podría contener una interfaz de función extranjera (FFI) para hacer llamadas a lenguajes de bajo nivel.

Diferentes lenguajes de programación ofrecen diferentes tipos de abstracción, dependiendo de las aplicaciones destinadas al lenguaje. Por ejemplo: los analistas han desarrollado varios métodos para especificar formalmente los sistemas de software. Algunos métodos conocidos incluyen: los lenguajes de especificación a menudo se basan en un tipo de abstracción u otro, ya que las especificaciones se definen típicamente al comienzo de un proyecto (a un nivel más abstracto). El lenguaje UML, por ejemplo, le permite definir clases abstractas, que permanecen abstractas durante la arquitectura y la fase de especificación del proyecto.

Los lenguajes de programación permiten abstracciones de estructuras de control como una de sus principales tareas. Las computadoras realizan operaciones a un nivel muy bajo, como mover algunos bits de una ubicación de memoria a otra, produciendo la suma de dos secuencias de bits. Los lenguajes de programación permiten que esto se haga a un nivel superior. Considere por ejemplo este código escrito en Pascal: "a:= (1 + 2) * 5;" . Para un hombre, esto parece un cálculo simple y obvio (" uno más dos es tres, porque cinco es quince ") . Sin embargo, los pasos de bajo nivel necesarios para llegar a esta conclusión, devolver el valor "15" y asignarlo a la variable "a" , son más complejos. Los valores deben convertirse en representación binaria (un proceso más complicado de lo que se podría pensar) y los cálculos deben descomponerse (por el compilador o intérprete) en sentencias ensambladoras (que son mucho menos intuitivas para el programador). Al final, asignar el valor resultante "15" a la variable llamada "a" , para que pueda usarse más tarde, implica otros pasos "detrás de escena" , como buscar la ubicación de la memoria donde poner el valor "15" , y así sucesivamente. Sin este tipo de abstracción, un programador tendría que especificar todos los pasos de "registro/nivel binario" incluso solo para sumar o multiplicar dos números y asignar el resultado a una variable. Este tipo de tareas tiene dos graves consecuencias negativas: la programación estructurada implica dividir tareas complejas de un programa en piezas más pequeñas con el objetivo de simplificarlas y evitar "efectos secundarios" . En un programa simple, esto podría servir para asegurarse de que un bucle tiene un único o más obvios puntos de salida y, cuando sea posible, para asegurarse de que las funciones y procedimientos tienen solo uno. En un sistema más grande, sin embargo, podría implicar la división de tareas complejas en muchos módulos diferentes. La programación orientada a objetos (oop) ha adoptado y ampliado este concepto.

Las estructuras de datos abstractas refuerzan una clara separación entre las propiedades abstractas de un tipo de datos y los detalles concretos de su implementación. Las propiedades abstractas son aquellas que son visibles para quien hace uso del tipo de datos - la interfaz de tipo de datos - mientras que la implementación concreta se mantiene completamente privada, y por supuesto puede cambiar para implementar mejoras de eficiencia con el tiempo. La idea es que estos cambios no deben tener ningún impacto, y no deben crear diferencias en el aspecto abstracto. Por ejemplo, puede definir un tipo de datos abstracto llamado tabla de búsqueda, que asocia de forma única las claves con los valores, y en el que puede obtener el valor deseado escribiendo la clave correspondiente. Esta tabla de búsqueda se puede implementar de varias maneras, por ejemplo con una tabla hash. Los lenguajes que implementan estructuras de datos abstractas incluyen Ada y Modula-2.

En la teoría de la Programación Orientada a Objetos, la abstracción implica la facilidad de definir objetos que representan "actores" que pueden realizar trabajo, informar y cambiar su estado, y comunicarse con otros objetos en el sistema. El término encapsulación se refiere a ocultar detalles de estado, pero extender el concepto de tipo de datos de los primeros lenguajes de programación, y estandarizar la forma en que interactúan los diferentes tipos de datos, es el comienzo de la abstracción. Hablamos de polimorfismo cuando la abstracción permite reemplazar objetos de diferentes tipos. Hablamos de herencia cuando se estructuran varios tipos o clases para simplificar un conjunto complejo de relaciones. Varios lenguajes de programación orientados a objetos ofrecen facilidades similares para la abstracción, para apoyar todos juntos una estrategia general de polimorfismo, que implica reemplazar un tipo a uno que tiene el mismo o similar papel. Common Lisp Object System (también conocido como CLOS) y self tienen un gran uso del polimorfismo. Los objetos y funciones individuales se abstraen de manera más flexible para adaptarse mejor a la herencia funcional compartida de Lisp. Aunque algunos lenguajes ofrecen estrategias alternativas para lograr la misma abstracción, básicamente no cambian la necesidad de soportar sustantivos abstractos en código: toda la programación se basa en la capacidad de abstraer verbos, funciones, estructuras de datos, sustantivos y procesos. Considere, por ejemplo, un fragmento de código Java para representar algunos "animales" comunes de la granja a un nivel de abstracción como para simular los aspectos más simples de su hambre y nutrición. Definimos una clase "Pet" para representar tanto los estados del animal como sus funciones: con la definición anterior, podría crear objetos de Tipo "Animal" y llamar a los métodos de esta manera: en el ejemplo anterior, la clase Animal es una abstracción utilizada en lugar de un animal real, "EssereVivente es una abstracción adicional (en este caso una generalización) de Animal. Si la petición es para una jerarquía, el más diferenciado de los animales-para diferenciar, por ejemplo, los que producen leche de los que no producen nada, y no la carne después de la vida se termina puede ser un nivel intermedio de abstracción, como" leche de mascota " (vaca o cabra) que comen alimentos para producir buena leche, y "animales" (cerdos y ganado) comen alimentos para dar la mejor calidad de la carne. Tal abstracción eliminaría la necesidad de especificar el tipo de alimento, para centrarse en cambio en la planificación de la nutrición. Las dos clases podrían ser enlazadas usando herencia o podrían ser por sí mismas, y el programador podría definir diversos grados de polimorfismo entre los dos tipos. Estas facilidades tienden a variar drásticamente entre idiomas, pero en general lo que uno puede hacer se puede hacer con todos los demás. Las decisiones sobre qué hacer abstracto y qué no se han convertido en la mayor preocupación del diseño orientado a objetos y el análisis de dominio: lo que realmente determina las relaciones relevantes en el mundo real es lo que concierne al análisis orientado a objetos. Por lo general, para determinar las abstracciones apropiadas, uno debe tomar pequeñas decisiones sobre el campo, determinar qué otros sistemas deben cooperar y, finalmente, hacer un análisis detallado orientado a objetos. En nuestro ejemplo, el dominio es el establo, y los cerdos y las vacas, y los lugares son las restricciones hereditarias, el análisis detallado es que los programadores deben tener la flexibilidad para alimentar a los animales, y no hay razón para ingresar el tipo de alimento dentro de la propia clase, y el diseño es un Animal de clase único y simple donde ingresaron los cerdos y las vacas con las mismas funciones. La decisión de implementar animales lecheros cambiaría el análisis detallado, pero el análisis de dominio y herencia no cambiaría, por lo que esto está completamente bajo el control del programador, y nos referimos a la abstracción en la programación de objetos de manera diferente a la abstracción en dominios o Análisis de herencia.

Cuando se habla de semántica de lenguajes de programación, métodos formales o interpretaciones abstractas, Abstracción se refiere a una definición menos detallada, pero segura, de los comportamientos de un programa dado. Por ejemplo, solo puede observar el resultado final del programa, a menos que considere todos los pasos intermedios de la ejecución. La abstracción se define para un modelo de ejecución concreto (más preciso). La abstracción podría ser exacta o muy fiel a una propiedad si responde a las preguntas sobre la propiedad del modelo abstracto igualmente bien. Por ejemplo, si queremos saber cuál es el resultado de una expresión matemática que solo implica el uso de enteros, solo necesitamos usar operaciones módulo n (una forma familiar de esta abstracción es expulsar nueves). Las abstracciones, sin embargo, aunque no sean exactas, deben ser buenas. De hecho, puede ser posible obtener buenas respuestas de ellos, incluso si la abstracción simplemente puede producir un resultado de indecisión. Por ejemplo, podríamos abstraer a los estudiantes de una clase, según su edad máxima y mínima; si se les pregunta si una persona pertenece a esa clase, simplemente se podría comparar la edad de esa persona con el máximo y mínimo de esa clase. Si su edad no cae dentro de ese rango, seguramente se puede responder que esa persona no pertenece a esa clase. Si lo haces, solo puedes responder "no lo sé" . El nivel de abstracción implementado en un lenguaje de programación puede afectar a toda su usabilidad. La estructura de las dimensiones cognitivas incluye el concepto de gradiente de abstracción en un formalismo. Esta estructura permite al diseñador de un lenguaje de programación estudiar los intercambios entre la abstracción y otras características de diseño, y cómo los cambios en la abstracción afectan la usabilidad del lenguaje. Las abstracciones pueden resultar útiles cuando se trabaja con programas, ya que las propiedades particulares de estos son esencialmente Indecidibles. Como resultado, los métodos automáticos de obtener información sobre el comportamiento de los programas pueden terminar repentinamente (sin dar un resultado o simplemente bloquearse) o pueden dar información falsa. La abstracción es el concepto principal de la interpretación abstracta. La verificación de modelos generalmente se realiza en versiones abstractas de los sistemas estudiados.

La computadora tiene comúnmente niveles (o, menos comúnmente, capas) de abstracción, donde cada nivel representa un modelo diferente de la misma información o el proceso, pero utiliza un sistema de expresión que involucra un conjunto diferente de objetos y composiciones que se aplican solo a un dominio en particular. Los niveles más altos de abstracción tienden a construirse sobre algo relativamente concreto, mientras que los niveles más bajos tienden a dar progresivamente una representación más "granular" . Por ejemplo, puertos construidos utilizando circuitos electrónicos, lenguaje binario de máquina, lenguajes de programación basados en lenguajes binarios, aplicaciones y sistemas operativos basados en lenguajes de programación. Cada capa está incrustada, pero no determinada, por la capa debajo de ella, por lo que es un lenguaje de descripción que es en un sentido autónomo. Debido a que muchos usuarios de sistemas de bases de datos no están muy familiarizados con las estructuras de datos, los desarrolladores de bases de datos a menudo ocultan complejidades a través de las siguientes capas: capa física: el nivel más bajo de abstracción describe cómo un sistema almacena datos. La capa física describe las estructuras de datos de bajo nivel en detalle. Nivel lógico: el nivel superior de abstracción describe qué datos almacena la base de datos y qué relaciones hay entre estos datos. La capa lógica luego describe una base de datos completa en términos de números pequeños y estructuras relativamente simples. Aunque la implementación de estructuras simples a nivel lógico puede involucrar estructuras complejas a nivel físico, los usuarios de los niveles lógicos no necesitan preocuparse por estas complejidades. Los administradores de bases de datos, que tienen que decidir qué información mantener en una base de datos, utilizan la capa de abstracción lógica. Vistas de nivel A: el nivel más alto de abstracción describe solo una parte de toda la base de datos. Aunque la capa lógica utiliza una estructura más simple, la complejidad permanece debido a la variedad de información almacenada en una gran base de datos. Algunos usuarios de sistemas de bases de datos no necesitan toda esta información; en cambio, solo necesitan acceder a una parte de la base de datos. El nivel de abstracción de las vistas existe para simplificar su interacción con el sistema. El sistema también podría proporcionar múltiples vistas para la misma base de datos. La capacidad de proporcionar un diseño de diferentes niveles de abstracción puede: la arquitectura por capas divide las tareas de una aplicación en varios grupos. Es una técnica utilizada en el diseño de software, hardware y comunicaciones en la que los sistemas o componentes de la red están aislados en capas, de modo que se pueden realizar cambios en una sola capa sin tener que afectar también a las demás.

Sin fuentes de programación

Conceptos de programación

Gestión de datos

Volver atrás

Backtracking es una técnica para encontrar soluciones a problemas donde las restricciones deben ser satisfechas. Esta técnica enumera todas las soluciones posib...

Paradigma de programación

En Ciencias de la computación, un paradigma de programación es un estilo fundamental de programación, que es un conjunto de herramientas conceptuales proporcion...

Inteligencia artificial

Algoritmos de búsqueda

Paradigmas de programación

Esta página se basa en el artículo de Wikipedia: Fuente, Autores, Licencia Creative Commons Reconocimiento-CompartirIgual.
This page is based on the Wikipedia article: Source, Authors, Creative Commons Attribution-ShareAlike License.
contactos
Política de privacidad , Descargos de responsabilidad