Linguagens de Programação Conceitos e Técnicas Valores e Tipos de Dados Prof. Isabel Cafezeiro [email protected] Linguagens de Programação Valores & tipos de dados Valor (dado) É qualquer entidade que existe durante uma computação. Pode ser avaliado, armazenado, incorporado em estrutura de dados, passado como argumento, retornado em função. Linguagens de Programação Valores & tipos de dados Que tipos de valores suporta a linguagem Pascal? Números inteiros e reais, caracteres, seqüências de caracteres, valores lógicos, registros, arrays, ponteiros, .... Linguagens de Programação Valores & tipos de dados Que tipos de valores suporta a linguagem C? Números inteiros e reais, caracteres, seqüências de caracteres, valores lógicos, registros, arrays, ponteiros, .... ... mas são simulados através de outros tipos de valores.... Linguagens de Programação Valores & tipos de dados O que vem a ser um tipo ? É um conjunto de Valores. Inteiros ! Reais ! Caracteres ! { ... , -2 , -1 , 0 , 1 , 2 , ... } { ... , -2.0, ... , -1.3, ... , 0.0 , ... ,1.7, ... , 2.99 , ... } { 'a' , ... , 'z' , '1' , '2' , ... } { 0.0, ... ,1.5 , ... , 'a' , ... , 'z' , 1 , 2 , ... } ??? Linguagens de Programação Valores & tipos de dados O que vem a ser um tipo ? É uma coleção de valores que têm alguma propriedade em comum. Coleção de valores que exibe comportamento uniforme nas operações associadas ao tipo. tipo = valores + operações Linguagens de Programação O que vem a ser um tipo ? tipo = valores + operações T1 = <C1,O1> e T2 = <C2,O2> ? Valores & tipos de dados ... Vetores no plano real (conceito algébrico) e Números Complexos: representação por pares de reais... ... Diversas implementações Se C1 = C2 e O1 ≠ O2 então T1 ≠ T2 ? Se C1 ≠ C2 e O1 = O2 então T1 ≠ T2 ? de inteiros em C: mesmas operações.... Linguagens de Programação Porquê tipos? Em Matemática: tipos para evitar paradoxos Teoria dos conjuntos: Paradoxo de Russel R={x|x∉x} R∈R? Valores & tipos de dados Linguagens de Programação Porquê tipos? Em Computação: Abstração: tipos ajudam a estruturar a solução do problema. Tipos ajudam a compreender expressões indicando o conjunto de valores que podem ser denotados por ela Tipos ajudam a detectar erros: operações aplicadas a valores impróprios Tipos ajudam a gerar códigos eficientes: representação adequada de valores Valores & tipos de dados Linguagens de Programação Valores & tipos de dados Em Computação: Linguagens “sem tipos” (com um único tipo) A informação a respeito do tipo está amarrada ao valor, e não ao identificador. LISP PERL SELF (define a 1) Erro de execução! (define b 'casa') Em tempo de execução verifica-se (+ a b) que o valor que a e b guardam não são compatíveis com a operação de soma Linguagens de Programação Verificação Estática de Tipos Tempo de compilação erros detectados “cedo” programa não executa se tiver erros de tipo var i: integer; a: char begin readln(i); readln(a); writeln(i+a); end. A informação a respeito do tipo está amarrada ao identificador, usualmente, pela declaração de variáveis. erro de compilação! Em tempo de compilação sabese que as variáveis i e a não podem ser operadas com + Valores & tipos de dados Linguagens de Programação Valores & tipos de dados Verificação Dinâmica de Tipos Tempo de execução Erros eventualmente detectados na execução. Todos os caminhos da execução devem ser testados para garantir a ausência de erros Suponha a não definido: (if (= 1 1) 2 a) (if (= 1 1) a 2) Roda sem erro ! Dá erro de execução ! Linguagens de Programação Valores & tipos de dados Verificação Dinâmica de Tipos (define segundo(lambda(l) (car (cdr l)))) (segundo ́(1 2 3)) (segundo ́( ́(1 2 3) (4 5 6))) (segundo ́(“manga” “abacaxi” 5 6)) Lista de números Lista de listas Lista de strings e números Linguagens de Programação Verificação de Tipos estática: eficiência segurança flexibilidade segurança flexibilidade dinâmica: eficiência Valores & tipos de dados Linguagens de Programação Valores & tipos de dados Valor do tipo: o valor pertence ao conjunto de valores definido pelo tipo Expressão do tipo: o resultado da expressão pertence ao conjunto de valores definido pelo tipo Cardinalidade do tipo: cardinalidade do conjunto de valores do tipo. Linguagens de Programação Valores & tipos de dados Hierarquia de tipos: Tipos Atômicos Compostos Inteiros Enumerados Caracteres Ponto Flutuantes Booleanos Decimais Intervalos Recursivos Strings Uniões Conjuntos Potência Mapeamentos Ponteiros Livres Finitos Disjuntas Produtos Cartesianos Funções Linguagens de Programação Valores & tipos de dados Tipos Primitivos (Atômicos): seus valores não podem ser decompostos em valores mais simples. O conjunto de tipos primitivos costuma revelar o propósito da LP. Linguagem de aplicações numéricas !!! Tipos atômicos de FORTRAN: inteiros reais complexos ... Linguagens de Programação Valores & tipos de dados Tipos Primitivos (Atômicos): seus valores não podem ser decompostos em valores mais simples. Sofrem limitações diretas do hardware. Sofrem diferenças entre implementações da mesma linguagem Inteiros em Pascal: [-32768 .. 32767] Inteiros em C++: [-65536 .. 65536] ... em alguns compiladores !!! Linguagens de Programação Valores & tipos de dados Tipos Primitivos (Atômicos): seus valores não podem ser decompostos em valores mais simples. Built in (embutidos) Pré definidos na linguagem Definidos Definidos pelo programador Discretos Em correspondência direta com os inteiros Linguagens de Programação Built In em Pascal: Atômicos Reais Inteiros Caracteres Enumerados Booleanos Intervalos Valores & tipos de dados Linguagens de Programação Definidos em Pascal: Atômicos Reais Inteiros Caracteres Enumerados Booleanos Intervalos Valores & tipos de dados Linguagens de Programação Discretos em Pascal: Valores & tipos de dados Atômicos Reais Inteiros Caracteres Enumerados Booleanos Intervalos Ótimos para indexar arrays e loops definidos!!!