Programación Declarativa Avanzada E.T.S.Ingeniería Informática Departamento de Lenguajes y Ciencias de la Computación Universidad de Málaga TIPOS ABSTRACTOS.

Slides:



Advertisements
Presentaciones similares
Observador (observer) Visita (Visitor) Singleton
Advertisements

TECNICATURA UNIVERSITARIA EN INFORMATICA
SOLUCIÓN DE PROBLEMAS Problema Solución A B S T R C I Ó N C O N R E I
José Manuel Cortés López Programación Declarativa Avanzada
Estructuras de datos y algoritmos
Introducción al lenguaje de especificación JML
Tipos de Datos Básicos y Estructurados
El proceso de desarrollo de software
Universidad Central II-35 Estructuras de Datos
Realizado por: Ing. Mauricio Rivera1 Colas. Realizado por: Ing. Mauricio Rivera2 ¿Qué es una Cola? Una cola es un grupo ordenado de elementos homogéneos.
Tipos de Datos Abstractos Modularidad
2.3 Cola de números enteros.
2.2 Pila de números enteros
Aplicación del paradigma orientado a objetos
Tema: Funciones en Excel (II) Funciones de Texto
Teoría de lenguajes y compiladores
Encapsulamiento y Abstracción
M.I.A Daniel Alejandro García López.  Un TDA es un tipo de dato definido por el programador que se puede manipular de un modo similar a los tipos de.
Oscar Bedoya. Edificio 331, 2º piso, E.I.S.C. Estructuras de datos y algoritmos.
PROGRAMACIÓN EN JAVA Curso-taller inicial de programación en JAVA Facultad de Estadística e Informática TEMA II.
POO Java Módulo 3 Elementos de programas Identificadores
T A D : Módulos Los módulos proporcionan la única manera de construir tipos abstractos de datos (TAD) en Haskell.
Estructuras dinámicas de datos, TAD Lista, parte 2
COLAS, IMPLEMENTACIÓN A PARTIR DE LISTAS Y PARA PILAS
Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar.
Un lenguaje funcional avanzado:
Semana 5 Subprogramas..
C++ LISTAS C++ 11/04/2017 Ing. Edgar Ruiz Lizama.
Formateador y Analizador de textos
TIPOS Y ESTRUCTURAS BÁSICAS DE DATOS
Entrada/salida en HASKELL Joaquín A. Bujalance Jiménez 2004.
Facultad de Ciencias de la Computación MC Beatriz Beltrán Martínez
Estructura de Datos y Algoritmos
ESTRUCTURA DE DATOS EN JAVA
Patrones Creacionales
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
Tipos de Datos (Data Types)
Patrones de diseño DECORATOR Mario Rodríguez Martín
Pilas y Colas Estructuras de Datos.
Proyecto Final de Carrera Gestor de Referencias Bibliográficas Integrado Escuela Politécnica Superior de Albacete (UCLM) Autora: Laura Ruiz Navarro Tutores:
Semantica.
1 Programación Declarativa Avanzada Resolución De Puzzles Vicente Andrade Alcántara Miguel Ángel Sánchez González.
Dinamismo y Contenedores Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires (C++ Avanzado) Depto. de Computación Algoritmos y Estructuras.
Guía para examen práctico correspondiente a evolución extraordinaria primer oportunidad de Informática y Computación 1. OBJETIVO DE LA GUIA DE ESTUDIO:
Herencia y tipos ● Cuanta memoria se debe asignar a un objeto cuando se asigna en la pila ● La asignación debe hacerse antes de que se conozca la cantida.
PILAS Una pila es una estructura de datos o lista de elementos, a la cual se le puede insertar o eliminar su contenido sólo por uno de sus extremos, llamado.
1 Samba: Un lenguaje funcional perezoso Presentación del lenguaje: qué es un programa Samba definiciones locales abstracciones lambda Tipos inductivos:
TIPOS ABSTRACTOS DE DATOS & HASKELL
Programación Declarativa Avanzada E.T.S.Ingeniería Informática Departamento de Lenguajes y Ciencias de la Computación Universidad de Málaga Solitario de.
Punteros Recomendado: 1. Nivelación Funciones
Introducción al Lenguaje. ¿ Qué es PHP ? O Hypertext Pre-processoes (PHP) es un lenguaje de "código abierto" interpretado, de alto nivel, embebido en.
Estructuras de datos Fundamentos de análisis y diseño de algoritmos.
Introducción a los TADs
PILAS Una pila es una estructura de datos o lista de elementos, a la cual se le puede insertar o eliminar su contenido sólo por uno de sus extremos, llamado.
Laboratorio de programación
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Tipo.
ESTRUCTURAS LINEALES “LA PILA”
PUNTEROS. Los punteros son de amplia utilización en programación y muchos lenguajes permiten la manipulación directa o indirecta de los mismos. Su razón.
La Programación Orientado a Objetos
Estructura de Datos PILA Universidad Hispanoamericana Prof. Ing. Erick López.
Listas Dinámicas.
Factorías e Iterables Introducción del concepto de patrón de diseño Construcción de tipos para recorridos con for extendido Fundamentos de Programación.
Estructuras de control selectivas Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Práctica 3.
Reutilización de código Elementos básicos del lenguaje Java Definición de variables, expresiones y asignaciones Fundamentos de Programación Departamento.
Las interfaces Predicate y Function Versión Unidad Didáctica 17 Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos.
UNIVERSIDAD DIEGO PORTALES Facultad de Ingeniería Programación Avanzada TIPOS ABSTRACTOS DE DATOS TAD Tema: TIPOS ABSTRACTOS DE DATOS TAD Subtema: COLAS.
Lenguaje de Programación II Prof. Rafael Montenegro B. Carrera: T.S.U en Informática Periodo: 2014-I.
Tipos genéricos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 3.
Introducción Todos los lenguajes de programación son distintos entre si. Sin embargo, pueden ser agrupados según la forma de pensar y estructurar los.
Arrays, Cadenas y Vectores Tipos Genéricos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 5 Versión
Transcripción de la presentación:

