PDF de programación - Abstracción en Programación

Imágen de pdf Abstracción en Programación

Abstracción en Programacióngráfica de visualizaciones

Publicado el 27 de Abril del 2018
3.288 visualizaciones desde el 27 de Abril del 2018
397,6 KB
45 paginas
Creado hace 23a (20/04/2001)
Abstracción en Programación

Departamento de Ciencias de la Computación e I.A. ETS Ingeniería Informática
Universidad de Granada. 18071 Granada. Spain. Email: [email protected]

A. GARRIDO

Resumen

En este documento se pretende presentar brevemente los conceptos fundamentales de la abstrac-
ción, aplicados al desarrollo de programas. El objetivo es que el lector comprenda su importancia
capital si se quieren obtener buenos programas. Se muestra como la evolución de las herramientas de
programación ha sido acompañada de un creciente uso de este conjunto de conceptos, lo que confir-
ma como una aproximación efectiva para enfrentarse a problemas de gran complejidad. Además, se
propondrán distintas formas de aplicar estas ideas en programación, haciendo especial énfasis en los
tipos de datos abstractos, como un medio eficaz para facilitar esta labor.

Se recomienda que el lector esté introducido en el lenguaje de programación C. A lo largo de la
lección, justificado por el progresivo aumento de los mecanismos de abstracción que se presentan,
se irán presentando características del lenguaje C++, que integra muchos de los conceptos que se
discuten.

1 Introducción.

La abstracción es un proceso mental que consiste en realzar los detalles relevantes, es decir, los que nos
interesan en un momento sobre el objeto de estudio, mientras se ignoran los detalles irrelevantes. Esto
nos lleva a una simplificación del problema, ya que

• la cantidad de información que es necesario manejar en un momento dado disminuye y
• podemos tratar cosas diferentes como si fueran la misma

Este proceso de la mente humana es fundamental para comprender y manejar complejos sistemas que
contienen multiples detalles y relaciones. Por ello, y dada la complejidad de los programas actuales, la
evolución de los paradigmas y lenguajes de programación marca un uso creciente de la abstracción.

Cuando es un programa es pequeño (por ej. cientos de líneas de código), se puede obtener una solución
basada en un único componente, en el que se pueden encontrar todos los detalles de ésta. Sin embargo,
cuando el tamaño del problema aumenta (por ej. miles o cientos de miles de líneas de código), el ser
humano es incapaz de manejar tal cantidad de detalles y es necesaria una descomposición en pequeñas
partes independientes, que denominaremos módulos y que unidos constituyen la solución buscada. En
esta lección, se presenta una metodología para la descomposición y construcción de módulos basada
en la abstracción, consiguiendo con ello mejorar la calidad de los resultados y facilitar la construcción,
modificación y mantenimiento del software.

1.1 Programación modular.

La programación modular constituye una metodología eficaz para abordar problemas de cualquier
tamaño y la abstracción es una forma de llevarla a cabo. Sin embargo, es necesario considerar detenida-
mente las propiedades que deben cumplir para que la descomposición sea útil:

1. Las conexiones de cada módulo con el resto del programa deben ser mínimas, tanto en número

como en complejidad, para obtener módulos más independientes.

2. Cada módulo lleva a cabo una tarea bien definida en el nivel de detalle correspondiente, para

facilitar su solución y la independencia con el resto del programa.

1

3. La solución de cada subproblema debe ser general, para obtener módulos que, siendo igualmente
útiles para el problema a resolver, puedan adaptarse a futuras modificaciones o incluso para otros
problemas.

4. La solución de los subproblemas se puede combinar para resolver el problema original.

Una correcta aplicación de esta metodología, facilitará en gran medida la resolución del problema.
Concretamente podemos destacar varios aspectos que ponen de relieve los beneficios que podemos obtener:
• Facilita el desarrollo de programa. La independencia entre las distintas partes del problema, permite
que varios programadores puedan trabajar en equipo para resolverlo, minimizando las labores de
coordinación necesarias para que se obtenga una solución correcta.

• Facilita el mantenimiento:

– Facilita los cambios y mejoras. Este tipo de descomposición permite que la mayor parte de los

cambios y mejoras se apliquen sobre un módulo o un número pequeño de ellos.

– Facilita la prueba y depurado del software. El conjunto de tests para probar el software es más
sencillo pues se puede analizar cada parte de manera independiente. Además, la detección y
eliminación de errores se limitan a analizar un pequeño trozo del programa.
• Facilita la productividad evitando que un problema se resuelva múltiples veces:

– Facilita la eliminación de redundacias. Es más fácil identificar los subproblemas que deben

resolverse en distintas partes del programa.

