2. 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
3. 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
4. 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
5. 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)
6. 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
7. 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
8. 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
9. 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
10. 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
11. ¿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!
12. 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
13. 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
14. EL TDA RACIONAL CON
BNF
Comportamiento:
Sumar, Restar, Multiplicar, Simplificar
Estado:
<racional> := <numerador>/<denominador>
<numerador>:=<digito>{<digito>}
<denominador>:=<dig_no_cero>{<digito>}
15. 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
16. 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.
17. DEFINICION DE STRING
Comportamiento
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’
18. EJERCICIOS EN CLASE
Crear un TDA para representar:
Un numero complejo y sus diferentes operaciones
Una arreglo y sus diferentes operaciones