Programación Declarativa Avanzada E.T.S.Ingeniería Informática Departamento de Lenguajes y Ciencias de la Computación Universidad de Málaga TIPOS ABSTRACTOS DE DATOS Y PROGRAMACIÓN MODULAR 2ª Sesión

Jesús M. Doña Fernández Programación Declarativa Avanzada Sesión Previa I  Tipos de datos  conjunto de valores que sirve de dominio de ciertas operaciones  clasificar los objetos de los programas y determinar que valores pueden tomar y que operaciones pueden realizar  Para restringir su ámbito de aplicación surgen los TADs.  Un TAD considera a un tipo de datos como… Valores que lo Caracteriza + Operaciones  Diseño Modular: Dividir el problema original en Subproblemas más pequeños.  Ventajas: 1. Abstracción.2. Corrección. 3. Legibilidad. 4. Mantenimiento. 5. Seguridad.

Jesús M. Doña Fernández Programación Declarativa Avanzada Sesión Previa II  Pero ¿para qué nos sirven los TADs? Diseño de nuevos tipos de datos  diseño modular de las aplicaciones.  ¿Qué es el Diseño Modular? Dividir el problema original en Subproblemas más pequeños.  Ventajas: 1. Abstracción.2. Corrección. 3. Legibilidad. 4. Mantenimiento. 5. Seguridad.

Jesús M. Doña Fernández Programación Declarativa Avanzada Módulos. Haskell I  Funciones principales: Controlar el espacio de nombres Crear tipos abstractos de datos  Sintaxis module Cadenas (rellena, aMayusculas) where --A ñ ade espacios a la izquierda rellena :: Int  String  String rellena ns = espacios (n – length s) ++ s --Pasa a May ú sculas aMayusculas :: String  String aMayusculas = map toUpper espacios :: Int  String espacios n = replicate n ‘ ‘ El nombre del módulo en mayúsculas. Se guarda en fichero de texto con mismo nombre ‘Cadenas.hs’ Lista de exportaciones: entidades vistas desde modulo externo. Si no aparecen  privadas (funciones internas)