– Facilita la reutilización del software. El resultado no es una solución a un problema sino
un conjunto de soluciones a múltiples subproblemas que se combinan en el programa que
deseamos. Alguna de estas soluciones puede ser necesaria para resolver otros problemas.

1.2 Abstracción y ocultamiento de información.

La abstracción permite estudiar complejos sistemas usando un método jerárquico en sucesivos niveles
de detalle. Así, un sistema se puede descomponer en distintos módulos. Dado que nuestra intención
es manejar en un instante el menor número de características , cada módulo deberá exportar la menor
cantidad de información siempre que con ello permita al resto de los módulos realizar su labor de forma
sencilla y correcta.

Esto nos lleva a diferenciar dos partes muy importantes cuando se construye un módulo:

1. Parte pública. Todos los aspectos que son visibles para los demás módulos. El objetivo es que

sean pocos. Es la única información necesaria y disponible para un correcto uso del módulo.

2. Parte privada. Todos los detalles que no son visibles para los demás módulos. Normalmente serán

numerosos, pero no es necesario conocerlos para utilizar el módulo.

Por tanto, para que la descomposición sea útil, es necesario un proceso de ocultamiento de infor-
mación de forma que el razonamiento, en la construcción del sistema a partir de sus módulos, utilice el
mínimo de características relevantes (parte pública) ocultando las irrelevantes (parte privada). Nótese que
cuanto mayor es el grado de ocultamiento de información, menor será la información que tendremos que
manejar (se disminuye la complejidad a causa de haber minimizado la interdependencia entre módulos).
Es importante destacar que este ocultamiento no hace referencia a que el usuario del módulo no debe
conocer ningún detalle interno por motivos relacionados con la privacidad del código, los derechos de copia
o la explotación comercial1. Cuando usamos el término de ocultamiento en este documento nos referimos
a la necesidad de que el usuario del módulo utilice el mínimo de características para el desarrollo de sus
programas. Nuestras aportaciones para que le sea más difícil utilizar los detalles internos facilitarán un
uso correcto del software.

1Aunque en la práctica, es la forma de proteger el programa fuente ofreciendo al usuario todas las posibilidades sin que

conozca los detalles del desarrollo.

A. Garrido

página 2

1.3 Documentación.

La naturaleza abstracta de una eficiente construcción de módulos implica que el programador debe

crear dos documentos diferenciados:

1. Especificación. Corresponde al documento que presenta las características sintácticas y semánticas
que describen la parte pública. Éste debiera ser suficiente (no necesitamos más información para
poder usar todas las posibilidades del módulo) e independiente de los detalles internos de construc-
ción de éste.

2. Implementación. Corresponde al documento que presenta las características internas del módulo.
Es importante destacar que el software es algo dinámico, por tanto, es necesario mantener un
sistema de documentación que permita el mantenimiento, tanto en lo que respecta a diseño como
implementación.

2 Abstracción funcional.

El primer tipo de abstracción que históricamente aparece es la funcional o procedimental que
surge a partir de separar el propósito de una función de su implementación. Se considera el qué de
una función, obviando el cómo se implementa esa función. Así, los algoritmos complejos que requieren
muchas operaciones se engloban en una sóla, eliminando todos los detalles de cómo se implementan. En
la abstracción funcional o procedural, abstraemos un conjunto preciso de operaciones (detalles de cómo
se realiza) como una única operación en forma de función o procedimiento.

Por ejemplo, si en el programa que se desarrolla es necesario calcular el índice del elemento máximo
que se almacena en un vector, podemos olvidar todos los detalles relativos a cómo se debe calcular, las
variables que se deben usar, etc (detalles irrelevantes) y considerar que disponemos de una operación
IndiceMaximo que se ocupa de resolverlo (detalles relevantes). Así, el código correspondiente podría ser
el presentado en la tabla 1.

Operación

int IndiceMaximo (const int vector[], const int nelem)
{

Detalles

int i,max;

max=0;
for (i=1;i<nelem;i++)

if (vector[max]<vector[i])

max= i;

return max;

}

Tabla 1: Operacion IndiceMaximo

2.1 Especificación.

La especificación de una abstracción funcional corresponde a un documento que nos permite conocer
los aspectos sintácticos y semánticos necesarios para poder usar la función o procedimiento, sin necesidad
de conocer los detalles (parte privada) de su construcción.

La parte sintáctica se refiere a la forma correcta de escribir una llamada a la función. Para ellos será
necesario establecer cual es el nombre así como el número, orden y tipo de entradas/salidas. La forma
más simple, y por tanto más habitual, de realizarlo es utilizando directamente la sintaxis del lenguaje de
programación. En nues
  • Links de descarga
http://lwp-l.com/pdf10698

Comentarios de: Abstracción en Programación (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad