A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

©André Santos, 1998-2002 Programação Funcional Classes em Haskell André Santos.

Apresentações semelhantes


Apresentação em tema: "©André Santos, 1998-2002 Programação Funcional Classes em Haskell André Santos."— Transcrição da apresentação:

1 ©André Santos, Programação Funcional Classes em Haskell André Santos

2 ©André Santos, Classes Usadas para permitir overloading de nomes –operação de igualdade == diferentes significados para diferentes tipos Orientação a Objetos –herança

3 ©André Santos, Funções polimórficas? (==) :: t -> t -> Bool ( t -> Bool show :: t -> String

4 ©André Santos, Funções monomórficas Definição funciona apenas para um tipo de dados específico capitalize :: Char -> Char capitalize ch = chr (ord ch + offset) where offset = ord ’A’ - ord ’a’

5 ©André Santos, Funções polimórficas Uma única definição pode ser usada para diversos tipos de dados length :: [a] ->Int length [] = 0 length (x:xs) = 1 + length xs

6 ©André Santos, Overloading A função pode ser usada para vários (alguns) tipos de dados –diferentes definições para cada tipo Classe: coleção de tipos para os quais uma função está definida O conjunto de tipos para os quais ( == ) está definida é a classe igualdade, Eq

7 ©André Santos, Definindo a classe igualdade Identifica-se o que é necessário para um tipo t ser da classe –nesse caso, ele deve possuir uma função ( == ) definida sobre t, do tipo t -> t -> Bool class Eq t where (==) :: t -> t -> Bool

8 ©André Santos, Instâncias Tipos membros de uma classe são chamadas instâncias São instâncias de Eq os tipos primitivos e as listas e tuplas de instâncias de Eq –Int, Float, Char, Bool, [Int], (Int,Bool), [[Char]], [(Int,[Bool])] Int -> Int não é instância da classe Eq Instância de classe vs. Instância de um tipo

9 ©André Santos, Funções que usam igualdade allEqual :: Int -> Int -> Int -> Bool ? allEqual n m p = (n == m) && (m == p) Contexto –definido pela parte antes do operador “ => ” allEqual succ succ succ ? member :: [Char] -> Char -> Bool ? member [] b = False member (a:as) b = (a==b) || member as b allEqual :: Eq t => t -> t -> t -> Bool member :: Eq t => [t] -> t -> Bool

10 ©André Santos, Outras funções books :: Eq a => [(a,b)] -> a -> [b] borrowed :: Eq u => [(t,u)] -> u -> Bool numBorrowed :: Eq t => [(t,u)] -> t -> Int

11 ©André Santos, Definido assinaturas de classes Funções (nome e tipo) que devem ser definidas para cada instância da classe Exemplo de uma assinatura de classe class Visible t where toString :: t -> String size :: t -> Int

12 ©André Santos, Definindo instâncias de uma classe Definir as funções da assinatura para um tipo Exemplo de uma instância da classe Eq instance Eq Bool where True == True = True False == False = True _ == _ = False

13 ©André Santos, Exemplo de instâncias da classe Visible instance Visible Char where toString ch = [ch] size _ = 1 instance Visible Bool where toString True = ”True” toString False = ”False” size _ = 1

14 ©André Santos, Exemplo de instâncias da classe Visible instance Visible t => Visible [t] where toString = map toString >.> concat size = map size >.> foldr (+) 0

15 ©André Santos, Definições default class Eq t where (==), (/=) :: t -> t -> Bool a /= b = not (a==b) podem ser substituídas (overloaded)

16 ©André Santos, Classes derivadas class Eq t => Ord t where ( ),(>=) :: t -> t -> Bool max, min :: t -> t -> t a <= b = (a < b || a == b) a > b = b < a a a a >= b = (a > b || a == b) iSort :: Ord t => [t] ->[t] Herança de operações

17 ©André Santos, Restrições múltiplas vSort = iSort >.> toString vSort :: (Ord t, Visible t) => [t] -> String instance (Eq t, Eq u) => Eq (t,u) where (a,b) == (c,d) = (a == c && b == d) class (Ord t, Visible t) => OrdVis t Herança múltipla

18 ©André Santos, Classes predefinidas Eq, Ord class (Ord t) => Enum t where enumFrom :: t -> [t] enumFromThen :: t -> t -> [t] enumFromTo :: t -> t -> [t] enumFromThenTo :: t -> t -> t -> [t] [n.. ] [n,m.. ] [n.. m] [n,n’.. m]

19 ©André Santos, Classes predefinidas show :: (Show t) => t -> String read :: (Read t) => String -> t

20 ©André Santos, Tipos Numéricos Int, Integer Float, Double Rational Complex Classes Num, Fractional rep 0 ch = [] rep n ch = ch : rep (n-1) ch :type rep rep :: Num a => a -> b -> [b]

21 ©André Santos, Tipos vs. Classes Linguagens OO: tipos == classes –toString :: VisibleType -> String Ligação dinâmica –[True, ’N’, False] :: [VisibleType] Nomenclatura: Overloading vs. Polimorfismo –polimorfismo ad-hoc


Carregar ppt "©André Santos, 1998-2002 Programação Funcional Classes em Haskell André Santos."

Apresentações semelhantes


Anúncios Google