SlideShare una empresa de Scribd logo
1 de 55
Descargar para leer sin conexión
Tipos e Valores
Adaptado de © 2004, Programming Language Design Concepts
D.A. Watt, University of Glasgow
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
Para pensar ...
●
●
●
●
Roteiro
Tipos
Valores são agrupados por tipos de acordo com as operações
poder ser executadas sobre eles.
Tipos
Diferentes linguagens suport diferente tipos de dados.
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.
Tipos
Tipo é um conjunto de valores:
v é um valor de tipo T se v Є T.
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.
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.
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
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?
Tipos: Cardinalidade
A cardinalidade de um tipo T, escrito #T, e o número de
valores do tipo T.
● #Boolean = 2
Tipos: classificação
Classificação de tipos:
○ Primitivos
○ Compostos
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.
Tipos primitivos - exemplos
Boolean = {false, true}
Character = {…, ‘A’, …, ‘Z’, …, ‘0’, …, ‘9’, …}
Integer = {…, –2, –1, 0, +1, +2, …}
Float = {…, –1.0, …, 0.0, +1.0, …}
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.
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
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
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.
Tipos Compostos
●
●
●
●
Produtos Cartesianos
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)
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;
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:
Produtos Cartesianos
class Point {
public:
Point (double x, double y);
double x() { .. }
double y() { .. }
private:
double x,y;
};
Uniões disjuntas
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
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;
};
Mapeamentos
Mapeamentos - Arrays
●
●
●
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);
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
Mapeamento - Função
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, …}
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, …}
Tipos Recursivos
●
●
●
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)
Tipos Recursivos - Lista
●
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]]
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.
Sistema de tipos
●
○
●
●
●
Checagem de tipos
●
●
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)
Linguagem dinâmicas - Lua
Estáticos X Dinâmico
●
●
●
○
Inferência de tipos
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
Tipagem forte
●
○
●
●
○
●
Tipagem forte
●
○
●
○
●
●
●
○
Tipagem forte e coerção
●
○
●
●
// convertido implicitamente para inteiro
int a = 10.5;
●
●
●
●
Completude de tipo
●
●
●
Completude de tipo
$(“button”).click(function(){
facaAlgo();
});
Completude de tipo
Revisão

Más contenido relacionado

Destacado (20)

Filosofia valores
Filosofia   valoresFilosofia   valores
Filosofia valores
 
Valores
ValoresValores
Valores
 
Acção Humana e os Valores
Acção Humana e os ValoresAcção Humana e os Valores
Acção Humana e os Valores
 
Os valores power point
Os valores power pointOs valores power point
Os valores power point
 
Filosofia 10º Ano - Os Valores
Filosofia 10º Ano - Os ValoresFilosofia 10º Ano - Os Valores
Filosofia 10º Ano - Os Valores
 
Ética Moral e Valores.
Ética Moral e Valores.Ética Moral e Valores.
Ética Moral e Valores.
 
Os valores!
Os valores!Os valores!
Os valores!
 
Valores sociais
Valores sociaisValores sociais
Valores sociais
 
Valores humanos
Valores humanosValores humanos
Valores humanos
 
DBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cellsDBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cells
 
Los valores humanos
Los valores humanosLos valores humanos
Los valores humanos
 
Acção humana - Filosofia
Acção humana -  FilosofiaAcção humana -  Filosofia
Acção humana - Filosofia
 
Os valores sociais
Os valores sociaisOs valores sociais
Os valores sociais
 
A natureza dos valores
A natureza dos valoresA natureza dos valores
A natureza dos valores
 
Noção valores
Noção valoresNoção valores
Noção valores
 
Valores
ValoresValores
Valores
 
A crise dos valores no mundo conteporâneo
A crise dos valores no mundo conteporâneoA crise dos valores no mundo conteporâneo
A crise dos valores no mundo conteporâneo
 
Valores
ValoresValores
Valores
 
Ação humana 10 c 1
Ação humana 10 c  1Ação humana 10 c  1
Ação humana 10 c 1
 
