Tipo de dados

Formalmente chamado de tipo de dados (do Inglês tipo de dados ) ou um tipo de dados na ciência da computação a combinação de conjuntos de objetos com que nela definidos operações . Apenas os nomes desses conjuntos de objetos e operações são especificados pelo tipo de dados do registro de dados usando uma assinatura chamada . Um tipo de dados especificado dessa forma ainda não possui nenhuma semântica .

O significado muito mais freqüentemente usado, porém mais específico, do termo tipo de dados vem do ambiente da linguagem de programação e descreve a combinação de intervalos de valores específicos e operações definidas neles para formar uma unidade. Os exemplos podem ser inteiros ou pontos decimais, cadeias de caracteres ou tipos mais complexos, como data / hora ou objetos . Para distinguir entre esses tipos de dados, o termo tipo de dados concreto também é usado na literatura . Para uma discussão sobre como as linguagens de programação lidam com tipos de dados, consulte Digitação .

A transição conceitual da definição formal para a definição de tipos de dados concretos usados ​​no ambiente da linguagem de programação ocorre por meio da introdução sucessiva da semântica aos nomes formalmente especificados dos conjuntos de objetos e operações. A especificação do conjunto de operações leva a tipos de dados abstratos ou estruturas algébricas . O tipo de dados concreto resulta da especificação adicional do conjunto de objetos.

Definição formal de um tipo de dados por meio de uma assinatura

A assinatura é um par (tipos, operações), onde os tipos representam nomes para objetos conjuntos e operações de nomes para operações sobre esses conjuntos. Um exemplo tem a intenção de mostrar isso para uma versão simplificada do conhecido (concreto) tipo de dados Integer , que é descrito em mais detalhes abaixo , que é chamado Simple Integer :

Inteiro simples
sortes int
Operações   zero: -> int
+ : int x int -> int
- : int x int -> int
Fim do inteiro simples

Esta é uma assinatura para um tipo de dados simples assumido , no qual apenas duas operações + e - (além da "operação do produtor") são permitidas. Nomeamos a única variedade int. A operação zero é usada para criar um intelemento. As operações + e - cada uma tem dois dígitos e cada uma retorna um elemento da variedade int. É importante que esta seja uma especificação puramente sintática. O que é um intnão está definido em lugar nenhum. Para isso, o nome da variedade deveria ser atribuído a um conjunto. Nesse caso, uma atribuição significativa seria o conjunto de números naturais . Nada mais é dito sobre a forma como as operações funcionam do que suas arenas e seus resultados. Se o símbolo + corresponde à operação da operação de soma não é especificado aqui - isso também seria completamente impossível, uma vez que nem mesmo se sabe se a operação funciona com os números naturais. Essas atribuições se enquadram no campo da semântica. Uma especificação estendida por semântica poderia, portanto, ter a seguinte aparência:

Inteiro simples
/ * sintaxe pura * /
sortes int            
Operações   zero: -> int
+ : int x int -> int
- : int x int -> int
/ * Atribuição de uma semântica * /
quantias int = IN
Funções zero = 0
+ : int x int   correspondem à soma de dois números de IN
- : int x int   correspondem à diferença aritmética entre dois números de IN
Fim do inteiro simples

No entanto, isso já excede o intervalo de uma assinatura. Em vez disso, esta especificação seria referida como álgebra . Dessa forma, entretanto, a especificação se aproxima do entendimento da linguagem de programação do termo tipo de dados , ao qual uma grande parte do restante do artigo é dedicada.

Tipos de dados em linguagens de programação

Muitas linguagens de programação oferecem seu próprio conjunto de tipos de dados predefinidos para os quais o princípio do respectivo intervalo de valores, como números inteiros , números de ponto flutuante ou cadeias de caracteres , é o mesmo. Os nomes reais desses tipos de dados e as definições precisas dos intervalos de valores e as operações associadas, no entanto, diferem muito em alguns casos, pois dependem da linguagem de programação usada, da plataforma usada e de outros fatores dependentes do compilador .

