18
TIPOS DE DATOS ABSTRACTOS ESTRUCTURAS DE DATOS

tipos de datos abstractos

  • Upload
    vane

  • View
    173

  • Download
    0

Embed Size (px)

Citation preview

TIPOS DE DATOS ABSTRACTOS

ESTRUCTURAS DE DATOS

OBJETIVOS Determinar las posibles entidades a participar en

un problema

Identificar las características y comportamientos

importantes de cada entidad

Abstraer la definición y comportamiento de una

entidad para crear un nuevo TDA

Aplicar un lenguaje formal parar definir un TDA

ABSTRACCION Es “ignorancia selectiva”

Decidir que es importante y que no lo es Enfocarse y depender de lo que ES importante Ignorar y no depender de lo que NO ES importante

El propósito de la abstracción no es ser poco específico, es más bien crear un nuevo nivel, en el cual se puede ser absolutamente preciso

Edsger Dijkstra

ABSTRACCION PARA RESOLVER PROBLEMAS La mejor abstracción es aquella que hace simples

las cosas complejas. Rescatar y resaltar los conceptos fundamentales Esconder los aspectos no importantes

Ejemplo: Detalles de la implementación

Mientras mas perfecta es una máquina, mas oculto se encuentra su funcionamiento. Al parecer, la perfección no se

logra cuando no hay mas que añadir, si no cuando no haya mas que quitar.

Antoine de Saint-Exupéry

ABSTRACCION DE DATOS Es una técnica poderosa de programación

Permite “inventar”, o definir nuevos tipos de datos Observando e identificando entidades del mundo real: objetos

Ocultando datos irrelevantes para la resolución del problema

Gracias a esto, se pueden diseñar programas Mas cortos, Legibles y Flexibles

Estos nuevos tipos de datos se conocen como: TIPOS DE DATOS ABSTRACTOS (TDA)

TIPOS DE DATOS ABSTRACTOS Un TDA trata de representar entidades del mundo real: objetos

Especificando el QUE y no el COMO

Se componen de Comportamiento Operaciones

Los TDAs existen PARA proveer operaciones

Ejemplo: Un carro, es útil porque se lo puede manejar Manejar es un comportamiento u operación del TDA Carro

Estado Se refiere al funcionamiento interno del TDA

Un TDA correctamente creado mantiene su estado OCULTO

Ejemplo: No nos interesa como Carro funciona, solo nos interesa… que funciona

EJEMPLO Se necesita crear un TDA para representar los números

racionales La abstracción nos permitirá reconocer

El comportamiento de un número racional y El estado (datos) del mismo

TDA: Racional Comportamiento:

Sumar, Restar, Multiplicar, Simplificar, etc. Estado:

Numerador Denominador, siempre debe ser diferente de 0

VENTAJAS DE LOS TDA Permiten una mejor representación del mundo real

Una solución puede estar compuesta de un grupo de TDAs Cada uno con sus comportamientos y estados

El código se comprende mejor, pues los TDAs representan entidades del mundo real

Permite llevar un control de cambios Si el estado de un TDA esta oculto, si se modifica, nadie se verá afectado Ejemplo: Se pueden hacer modificaciones a un auto sin que el usuario del

mismo se entere o cambie su forma de USAR el auto

Permite la extensibilidad de un sistema Cada Nuevo Tipo de Dato es un modulo que se adapta a una solución

DEFINICION DE UN TDA La definición de un TDA durante el diseño debería

Clara, concisa, sin ambigüedades Sin embargo, muchos de nosotros usamos

Lenguaje natural: sujeto a ambigüedades Lenguaje de programación en particular

No todos lo entienden Una notación formal, generalizada

Todos lo podrán entender y la definición será clara y concisa

Una notación formal propuesta es BNF

QUE ES BNF? Backus-Naur Form Es una notación formal matemática Es utilizada para definir la sintaxis de los lenguajes

Que esta permitido en cierto lenguaje y que no Sin lugar a ambigüedades

Ejemplo: En lenguaje C, Hay reglas para declarar variables Y cada sentencia de control tiene su propia regla de

sintaxis

¿Cómo funciona BNF? Es como un juego matemático Se busca definir un símbolo, dando las reglas para

reemplazarlo Símbolo := alternativa1 | alternativa2

Si una expresión escrita Se puede expresar usando su definición BNF Estará correctamente escrita Si no, no será permitida según la sintaxis del lenguaje

¡ERROR!

REGLAS Y SINTAXIS DE BNF Una regla en BNF indica que

Un símbolo no terminal a la izquierda del := puede ser reemplazado por la o las alternativas del lado derecho

Las alternativas de reemplazo se separan con | Cada alternativa puede ser

Otro símbolo no terminal Que aún falta por definir, va encerrado entre <>

Un simbolo terminal Que ya no necesita más definición

SIMBOLOS EN EL BNF :=

Equivalencia

| Separa opciones de reemplazo para un símbolo dado

[..] Todo lo encerrado entre corchetes se considera opcional

{..} Todo lo encerrado entre llaves se puede repetir mas de una vez

EL TDA RACIONAL CON BNFComportamiento:

Sumar, Restar, Multiplicar, Simplificar

Estado:<racional> := <numerador>/<denominador>

<numerador>:=<digito>{<digito>}

<denominador>:=<dig_no_cero>{<digito>}

LAS CADENAS EN C Conocemos las cadenas: Conjuntos de caracteres En C, el concepto implica cierta complejidad

Una cadena es un arreglo de caracteres o es el puntero al primer carácter

El problema es que El uso de punteros a veces es confuso y las funciones para trabajo con

cadenas no son amigables

Ejemplo: char cadena[4]; // se puede trabajar, pero tiene una longitud máxima de 4 char *ncadena; //no se puede trabajar aun strcpy(cadena, “Mama”); //si sobrepasa la long. Max. Habra problemas ncadena = malloc(sizeof(char) * 4); //hay que conocer memoria dinámica

EL TDA string Mucha complejidad para usar las cadenas Definamos que es una cadena

Basándonos en su comportamiento y estado Sin considerar la complejidad

¿Qué esperamos de las cadenas? Comportamiento Poder asignarle valores Obtener un carácter de la cadena Calcular su longitud Buscar posición de un carácter en la cadena Concatenar cadenas Extraer una subcadena, etc.

DEFINICION DE STRINGComportamiento

Obtener un carácter de la cadena Calcular su longitud Buscar posición de un carácter en la cadena Concatenar cadenas Extraer una subcadena, etc

Estado (debe estar oculto)<string> := <fin_cadena>|<carácter><string><caracter>:= ‘a’|’b’|….<fin_cadena>:=‘\0’

EJERCICIOS EN CLASE Crear un TDA para representar:

Un numero complejo y sus diferentes operaciones Una arreglo y sus diferentes operaciones