Bienvenidos a un nuevo curso. Ahora estoy en el ciclo de grado superior: Desarrollo de aplicaciones multiplataforma. Y voy a ser parte del experimento de la formación dual. Estaré haciendo practicas durante un año, y a la vez finalizando la formación.

Deseadme suerte.

miércoles, 11 de febrero de 2015

Tema 8c Tipos abstractos de datos

0

(continuación de EDD con una visión desde Ada)

Concepto de abstracción
El concepto de abstracción en el proceso de compresión de un problema, lleva consigo el destacar los detalles importantes e ignorar los irrelevantes.
La abstracción es usada constantemente a la hora de programar.
Un claro ejemplo de ello es el uso de funciones y procedimientos. Ambos, ocultan los detalles sobre cómo se consigue el resultado que ofrecen y desde fuera son vistos como lo que hacen y no el cómo lo consiguen  hacer.
La abstracción siempre lleva asociada la ocultación de información.
Se separa el QUÉ del CÓMO
O dicho de otro modo, se separa la especificación (el qué) de la implementación (el cómo).

Abstracción de acciones
El uso de procedimientos y funciones nos `permite abstraernos de las instrucciones que realmente se están ejecutando para conseguir los resultados que obtenemos.
Tenemos una acción (en el caso de procedimientos) o valor (en el caso de funciones) virtual parametrizada.
Se está ocultando información: los datos locales y la secuencia de instrucciones del subprograma,
Recordemos, se separa la especificación (el que: hace la función o el procedimiento) de la implementación (el cómo: las instrucciones concretas que lo hacen).

¿Abstracción de datos?
¿Podemos hacer lo mismo que hacemos con las acciones de un programa, pero aplicado a los datos?
Es decir, ¿Podemos separar especificación de implementación?
Claro, jde eso va este tema. Si no, ¿para qué tanto rollo?
Al igual que para acciones tenemos los procedimientos, para expresiones las funciones, para datos tenemos los Tipos Abstractos de Datos.

Tipo Abstracto de Dato (TAD)
Un TAD es una colección de valores y de operaciones definidos mediante una especificación independiente de cualquier representación.
La programación con TADs requiere dos pasos:
- Definición del tipo: Establecer los valores que puede tomar el tipo y las operaciones necesarias para manipular los valores y especificar su interfaz. Esto tiene dos partes:
     * Parte sintáctica: cómo se llama la operación, si es una función o un procedimiento, qué parámetros tiene, en qué orden y de que tipo.
     * Parte semántica: qué hace la operación con los parámetros de entrada, cómo modifica los de salida y qué devuelve (si se trata de una función). En otras palabras, para qué sirve esa operación y cuál es su comportamiento.
- implementación del tipo: Elegir la representación de los valores e implementar las operaciones.

Encapsulación
El concepto fundamental subyacente bajo la programación con TADs es la encapsulación.
La encapsulación consiste básicamente en:
- La privacidad de la representación (el usuario no conoce los detalles del tipo)
- La protección del tipo (el usuario sólo puede utilizar las operaciones previstas).

Diseño modular
La programación en gran escala exige la participación del código en módulos.
Un módulo es una unidad del programa que puede ser desarrollada independientemente del resto.
La descomposición  en módulos debe cumplir unos requisitos:
- Que cada módulo tenga una conexión mínima con el resto: la interfaz.
- Que la mayor parte de los cambios del programa afecten sólo a un número pequeño de módulos.
- Que el tamaño de cada módulo sea adecuado (si es muy grande es dificil hacer cambios, si es muy pequeño es costoso por los trabajos adicionales de especificación, documentación, control de versiones, ...).
Un TAD puede encapsularse en un módulo:
- La interfaz es reducida: El nombre del tipo y los encabezamientos de las operaciones.
- Puede cambiarse la implementación independientemente (para mejorarla por ejemplo), siempre y cuando mantengamos la interfaz.
- El tamaño del módulo suele ser suficientemente grande (implementación de las operaciones).

TADs como base del diseño modular
El uso de procedimientos y funciones (diseño descendente)  facilita la programación a pequeña escala (programas pequeños).
Sin embargo esto es insuficiente para la programación a gran escala. Es necesario utilizar el diseño modular.
programas = datos + algoritmos
programas = datos + (algoritmos de datos + algoritmos de control)
programas = (datos + algoritmos de datos) + algoritmos de control
programas = TADs + algoritmos de control
Hasta ahora conocíamos la forma de abstraer algoritmos (mediante funciones y procedimientos que podemos agrupar en módulos). Ahora conocemos la forma de abstraer datos (mediantes TADs que también pueden constituir módulos).


0 comentarios:

Publicar un comentario

Etiquetas actuales

BD (67) DEF (64) PROG (64) SQL (44) Java (29) PRACTICAS (20) php (18) DI (16) PRESTASHOP (16) PROGRAMACIÓN WEB (16) HTML (13) SGE (12) ERP (9) CONSULTAS (8) css (8) Linux (5) XML (5) Android (4) PDM (4) C (3) NetBeans (3) PSP (3) SMARTY (3) comandos (3) HOOK (2) POST (2) XSD (2) cURL (2) JS (1) MEDIA-QUERYS (1) PDO (1) RESPONSIVE (1) TPL (1) TRADUCCIÓN (1) app_inventor (1)

Todas las etiquetas

EJER (78) BD (67) DEF (64) PROG (64) SQL (44) c# (40) Programación (39) Ficheros (36) Java (29) bases de datos (21) PRACTICAS (20) lenguajes de marcas (19) AD (18) Entorno de desarrollo (18) php (18) PROCEDIMIENTOS (17) DI (16) FORM (16) PRESTASHOP (16) PROGRAMACIÓN WEB (16) lenguaje C (16) E/R (14) HTML (13) SGE (12) Sistemas informáticos (10) ERP (9) CONSULTAS (8) TRANSACCIONES (8) TRIGGER (8) VISUAL BASIC (8) css (8) FUNCIONES (7) html5 (6) Ada (5) EXAMEN (5) Linux (5) XML (5) estructuras (5) Android (4) DISEÑO (4) INTERFAZ (4) LOG (4) OpenBravo (4) PDM (4) ACTUALIZAR (3) C (3) DIAGRAMA (3) Directorios (3) NEW (3) NOR (3) NetBeans (3) OLD (3) PSP (3) SMARTY (3) comandos (3) css3 (3) AISLAMIENTOS (2) C++ (2) CONTROLERRORES (2) ELIMINAR (2) HOOK (2) INSERTAR (2) INST (2) MULTITABLA (2) POST (2) RECURSIVIDAD (2) SUBCONSULTAS (2) VISTAS (2) XSD (2) cURL (2) punteros (2) AJENA (1) BLOQUEOS (1) Byte (1) CREACION (1) CRM (1) Configuración (1) Controles (1) Datos (1) GOTFOCUS (1) IMAGENES (1) INDICES (1) JS (1) Lenght (1) MEDIA-QUERYS (1) Mingw (1) MonoDeveloped (1) OPTIMISTA (1) PDO (1) PESIMISTA (1) RESPONSIVE (1) SPEAK (1) Scanner (1) Serializacion (1) Streams (1) System (1) TPL (1) TRADUCCIÓN (1) USUARIOS (1) UseSystemPasswordChar (1) app_inventor (1) char (1) examenes (1) libreoffice (1) make (1) redes (1)