Tipos de dados na programação usados ​​para áreas de armazenamento atribuídas a uma semântica concreta . Essas áreas de memória são chamadas de variáveis ou constantes . Os tipos de dados permitem que um compilador ou ambiente de execução verifique a compatibilidade de tipo das operações especificadas pelo programador . Às vezes, as operações inadmissíveis já são reconhecidas durante a compilação , de modo que, por exemplo, a divisão de uma cadeia de caracteres 'HANS' pelo número '5', que não é útil e é indefinida em linguagens de programação comuns, é evitada.

É feita uma distinção entre tipos de dados elementares e compostos. Outro termo de classificação é o tipo de dados ordinal .

Tipos de dados ordinais

Os tipos de dados ordinais são caracterizados pelo fato de que uma relação de ordem fixa é definida neles , que atribui um número de ordem único a seus valores. Isso define a ordem dos valores. Como resultado,

  • cada valor, exceto o primeiro, tem exatamente um predecessor direto e
  • cada valor, exceto o último, tem exatamente um sucessor direto.

Se um tipo de dados elementar também é um tipo de dados ordinal depende da definição na linguagem de programação específica. Exemplos:

  • O tipo de enumeração é um tipo de dados ordinal em PASCAL, pois os valores são ordenados da esquerda para a direita; Os sucessores e predecessores podem ser determinados usando funções padrão. Em C, esse não é o caso.
  • Booleano é um tipo de enumeração especial com os dois valores “falso” (valor ordinal 0) e “verdadeiro” (valor ordinal 1), geralmente chamado de “falso” e “verdadeiro” em inglês.
  • Números inteiros e números naturais são tipos de dados inerentemente ordinais.

Tipos de dados elementares

Os tipos de dados elementares , também chamados de tipos de dados simples ou tipos de dados primitivos , só podem aceitar um valor do intervalo de valores correspondente. Eles têm um número fixo de valores ( discrição ), bem como um limite superior e inferior fixos ( finitude ). Por esse motivo, os números reais só podem ser representados como números de ponto flutuante com um certo grau de precisão. Para tipos de dados elementares, as operações básicas são definidas em uma linguagem de programação; para números , essas são as operações aritméticas básicas . Dependendo da linguagem de programação e do intervalo de valores, os tipos de dados têm nomes diferentes e são escritos em maiúsculas ou minúsculas (todas em maiúsculas aqui para uma visão geral).

Números inteiros

Números naturais

  • Designação : BYTE, CARDINAL, DWORD, NATURAL, UINT, SEM ASSINADO, CARTA SEM ASSINADO, INT SEM ASSINADO, SEM ASSINADO LONGO, SEM ASSINADO CURTO, PALAVRA
  • Faixa de valor: principalmente 32 bits (0… 2 32 -1), 8 bits, 16 bits, 64 bits
  • Operações: +, -, * , <,>, = , divisão inteira , módulo , operadores bit a bit

Números de ponto fixo (números decimais)

  • Designação: COMP-3, MOEDA, DECIMAL EMBALADO, DEC, DECIMAL, DINHEIRO, NUMÉRICO
  • Faixa de valores: Faixa de valores diretamente dependente do número máximo de dígitos, que geralmente deve ser especificado; MOEDA (64 bits): -922337203685477,5808… 922337203685477,5807
  • Operações: +, -, * , <,>, = , divisão inteira , módulo

Tipos de enumeração

  • Designação: ENUM, SET ou implícito
  • Faixa de valores: livremente selecionável, por exemplo (PRETO, VERMELHO, AZUL, AMARELO)
  • Operações: <,>, =

Booleano (valores lógicos)

  • Designação: BOOL, BOOLEAN, LOGICAL ou (implicitamente sem identificador)
  • Intervalo de valores: (VERDADEIRO, FALSO) ou (= 0, ≠ 0) ou (= -1, = 0)
  • Operações: NOT , AND , XOR , NOR , NAND , OR , =, ≠

Personagem (personagem único)

  • Designação: CHAR , CHARACTER
  • Faixa de valores: todos os elementos do conjunto de caracteres (por exemplo, letras)
  • Operações: <,>, = , conversão para INTEGER, ...

Números de ponto flutuante

  • Descrição: DOUBLE, DOUBLE PRECISION, EXTENDED, FLOAT, HALF, LONGREAL, REAL, SINGLE, SHORTREAL
  • Faixa de valores: várias definições (veja abaixo)
  • Operações: +, -, *, / , <,>, =
Precisão dos tipos de ponto flutuante
Número de bits
n
Faixa
de valores de ... a

dígitos significativos
METADE 16 3,1 · 10 −5 6,6 · 10 4
ÚNICO, REAL 32 1,5 · 10 −45 3,4 · 10 38 7-8
REAL 48 2,9 · 10 −39 1,7 · 10 38 11-12
DUPLO, REAL 64 5,0 · 10 -324 1,7 x 10 308 15-16
REAL 64 1,1 · 10 -306 1,8 x 10 308 15-16
ESTENDIDO 80 1,9 · 10 −4951 1,1 x 10 4932 19-20

Conjuntos de bits

Os conjuntos de bits representam um conjunto de vários bits . Em algumas linguagens de programação, há um tipo de dados separado e operadores separados (por exemplo, para a união ou interseção ) para os conjuntos de bits para manter a segurança do tipo .

Os conjuntos de bits não devem ser confundidos com tipos de enumeração ou campos de dados , uma vez que vários elementos do tipo de dados (ou conjunto) podem ser endereçados ao mesmo tempo. Em muitas linguagens de programação, tipos de dados inteiros são usados ​​para representar conjuntos de bits, de forma que números e conjuntos de bits sejam compatíveis com atribuição , embora os operadores aritméticos não façam sentido com conjuntos de bits e operadores de conjuntos em conexão com números inteiros.

  • Designação: SET , BITSET
  • Faixa de valores: {} para um conjunto vazio, {i} para um conjunto com o elemento i, {i, j} para um conjunto com os elementos i e j
  • Operações: operador de comparação , conversão de tipo em um inteiro ou elemento de um conjunto de caracteres , operadores de conjunto

Tipos de ponteiro / tipos de dados dinâmicos

Os ponteiros são uma especialidade , cuja faixa de valor real permanece anônima em muitas linguagens de programação, uma vez que são "apenas" referências a quaisquer outros tipos de dados. Dependendo do tipo referenciado, os ponteiros para certos elementos são nomeados separadamente, como ponteiros para arquivos , impressoras ou canais .

Linguagens de programação orientadas a objetos salvam o tipo de dados referenciado pelo ponteiro (por exemplo, no caso de variáveis ​​de instância) junto com o endereço ao qual o ponteiro se refere, de modo que a compatibilidade da atribuição possa ser verificada não apenas para o tipo de dados do endereçamento , mas também para o conteúdo referenciado. Isso é possível até mesmo em tempo de execução e também é necessário para algumas aplicações (por exemplo, no caso de polimorfismo ).

ponteiro

  • Designação: ACCESS, POINTER, IntPtr ou apenas asterisco ( *)
  • Faixa de valores: endereço do tipo básico (geralmente anônimo)
  • Operações: referência, desreferência, em alguns idiomas: +, -, *, /

Ponteiro de zero constante

  • Designação: NULL, VOID, None, NIL, Nothing
  • Faixa de valores: nenhum
  • Operações : =
  • Significado: este ponteiro é diferente de todos os ponteiros para objetos.

Tipos de procedimento

Algumas linguagens de programação, como Oberon , usam tipos de procedimento que são usados ​​para variáveis ​​de ponteiro que podem apontar para procedimentos diferentes com listas de parâmetros formais idênticas .

Tipos de dados compostos

Os tipos de dados compostos são uma construção de dados que consiste em tipos de dados mais simples. Uma vez que podem teoricamente se tornar arbitrariamente complexos, muitas vezes já são contados entre as estruturas de dados . A maioria das linguagens de programação tem em comum:

  • Sequência ( tupla ), tabela; Campo (ambíguo!)
    • Designação : ARRAY , (definição implícita com [n] ou (n) sem identificador)
    • Faixa de valores: Mapeamento de um conjunto finito (conjunto de índice) para a faixa de valores de um tipo básico (tipo de elemento). O conjunto de índices deve ser ordinal. A aplicação de vários índices cria uma ordem multidimensional.
    • Operações: <,>, = , atribuição com compatibilidade de atribuição
    • Exemplo: type 3D-Vektor is ARRAY(1..3) of INTEGER;
  • Cadeias de caracteres de comprimento fixo (basicamente, as cadeias de caracteres em si são apenas uma sequência do tipo de caractere. No entanto, como são predefinidas em muitas linguagens de programação, são listadas separadamente aqui.)
    • Designação : Matriz de CHAR, CHAR (n), CHAR [n]
    • Faixa de valores: todas as strings possíveis
    • Operações: funções de string (substring, concatenação [composição]), <,>, =
  • Sequência de caracteres de comprimento variável. O comprimento pode ser determinado, implicitamente usando um metacaractere como um caractere de final de string (ASCII \ 0), explicitamente usando uma variável ou usando uma função padrão. Freqüentemente, como um tipo de dado abstrato em uma biblioteca padrão.
    • Designação : String , Array de CHAR, VARCHAR, CLOB , Text
    • Faixa de valores: cadeias de caracteres de comprimento variável
    • Operações: funções de string (substring, comprimento, concatenação [composição]), <,>, =
  • seqüência de caracteres binários de comprimento variável. O comprimento pode ser determinado usando uma variável ou uma função padrão.
    • Nome : BLOB
    • Faixa de valores: cadeias de caracteres binários de comprimento variável
    • Operações: comprimento, concatenação [composição], =
  • Composto , frase, estrutura, área
    • Designação : RECORD, STRUCT, CLASS (significado estendido), (definição implícita por meio de números de nível)
    • Faixa de valores: uma rede contém uma série de diferentes componentes que podem ter diferentes tipos de dados. Qualquer tipo é permitido como tipo de componente. Em algumas linguagens de programação orientadas a objetos (por exemplo Oberon ), compostos para descrever o comportamento dos componentes do composto também podem ter procedimentos específicos de tipo usando métodos .
    • Operações: comparação (apenas igualdade ou diferença), atribuição com ou sem compatibilidade de atribuição (fortemente dependente da linguagem de programação)
    • Exemplo: type Prüfung is RECORD (Fach: STRING, Schueler: STRING, Punkte: INTEGER, Lehrer: STRING, Termin: DATUM)
    • Em muitas linguagens de programação, existem opções para interpretar a área de memória de uma rede de forma várias vezes diferente. Isso é chamado de registro variante ou UNION . Na maioria dos casos , entretanto, não há mais nenhum tipo de segurança .

Informações adicionais de formato individual

Ao usar tipos de dados no código-fonte de um programa, especificações de formato individuais e adicionais são frequentemente implementadas para um tipo de dados selecionado. Por exemplo, uma data (ou geralmente uma hora) pode ser criada como um tipo de dado elementar integral, ao qual podem ser adicionadas informações sobre a forma de processamento / representação. A data é então, e. B. armazenado em milissegundos desde 1º de janeiro de 1970 00:00 e pode, com base nisso, ser convertido em algumas outras formas (como 'DD.MM.AAAA' ou 'MM.TT hh: ss'); por favor se refira. Alternativamente, uma data pode, é claro, também ser representada como um composto (por exemplo, de três números para dia, mês e ano).

Funciona como valores de primeira ordem