Apontamentos de filosofia 10ºano
Apontamentos de filosofia 10ºanoApontamentos de filosofia 10ºano
Apontamentos de filosofia 10ºano
 

Similar a Tipos e valores

Introdução a Python - Python Poli
Introdução a Python  - Python PoliIntrodução a Python  - Python Poli
Introdução a Python - Python PoliRodrigo Lira
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dadosNegoTux Jean
 
Paradigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo HaskellParadigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo HaskellSérgio Souza Costa
 
Minicurso de Expressões Regulares (REGEX)
Minicurso de Expressões Regulares (REGEX)Minicurso de Expressões Regulares (REGEX)
Minicurso de Expressões Regulares (REGEX)Danilo Pinotti
 
Material de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de ProgramaçãoMaterial de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de Programaçãorodfernandes
 
Paradigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostosParadigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostosAdriano Teixeira de Souza
 
Haskell aula2 tipos-e-classes
Haskell aula2 tipos-e-classesHaskell aula2 tipos-e-classes
Haskell aula2 tipos-e-classesCRISLANIO MACEDO
 
05 indecibilidade
05 indecibilidade05 indecibilidade
05 indecibilidadeYuri Passos
 
Python introdução a linguagem de programação
Python introdução a linguagem de programaçãoPython introdução a linguagem de programação
Python introdução a linguagem de programaçãoAlysonTrindadeFernan
 
Python: a primeira mordida
Python: a primeira mordidaPython: a primeira mordida
Python: a primeira mordidaLuciano Ramalho
 
Aula de programacao_final.dizando
Aula de programacao_final.dizandoAula de programacao_final.dizando
Aula de programacao_final.dizandoJoão Gomes
 

Similar a Tipos e valores (20)

Introdução a Python - Python Poli
Introdução a Python  - Python PoliIntrodução a Python  - Python Poli
Introdução a Python - Python Poli
 
Standard ML / CPN ML
Standard ML / CPN MLStandard ML / CPN ML
Standard ML / CPN ML
 
Unidade7 1
Unidade7 1Unidade7 1
Unidade7 1
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dados
 
Paradigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo HaskellParadigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo Haskell
 
Minicurso de Expressões Regulares (REGEX)
Minicurso de Expressões Regulares (REGEX)Minicurso de Expressões Regulares (REGEX)
Minicurso de Expressões Regulares (REGEX)
 
Material de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de ProgramaçãoMaterial de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de Programação
 
Algoritmos Aula 02
Algoritmos Aula 02Algoritmos Aula 02
Algoritmos Aula 02
 
Paradigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostosParadigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostos
 
Matrizes
MatrizesMatrizes
Matrizes
 
Haskell aula2 tipos-e-classes
Haskell aula2 tipos-e-classesHaskell aula2 tipos-e-classes
Haskell aula2 tipos-e-classes
 
Linguagem R
Linguagem RLinguagem R
Linguagem R
 
Aula 1
Aula 1Aula 1
Aula 1
 
05 indecibilidade
05 indecibilidade05 indecibilidade
05 indecibilidade
 
Php
PhpPhp
Php
 
Introdução ao paradigma funcional com scala
Introdução ao paradigma funcional com scalaIntrodução ao paradigma funcional com scala
Introdução ao paradigma funcional com scala
 
Python introdução a linguagem de programação
Python introdução a linguagem de programaçãoPython introdução a linguagem de programação
Python introdução a linguagem de programação
 
Python: a primeira mordida
Python: a primeira mordidaPython: a primeira mordida
Python: a primeira mordida
 
Aula de programacao_final.dizando
Aula de programacao_final.dizandoAula de programacao_final.dizando
Aula de programacao_final.dizando
 
Programacao logica
Programacao logicaProgramacao logica
Programacao logica
 

Más de Sérgio Souza Costa

Expressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicasExpressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicasSérgio Souza Costa
 