Jesús M. Doña Fernández Programación Declarativa Avanzada TAD’s. Funciones I  Por último en el módulo solo queda la implementación de las funciones del TAD  Tenemos dos opciones disponibles Interfaz no sobrecargado. Interfaz sobrecargado.

Jesús M. Doña Fernández Programación Declarativa Avanzada Módulos: Implementación.  Interfaz no sobrecargado. Mediante un interfaz no sobrecargado dos implementaciones diferentes de un mismo tipo NO pueden ser importadas desde un mismo módulo. Soluciones: Llamar a las funciones para las diferentes implementaciones con nombres diferentes. Usar importaciones cualificadas. Usar interfaces sobrecargados.

Jesús M. Doña Fernández Programación Declarativa Avanzada TAD cola (no sobrecargado) module Cola( Cola, colaVacia, --:: Cola a meteEnCola, --:: Cola a  a  Cola a sacaDeCola, --:: Cola a  Bool estáVacíaCola --:: Cola a  Bool ) where type Cola a = [a] -- Crea una nueva cola colaVacia :: Cola a colaVacia = [] -- Test para conocer si una cola está vacía estáVacíaCola :: Cola a  Bool estáVacíaCola [] = true estáVacíaCola _ = false -- Inserta un elemento en la cola meteEnCola :: Cola a  a  Cola a meteEnCola q x = q ++ [x] -- Extrae el primer elemento de una cola -- Error si no existe sacaDeCola :: Cola a  (a, Cola a) sacaDeCola [] = error “sacaDeCola: cola vacía” sacaDeCola (x:q) = (x,q) Buena Costumbre

Jesús M. Doña Fernández Programación Declarativa Avanzada TAD’s. Estructuras de Datos II  Interfaz sobrecargado. Consiste en definir una clase que contenga el interfaz de las declaraciones para el interfaz del tipo. Permite hacer distintas implementaciones mediante instancias concretas de esa clase. En estas implementaciones debemos representar a los datos mediante constructores (data).

Jesús M. Doña Fernández Programación Declarativa Avanzada TAD Cola (sobrecargado) module Cola(Cola(..)) where class Cola q where colaVacía :: q a estáVacíaCola :: q a  Bool meteEnCola :: q a  a  q a sacaDeCola :: q a  (a, q a) module TCola(TCola) where import Cola data TCola a = TC[a] deriving Eq instance Cola Tcola where colaVacía = TC [] estáVacíaCola (TC []) = True estáVacíaCola (TC _) = False meteEnCola (TC q) x = TC (q ++ [x]) sacaDeCola (TC []) = error“Cola vacía” sacaDeCola (TC (x:xs)) = (x, TC xs) module BCola(BCola(..)) where import Cola data Bcola a = BC [a] [a] instance Cola Bcola where colaVacía = BC [] estáVacíaCola (BC [] r) = True estáVacíaCola (BC _ r) = False meteEnCola (BC f r) x = check f (x:r) sacaDeCola (BC [] _) = error“Cola vacía” sacaDeCola (BC (x:f) r) = (x, check f r) - - No permite que la 1º lista esté vacía a menos - - que la 2ª tabién lo esté check :: [a]  [a]  Cola a check [] r = BC (reverse r) [] check f r = BC f r - - Coloca todos los elementos en la primera - - lista flush :: [a]  [a]  Cola a flush f r = BC (f ++ (reverse r)) []

Jesús M. Doña Fernández Programación Declarativa Avanzada TAD’s. Ejemplos I module Pila( TPila, vacia, -- -> TPila a meteEnPila, -- a -> TPila a -> TPila a sacaDePila, --TPila a -> TPila a muestra -- (Show a) => TPila a -> String ) where -- Definición del tipo Pila con dos constructores data TPila a = PilaVacia | Apila a (TPila a) -- Devuelve una pila vacía vacia :: TPila a vacia = PilaVacia -- Inserta un elemento en la pila meteEnPila:: a -> TPila a -> TPila a meteEnPila x p = Apila x p -- Elimina el primer elemento de la pila sacaDePila :: TPila a -> TPila a sacaDePila (Apila _ p) = p sacaDePila PilaVacia = error "no puedes sacar nada de una pila vacia" -- Imprime el contenido de la pila muestra :: (Show a) => TPila a -> String muestra PilaVacia = " []" muestra (Apila x p) = " " ++ show x ++ muestra p

Jesús M. Doña Fernández Programación Declarativa Avanzada TAD’s. Ejemplos II module Conjunto( Conjunto, conjuntoVacio, -- :: Conjunto a estaVacioConjunto, -- :: Conjunto a -> Bool añadeAConjunto, -- :: Eq a => a -> Conjunto a -> Conjunto a eliminaDeConjunto, -- :: Eq a => a -> Conjunto a -> Conjunto a estaElemConjunto, -- :: Eq a => a -> Conjunto a -> Bool (\/), -- :: Eq a => Conjunto a -> Conjunto a -> Conjunto a (/\), -- :: Eq a => Conjunto a -> Conjunto a -> Conjunto a conjuntoALista -- :: Conjunto a -> [a] ) where import List(delete) data Conjunto a = Conjunto [a] -- Crea un conjunto vacío conjuntoVacio :: Conjunto a conjuntoVacio = Conjunto [] -- Comprueba si un conjunto está vacío estaVacioConjunto :: Conjunto a -> Bool estaVacioConjunto (Conjunto xs) = null xs -- Comprueba si un elemento está en un conjunto estaElemConjunto :: Eq a => a -> Conjunto a -> Bool estaElemConjunto x (Conjunto xs) = elem x xs -- Inserta un elemento en un conjunto añadeAConjunto :: Eq a => a -> Conjunto a -> Conjunto a añadeAConjunto x (Conjunto xs) | elem x xs = Conjunto xs | otherwise = Conjunto (x:xs)

Jesús M. Doña Fernández Programación Declarativa Avanzada TAD’s. Ejemplos III -- Borra un elemento de un conjunto eliminaDeConjunto :: Eq a => a -> Conjunto a -> Conjunto a eliminaDeConjunto x (Conjunto xs) | estaElemConjunto x (Conjunto xs) = Conjunto (delete x xs) | otherwise = error "eliminaDeConjunto : no está" -- Union de conjuntos infixl 6 \/ (\/) :: Eq a => Conjunto a -> Conjunto a -> Conjunto a cs \/ (Conjunto ys) = foldr añadeAConjunto cs ys -- Intersección de conjunto infixl 7 /\ (/\) :: Eq a => Conjunto a -> Conjunto a -> Conjunto a cs /\ (Conjunto ys) = Conjunto [x|x <- ys, estaElemConjunto x cs] -- Convierte un conjunto en una lista conjuntoALista :: Conjunto a -> [a] conjuntoALista (Conjunto xs) = xs instance Show a => Show (Conjunto a) where show (Conjunto xs) = "{" ++ show2 xs where show2 [] = "}" show2 [x] = show x ++ show2 [] show2 (x:xs) = show x ++ "," ++ show2 xs

Jesús M. Doña Fernández Programación Declarativa Avanzada Bibliografía  “Razonando con Haskell. Una introducción a la Programación Funcional”. Blas C. Ruiz Jiménez, Francisco Gutiérrez López, Pablo Guerrero García, José E. Gallardo Ruiz  Apuntes de Tipos Abstractos de Datos (2º Curso Ing. En Informática).  polaris.lcc.uma.es/~blas/apuntes/PDAv/ polaris.lcc.uma.es/~blas/apuntes/PDAv/  haskell.org haskell.org   slucas/MexicoWeb/TyposYEDsEnLFs.pdf Este Trabajo estará disponible para su descarga en Internet en la dirección: Junto con el trabajo se incluirán los enlaces a la bibliografía, a los documentos pdf y ppt usados, así como a la exposición preparada para su presentación en clase.