Em muitas linguagens de programação contemporâneas, além de ponteiros de função, valores de função regulares, literais de função e funções anônimas também estão disponíveis. Estes foram desenvolvidos com base no cálculo lambda e implementados no LISP já em 1958 (embora com um link dinâmico defeituoso). Um correto, ou seja, H. a ligação estática foi, e. B. especificado para Algol 68 . Isso funciona até hoje z. Alguns deles não são entendidos como valores, deve-se à disseminação desse conceito fora da informática, que só agora começa a se espalhar.

Tipo de dados universal

Um tipo de dados universal é entendido como o tipo de valores em uma linguagem de programação com suporte para variáveis ​​não digitadas. Trata-se principalmente da união discriminada dos tipos de valores ocorrentes (elementar, composto, funções etc.). O tipo de dados universal ocorre caracteristicamente em linguagens de script universais . Exemplos do uso de tipos de dados universais em linguagens de outros gêneros são o cálculo lambda , em que as funções são os únicos valores, e Prolog , no qual os dados são dados pela estrutura de Herbrand .

Tipos de dados abstratos

definição
Um tipo abstrato de dados (TAD) é uma coleção de dados em variáveis ​​- vinculados à definição de todas as operações que os acessam.

Uma vez que o acesso (leitura ou escrita) só é possível por meio das operações especificadas, os dados são encapsulados de fora . Cada ADT contém um tipo de dados ou uma estrutura de dados.

Linguagens de programação orientadas a objetos suportam a criação de ADTs por meio de seu conceito de classe, uma vez que os dados e as operações são vinculados aqui e os dados podem ser protegidos. Algumas linguagens de programação modulares , como Ada ou Modula-2, também suportam especificamente a criação de tipos de dados abstratos.

Do ponto de vista técnico, um tipo de dado abstrato define um intervalo definido de valores com significado técnico e suas características específicas. O tipo de dados 'número do cliente' pode ser do tipo elementar 'números inteiros', mas difere devido a um comprimento definido e, por exemplo, B. um dígito de verificação no último dígito. - Forma um subconjunto de todos os números inteiros no comprimento definido. Os dados complexos que dependem uns dos outros também podem ser combinados aqui como ADT. Isso é comum no exemplo de uma representação de períodos de tempo. Uma data de início e uma data de término (ambas têm o tipo de dados 'Data') são vinculadas por meio de uma condição de integridade. Como resultado, o intervalo de valores permitido para a data de término está, em última análise, vinculado a outras condições. - Em última análise, um ADT é qualquer intervalo complexo de valores que está vinculado a valores estáticos e / ou dinâmicos e regras atribuídas para determinar o valor.

Tipos de dados anônimos

Algumas linguagens de programação e a linguagem de definição de estrutura XML , XML Schema, suportam o conceito de tipo de dados anônimos . Este é um tipo de dados para o qual nenhum nome foi definido.

Links da web

Commons : tipos de dados  - coleção de imagens, vídeos e arquivos de áudio
Wikcionário: tipo de dados  - explicações de significados, origens das palavras, sinônimos, traduções

Java

SQL

Ada

Evidência individual

  1. David Axmark, Michael "Monty" Widenius et al.: Os tipos de coluna BLOB e TEXT. (Não está mais disponível online.) In: MySQL 5.1 Reference Manual. MySQL AB, 11 de agosto de 2008, arquivado do original em 18 de julho de 2008 ; Recuperado em 28 de agosto de 2008 . Informação: O link do arquivo foi inserido automaticamente e ainda não foi verificado. Verifique o link original e o arquivo de acordo com as instruções e, em seguida, remova este aviso. @ 1@ 2Modelo: Webachiv / IABot / dev.mysql.com
  2. Jack Melnick et al .: Operações LOB e BFILE. In: Oracle Call Interface Programmer's Guide, 11g Release 1 (11.1). Oracle, maio de 2008, acessado em 28 de agosto de 2008 .
  3. C-Standard ISO / IEC 9899: TC3 Committee Draft open-std.org (PDF) p. 338