El mio

Páginas: 8 (1836 palabras) Publicado: 26 de abril de 2013
Tema 5: Abstracción

Generalización de funciones
Ejemplo 1
Ejemplo 2
Ejemplo 3
Barreras de abstracción
Referencias

En el primer tema de la asignatura vimos que una de las características principales de los lenguajes de programación es que proporcionan herramientas para la construcción de abstracciones.

Una de los trabajos fundamentales deldiseñador de software es analizar el problema a resover y definir abstracciones que sean útiles. En muchas ocasiones el proceso de abstracción conlleva un proceso de prueba y error en el que la abstracción se va construyendo mediante la generalización de unas primeras ideas demasiado concretas.

En este tema vamos a ver en primer lugar algunos ejemplos del proceso de generalización y después hablaremosdel concepto de la barrera de abstracción.
Generalización de funciones

La generalización es un proceso mediante el que el diseñador de software detecta un un conjunto de funciones que implementan pequeñas variaciones de un patrón común con pequeñas variaciones y crea una única abstracción que implementa el patrón y engloba a todas las funciones. Para generalizar el patrón se define una funciónque permite hacer todo lo que hacían las funciones específicas, utilizando argumentos para determinar esas variaciones.

La generalización permite expresar el patrón general que se repite en todas las funciones concretas.

Quedará más claro cuando veamos algunos ejemplos.
Ejemplo 1

Supongamos las siguientes funciones específicas:

(define (cuadrado x)
(* x x))

(define (cubo x)(* x x x))

(define (a-la-cuarta x)
(* x x x x))

¿Cómo generalizaríamos esta idea? ¿Qué patrón común tienen todas estas funciones?

(define (elevado-a x y)
(if (= y 0)
1
(* x (elevado-a x (- y 1)))))

Hemos generalizado las funciones específicas (cuadrado x), (cubo x) y (a-la-cuarta x) mediante una función que utiliza como argumento adicional el número de veces quemultiplicamos x por si mismo: (elevado-a x y). Todas las funciones específicas las podemos definir concretando el argumento y:

(cuadrado x) = (elevado-a x 2)
(cubo x) = (elevado-a x 3)
(a-la-cuarta x) = (elevado-a x 4)

Además, la función general permite cualquier otra concreción del patrón, no se limita a 2, 3 o 4.
Ejemplo 2

Veamos ahora un patrón en el que interviene unafunción.

Supongamos las siguientes funciones específicas:

(define (sum-cuadrado a b)
(if (> a b)
0
(+ (cuadrado a) (sum-cuadrado (1+ a) b)) ))

(define (sum-cubo a b)
(if (> a b)
0
(+ (cubo a) (sum-cubo (1+ a) b)) ))

La primera función implementa el sumatorio de la función cuadrado y la segunda el sumatorio de la función cubo.

¿Cuál es el patrón comúna ambas? ¿Qué podemos extraer como argumento para generalizar el patrón común?

Ambas funciones realizan el sumatorio de una función. Lo podemos implementar así:

(define (sum f a b)
(if (> a b)
0
(+ (f a) (sum f (1+ a) b)) ))

Las funciones específicas las podemos definir concretando el argumento f:

(sum-cuadrado a b) = (sum cuadrado a b)b
(sum-cubo a b) = (sumcubo a b)

Ejemplo 3

Veamos un último ejemplo.

Las funciones específicas:

(define (pares nums)
(cond ((empty? nums) '())
((= (remainder (car nums) 2) 0)
(append (list (car nums)) (pares (cdr nums))) )
(else (pares (cdr nums)))))

(define (epals frase)
(cond ((empty? frase) '())
((member? 'e (car frase))
(append (list (carfrase)) (epals (bf frase))) )
(else (epals (cdr frase)))))

(define (nombres-propios frase)
(cond ((empty? frase) '())
((member? (car frase) '(Ana Lucia Carlos Raquel))
(append (list (car frase)) (nombres-propios (cdr frase))) )
(else (nombres-propios (cdr frase)))))

Su generalización:

(define (par x)
(= (remainder x 2) 0))

(define (epal...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Mio Mio
  • Mio Mio
  • mio mio
  • Mio Mio
  • mio mio
  • mio mio
  • lo mio
  • tu eres mio

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS