Programacion Declarativa
´
Programacion Declarativa – Haskell – Informatica Sistemas – Curso 2003-2004
´
Pepe Gallardo – Universidad de Malaga
Tema 7. El sistema de clases
7.1 Funciones Sobrecargadas
Clases eInstancias
7.2 Algunas Clases e Instancias predefinidas
La clase Eq
La clase Ord
Las clases Show y Read
Las clases Num y Fractional
7.3 Instancias param´tricas
e
7.4 Derivaci´n de instancias
o7.5 Tipos sobrecargados: Contextos
7.1 Funciones Sobrecargadas
Tienen sentido para algunos tipos, pero no todos
Pueden tener definiciones distintas para cada tipo
Ejemplo: Consideremos los tipostype Lado
type Radio
´
type Area
data Cuadrado
data C´rculo
ı
=
=
=
=
=
Float
Float
Float
UnCuadrado Lado deriving Show
UnC´rculo Radio deriving Show
ı
´
´
Tiene sentidodefinir una funcion para calcular el area de un Cuadrado :
´
´ rea
a
:: Cuadrado → Area
´ rea (UnCuadrado l ) = l ∗ l
a
O para un C´rculo :
ı
´
´ rea
a
:: C´rculo → Area
ı
´ rea(UnC´rculo r ) = pi ∗ r ∧ 2
a
ı
´
¿ Es el tipo de ´ rea :: a → Area ?
a
´
NO, no tiene sentido, p. ej., calcular el area de un Bool
´ rea tiene sentido para los tipos Cuadrado y C´rculo , pero no paraBool , luego no
a
ı
´
es polimorfica
´
´
Informatica – Pepe Gallardo – Universidad de Malaga
7.1
Clases e Instancias
´ rea tiene sentido para varios tipos pero NO para todos
a
´
´rea tiene una definicion DISTINTA para cada tipo
a
´
´ rea es un ejemplo de funcion Sobrecargada
a
´
En Haskell, para definir funcion sobrecargada hay que crear una clase (conjunto de
´
tiposque implementan la funcion):
´
class Tiene Area t where
´
´ rea :: t → Area
a
´
Tiene Area es el nombre de la clase (empieza por mayuscula)
´
t es una variable de tipo que representa lostipos de la clase
´
´
El metodo ´ rea solo estara definido para los t que pertenezcan a la clase
a
Para incluir un tipo en una clase se realiza una instancia
´
instance Tiene Area Cuadrado...
Regístrate para leer el documento completo.