Tipos e valores

9.205 visualizações

Publicada em

Publicada em: Tecnologia
0 comentários
1 gostou
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
9.205
No SlideShare
0
A partir de incorporações
0
Número de incorporações
189
Ações
Compartilhamentos
0
Downloads
55
Comentários
0
Gostaram
1
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Tipos e valores

  1. 1. Tipos e Valores Adaptado de © 2004, Programming Language Design Concepts D.A. Watt, University of Glasgow
  2. 2. Sobre mim Sérgio Souza Costa Professor - UFMA Doutor em Computação Aplicada (INPE) prof.sergio.costa@gmail.com https://sites.google.com/site/profsergiocosta/home https://twitter.com/profsergiocosta http://gplus.to/sergiosouzacosta http://www.slideshare.net/skosta/presentations?order=popular
  3. 3. Para pensar ... ● ● ● ●
  4. 4. Roteiro
  5. 5. Tipos Valores são agrupados por tipos de acordo com as operações poder ser executadas sobre eles.
  6. 6. Tipos Diferentes linguagens suport diferente tipos de dados.
  7. 7. Tipos Diferentes linguagens suport diferente tipos de dados. Ada: booleans, characters, enumerands, integers, real numbers, records, arrays, discriminated records, objects (tagged records), strings, pointers to data, pointers to procedures. C: enumerands, integers, real numbers, structures, arrays, unions, pointers to variables, pointers to functions. Java: booleans, integers, real numbers, arrays, objects. Haskell: booleans, characters, integers, real numbers, tuples, disjoint unions, lists, tipos recursivos.
  8. 8. Tipos Tipo é um conjunto de valores: v é um valor de tipo T se v Є T.
  9. 9. Tipos Tipo é um conjunto de valores: v é um valor de tipo T se v Є T. E é uma expressão de tipo T se E leva a um valor do tipo T.
  10. 10. Tipos Tipo é um conjunto de valores: v é um valor de tipo T se v Є T. E é uma expressão de tipo T se E leva a um valor do tipo T. Um tipo é um conjunto de valores que exibe um comportamento uniforme sob operações associadas a este conjunto.
  11. 11. Tipos Tipo é um conjunto de valores: v é um valor de tipo T se v Є T. E é uma expressão de tipo T se E leva a um valor do tipo T. Um tipo é um conjunto de valores que exibe um comportamento uniforme sob operações associadas a este conjunto. Boolean {true, false}, Operações: and, or, not, etc
  12. 12. Tipos Tipo é um conjunto de valores: v é um valor de tipo T se v Є T. E é uma expressão de tipo T se E leva a um valor do tipo T. Um tipo é um conjunto de valores que exibe um comportamento uniforme sob operações associadas a este conjunto. Boolean {true, false}, Operações: and, or, not, etc {15, true, azul} é um tipo?
  13. 13. Tipos: Cardinalidade A cardinalidade de um tipo T, escrito #T, e o número de valores do tipo T. ● #Boolean = 2
  14. 14. Tipos: classificação Classificação de tipos: ○ Primitivos ○ Compostos
  15. 15. Tipos primitivos Valores primitivos são aqueles cujos valores são atômicos – não podem ser decompostos em valores mais simples. Tipo primitivo é onde os valores são primitivos. Toda linguagem de programação possui tipos primitivos, e algumas permitem definir novos.
  16. 16. Tipos primitivos - exemplos Boolean = {false, true} Character = {…, ‘A’, …, ‘Z’, …, ‘0’, …, ‘9’, …} Integer = {…, –2, –1, 0, +1, +2, …} Float = {…, –1.0, …, 0.0, +1.0, …}
  17. 17. Tipos primitivos - cardinalidade #Boolean = 2 #Character = 128 (ASCII), 256 (ISO-Latin), or 32768 (Unicode) #Integer = max integer – min integer + 1 Note: Em algumas linguagens (ex. C), booleans e characters são inteiros.
  18. 18. Criando tipos primitivos Em Ada é possível definir novos tipos . ●Declaração: type Population is range 0 .. 1000; ●Conjunto de valores: Population = {0, 1, …, 1000} ●Cardinalidade: #Population = 1001
  19. 19. Criando tipos primitivos Em diversas linguagens é possível definir tipos de dados enumeráveis. C: enum Cor { VERMELHA, PRETA }; Ada: type Color is (VERMELHA, PRETA ); Haskell data Color = Vermelha | Preta
  20. 20. Tipos Compostos Um valor composto ou estruturado é quando o seu valor é composto a partir de valores mais simples. Tipo composto é um tipo cujos valores são compostos. Linguagens de programação (LP) suporta uma grande variedade deles.
  21. 21. Tipos Compostos ● ● ● ●
  22. 22. Produtos Cartesianos
  23. 23. Produtos Cartesianos struct Point { x,y: double; }; structures (C) type Point is record x: Double; y: Double; end record; Records (Ada) type Point = (Double,Double) tuplas (Haskell) class Point: x = 0;y =0; Class (Python)
  24. 24. Produtos Cartesianos - ADA type Month is (jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec); type Day_Number is range 1 .. 31; type Date is record m: Month; d: Day_Number; end record; someday: Date := (jan, 1); … put(someday.m+1); put("/"); put(someday.d); someday.d := 29; someday.m := feb;
  25. 25. Produtos Cartesianos -Haskell someday = (jan, 1) (m,d) = someday anotherday = (m + 1, d) Valores: data Month = Jan | Feb | Mar | Apr | May | Jun | Jul | Aug | Sep | Oct | Nov | Dec type Date = (Month, Int) Date = Month X Integer = {Jan, Feb, …, Dec} X {…, –1, 0, 1, 2, …} Uso:Declarações:
  26. 26. Produtos Cartesianos class Point { public: Point (double x, double y); double x() { .. } double y() { .. } private: double x,y; };
  27. 27. Uniões disjuntas
  28. 28. Uniões disjuntas union { int exact; float inexact; }; Union em C data Number = Exact Int Inexact Float Tipos algébricos em Haskell type Accuracy is (exact, inexact); type Number (acc: Accuracy := exact) is record case acc of when exact => ival: Integer; when inexact => rval: Float; end case; end record; Ada
  29. 29. Unions e cartesianos typedef enum { int_t, float_t ,string_t} TYPE; union m_value { int int_value; float float_value; char* str_value; } ; struct symbol { const char* name; union m_value* val; TYPE t; };
  30. 30. Mapeamentos
  31. 31. Mapeamentos - Arrays ● ● ●
  32. 32. Array - Ada type Color is (red, green, blue); type Pixel is array (Color) of Boolean; p: Pixel := (true, false, true); c: Color; … p(c) := not p(c);
  33. 33. Array - Ada Pixel = Color -> Boolean = {red, green, blue} -> {false, true} viz: {red -> false, green -> false, blue -> false} {red -> false, green -> false, blue -> true} {red -> false, green -> true, blue -> false} {red -> false, green -> true, blue -> true} {red -> true, green -> false, blue -> false} {red -> true, green -> false, blue -> true} {red -> true, green -> true, blue -> false} {red -> true, green -> true, blue -> true} #Pixel = (#Boolean)#Color = 23 = 8
  34. 34. Mapeamento - Função
  35. 35. Mapeamento - Função - Ada Definição: function is_even (n: Integer) return Boolean is begin return (n mod 2 = 0); end; Tipo: Integer -> Boolean Valores: {…, 0 -> true, 1 -> false, 2 -> true, 3 -> false, …}
  36. 36. Mapeamento - Função - Haskell Definição: is_even n = (mod n 2 == 0) Tipo Integer -> Boolean Valores: {…, 0 -> true, 1 -> false, 2 -> true, 3 -> false, …}
  37. 37. Tipos Recursivos ● ● ●
  38. 38. Números Naturais - Haskell data Nat = Zero | Succ Nat deriving (Show) soma :: Nat -> Nat -> Nat soma Zero n = n soma (Succ m) n = Succ (soma m n) mult :: Nat -> Nat -> Nat mult Zero m = Zero mult (Succ m) n = soma n (mult n m)
  39. 39. Tipos Recursivos - Lista ●
  40. 40. Tipos Recursivos - Lista - Haskell data IntList = Nil | Cons Int IntList >Nil >Cons 2 (Cons 3 (Cons 5 (Cons 7 Nil))) [Int] [String] [[Int]] [] [2,3,5,7]["cat","dog"][[1],[2,3]]
  41. 41. Strings ● Seqüência de 0 ou mais caracteres. ● Não existe consenso sobre sua classificação. ● Strings são tipos primitivos ou compostos? ● Python, ML, Lua são tipos primitivos ● Em Haskell é uma lista de caracter ● Em C, vetor de caracter. ● Java trata strings como objetos da classe String.
  42. 42. Sistema de tipos ● ○ ● ● ●
  43. 43. Checagem de tipos ● ●
  44. 44. Linguagem estáticas - C int max (int a, int b) { if (a > b) return a; else return b } max (4, 5) max (3.5,3.1)
  45. 45. Linguagem dinâmicas - Lua
  46. 46. Estáticos X Dinâmico ● ● ● ○
  47. 47. Inferência de tipos
  48. 48. Erro de tipos ●É a aplicação de um operador a um operando de um tipo inapropriado ○Atribuir um int para uma função que espera um float nas primeiras versões de C ●Se todas as vinculações de variáveis a tipos forem estáticas na linguagem, a verificação de tipos pode ser feita toda em tempo de compilação ●Em linguagens dinâmicas (JavaScript, PHP) isso só pode ser feito em tempo de execução
  49. 49. Tipagem forte ● ○ ● ● ○ ●
  50. 50. Tipagem forte ● ○ ● ○ ● ● ● ○
  51. 51. Tipagem forte e coerção ● ○ ● ● // convertido implicitamente para inteiro int a = 10.5;
  52. 52. ● ● ● ● Completude de tipo
  53. 53. ● ● ● Completude de tipo
  54. 54. $(“button”).click(function(){ facaAlgo(); }); Completude de tipo
  55. 55. Revisão

×