Clase #2
31/03
Especificación de un t.a.d.
La especificación de un tad consta de 2 partes: la descripción
matemática de una colección de objetos, que será representado por
una estructura de datos y un conjunto de operaciones definidas para
la estructura definida.
Vamos a decir que 2 tad son diferentes si tienen el mismo modelo
matemático, pero distintas operaciones, ya que lo apropiado de una
realización depende en gran medida de las operaciones que se van a
realizar
Ejemplo de especificación del Tad conjunto de letras mayúsculas
Este tad lo vamos a usar para representar los conjuntos de letras
mayúsculas asi como las operaciones definidas sobre conjuntos.
Definimos el modelo matemático y las operaciones modelo
matemático: Un conjunto se define como una colección de elementos.
Todos los elementos de un conjunto son distintos , lo que significa que
ningún conjunto puede tener 2 copias del mismo elemento. Este
modelo matemático debe ser representado por uno o mas tipos de
datos.
Operaciones: existen muchas operaciones que se pueden definir
sobre conjuntos. De acuerdo a la naturaleza del problema a resolver
se deben elegir algunas de ellas:
Inicia(C), genera un conjunto c vacio
Incerta (x,C) agrega el elemento x al conjunto C
Elimina(x,C) el elemento x del conjunto C
Pertenece(x,C) verifica si el elemento x pertenece al conjunto C
Devuelve V o F union_cong(C1,C2,C). Retorna un nuevo
conjunto C que contiene los elementos de C1 y C2
Inter_cong(C1,C2,C)retorna un nuevo conjunto C que contiene
solo los elementos que pertenecen tanto a C1 Y C2
Difer_cong(C1,C2,C)retorna un nuevo conjunto C que contiene
solo los elementos que pertenecen a C1 y no a C2
Igual(C1,C2) retorna v o f según los conjuntos ingresados
tengan los mismos elementos o no
Mostrar(C) muestra los elementos del conjunto C
Tanto la estructura definida del modelo matemático como los
prototipos para cada una de las operaciones deben estar definidos en
un archivo de cabecera (.h) de la biblioteca, como se vera mas
adelante. A continuación, vemos el código de este archivo de
cabecera
Ventajas del uso del tad
Los tad proporcionas ventajas al programador tales como:
A. Permite una mejor conceptualización y modelado del mundo
real. Mejora la representación y facilita la comprensión. Clarifica
los objetos basados en estructuras y comportamientos comunes
B. Mejora la robustes del sistema los tad permiten la
comprobación de tipos de datos para evitar errores en tiempo
de ejecución.
C. Mejora el rendimiento ya que permite la optimización de tiempo
de compilación
D. Separa la implementación de la especificación permite la
modificación y mejora de la implementación, sin afectar la
interfaz pública del tad, es decir las rutinas que lo usan
E. Permiten la extensibilidad del sistema. Los componentes de
software reutilizables son más fáciles de crear y mantener
F. Recoge mejor la semántica del tipo, los tad agrupan o localizan
las operaciones y la representación de atributos.
Abstracción
La abstracción es la clave para diseñar un buen software, un
programa no es mas que una disposición abstracta de un
procedimiento o fenómeno que existe o sucede en el mundo real.
Los programadores hemos tenido que luchar con el problema de la
complejidad durante mucho tiempo. Para ello hemos desarrollado una
técnica excepcionalmente potente para tratar la complejidad:
abstraernos de ella.
Como somos incapaces de dominar en su totalidad a los objetos
complejos, ignoramos los detalles “no esenciales”, tratando en su
lugar con el modelo ideal del objeto y centrándonos solo en el estudio
de sus aspectos esenciales para resolver un problema determinado.
Una buena abstracción elimina todos los detalles poco importantes y
nos permite enfocarnos y concentrarnos en los detalles importantes.
En conclusión, la abstracción es la capacidad para encapsular y aislar
la información del diseño y ejecución.
Con mucha frecuencia se utilizan los términos tda y abstracción de
datos de manera equivalente y esto es debidos a la similitud e
interdependencia de ambos sin embargo es importante definir por
separado los 2 conceptos.
La abstracción de datos consiste en ocultar las características de un
objeto y obviarlas de manera que solamente se utiliza el nombre del
objeto en nuestro programa. Esto es similar a una situación de la vida
cotidiana. Cuando menciona la palabra “perro” los demás ya saben
que es un perro. De manera que se abstraen las características de
todos los perros en un solo termino al cual se llamó” perro”. A esto se
le llama abstracción y es un concepto muy útil en programación ya
que un usuario no necesita mencionar todas las características y
funciones de un objeto cada vez que este se utilice, sino que son
declaradas por aparte en el programa y simplemente se utiliza el
termino abstracto “perro”.
En el punto anterior perro es un tad y todo el proceso de definirlo
implementarlo y mencionarlo es lo que se llama abstracción de datos.
A continuación, se puede ver un ejemplo de como fue el proceso de
abstracción en la historia del software:
1° de abstracción: los nemotécnicos del lenguaje ensamblador eran
instalaciones diseñadas para evitar que los programadores tuvieran
que recordar las secuencias de bits que componen la secuencia de un
programa.
2° de abstracción: El siguiente nivel de abstracción se consigue
agrupando instrucciones primitivas para formar macro instrucciones.
Tercer nivel de abstracción aparece los lenguajes de programación de
alto nivel, estos permitieron a los programadores distanciarse de las
arquitecturas especificas de una maquina dada. Cada instrucción en
un lenguaje de alto nivel puede invocar varias instrucciones de
máquina, dependiendo de la maquina especifica donde se copila el
programa.
3° Esta abstracción permitía a los programadores escribir software
para propósito genérico sin preocuparse por que maquina ejecutaría
el programa.
4° Secuencia de sentencias de lenguaje de alto nivel se pueden
agrupar en funciones o procedimientos y ser invocados por una
sentencia. La programación estructurada alienta el uso de
abstracciones de control tales como bucles o sentencias ifdem que se
an incorporado en lenguajes de alto nivel. Como se ve, el proceso de
abstracción fue evolucionando desde la aparición de los primeros
lenguajes de programación. El método mas idóneo para controlar la
complejidad fue aumentar los niveles de abstracción.
Los tipos q se pueden encontrar en un programa son:
A. Abstracción funcional: Crear módulos e invocarlos mediante un
nombre donde se destaca que hace el modulo y se ignora como
lo hace. El usuario solo necesita conocer la especificación de la
abstracción (el que) y puede ignorar el resto de los detalles (el
como)
B. Abstracción de datos: *tipos de datos: proporcionados por la
declaración de alto nivel. La representación usada es invisible al
programador, al cual solo se le permite ver las operaciones
predefinidas para cada tipo. Tipos definidos por el programador:
que posibilitan la definición de valores de datos mas cercano al
problema que se pretende resolver. Tad: para la definición y
representación de tipos de datos (estructura de datos más
operaciones), juntos por sus propiedades. Objetos: son tad a los
que se les añade propiedades de reutilización y de herencia de
código
Encapsulamiento