De algoritmos à programas de computador
De algoritmos à programas de computadorDe algoritmos à programas de computador
De algoritmos à programas de computadorSérgio Souza Costa
 
Introdução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmosIntrodução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmosSérgio Souza Costa
 
Minicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficosMinicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficosSérgio Souza Costa
 
Banco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de EncerramentoBanco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de EncerramentoSérgio Souza Costa
 
Banco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagemBanco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagemSérgio Souza Costa
 
Banco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de aberturaBanco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de aberturaSérgio Souza Costa
 
Linguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - IntroduçãoLinguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - IntroduçãoSérgio Souza Costa
 
Gödel’s incompleteness theorems
Gödel’s incompleteness theoremsGödel’s incompleteness theorems
Gödel’s incompleteness theoremsSérgio Souza Costa
 
Conceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetosConceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetosSérgio Souza Costa
 
Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)Sérgio Souza Costa
 
Relações (composição e agregação)
Relações (composição e agregação)Relações (composição e agregação)
Relações (composição e agregação)Sérgio Souza Costa
 

Más de Sérgio Souza Costa (20)

Expressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicasExpressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicas
 
De algoritmos à programas de computador
De algoritmos à programas de computadorDe algoritmos à programas de computador
De algoritmos à programas de computador
 
Introdução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmosIntrodução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmos
 
Minicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficosMinicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficos
 
Modelagem de dados geográficos
Modelagem de dados geográficosModelagem de dados geográficos
Modelagem de dados geográficos
 
Banco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de EncerramentoBanco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de Encerramento
 
Banco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagemBanco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagem
 
Banco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de aberturaBanco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de abertura
 
Linguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - IntroduçãoLinguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - Introdução
 
Gödel’s incompleteness theorems
Gödel’s incompleteness theoremsGödel’s incompleteness theorems
Gödel’s incompleteness theorems
 
Turing e o problema da decisão
Turing e o problema da decisãoTuring e o problema da decisão
Turing e o problema da decisão
 
Conceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetosConceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetos
 
Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)
 
Herança e Encapsulamento
Herança e EncapsulamentoHerança e Encapsulamento
Herança e Encapsulamento
 
Relações (composição e agregação)
Relações (composição e agregação)Relações (composição e agregação)
Relações (composição e agregação)
 
Abstract classes and interfaces
Abstract classes and interfacesAbstract classes and interfaces
Abstract classes and interfaces
 
Introdução ao Prolog
Introdução ao PrologIntrodução ao Prolog
Introdução ao Prolog
 
Heap - Python
Heap - PythonHeap - Python
Heap - Python
 
Paradigma lógico
Paradigma lógicoParadigma lógico
Paradigma lógico
 
Contextualizando o moodle
Contextualizando o moodleContextualizando o moodle
Contextualizando o moodle
 

Tipos e valores

  • 1. Tipos e Valores Adaptado de © 2004, Programming Language Design Concepts D.A. Watt, University of Glasgow
  • 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
  • 5. Tipos Valores são agrupados por tipos de acordo com as operações poder ser executadas sobre eles.
  • 6. Tipos Diferentes linguagens suport diferente tipos de dados.
  • 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. Tipos Tipo é um conjunto de valores: v é um valor de tipo T se v Є T.
  • 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. 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. 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. 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. Tipos: Cardinalidade A cardinalidade de um tipo T, escrito #T, e o número de valores do tipo T. ● #Boolean = 2
  • 14. Tipos: classificação Classificação de tipos: ○ Primitivos ○ Compostos
  • 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. 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. 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. 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. 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. 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.
  • 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. 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. 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. Produtos Cartesianos class Point { public: Point (double x, double y); double x() { .. } double y() { .. } private: double x,y; };
  • 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. 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; };
  • 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. 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
  • 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. 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, …}
  • 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. Tipos Recursivos - Lista ●
  • 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. 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.
  • 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)
  • 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
  • 51. Tipagem forte e coerção ● ○ ● ● // convertido implicitamente para inteiro int a = 10.5;