2. Não podem ser decompostos em valores
mais simples
Costumam ser definidos na implementação
da LP
Prof. Adriano Teixeira de Souza
3. Corresponde a um intervalo do conjunto dos
números inteiros
Há vários tipos inteiros numa mesma LP
◦ Normalmente, intervalos são definidos na
implementação do compilador
Em JAVA, o intervalo de cada tipo inteiro é
estabelecido na definição da própria LP
Prof. Adriano Teixeira de Souza
4. Tipo Tamanho Intervalo
(bits)
Início Fim
byte 8 -128 127
short 16 -32768 32767
int 32 -2.147.483.648 2.147.483.647
long 64 -9223372036854775808 9223372036854775807
Prof. Adriano Teixeira de Souza
5. Armazenados como códigos numéricos
◦ Tabelas ASCII e UNICODE
Java oferece o tipo char
Em C, o tipo primitivo char é classificado
como um tipo inteiro
char d;
d = 'a' + 3;
…
while (*p) *q++ = *p++;
Prof. Adriano Teixeira de Souza
6. Tipo mais simples
◦ Possui apenas dois valores
C não possui o tipo de dado booleano, mas
qualquer expressão numérica pode ser usada
como condicional
Valores ¹ zero => verdadeiro
Valores = zero => Þfalso
◦ Abordagem de C pode provocar erros
if (c += 1) x = 10;
JAVA inclui o tipo de dado boolean
Prof. Adriano Teixeira de Souza
7. Por
que a linguagem de
programação C, umas das
mais usadas da história,
não implementa o tipo
booleano?
Prof. Adriano Teixeira de Souza
8. Armazena um número fixo de dígitos
decimais
◦ Existe, por exemplo, no Cobol e no Pascal
Prof. Adriano Teixeira de Souza
9. O tipo primitivo ponto flutuante modela os
números reais
LPs normalmente incluem dois tipos de ponto
flutuante: float e double
Prof. Adriano Teixeira de Souza
10. O numero xx,yyyy . Onde xx é a parte inteira
e yyyy é a parte fracionaria (que pode assumir
um número infinito)
Os computadores não podem representar
números reais da forma acima.
Os computadores adotam método de
representação de números reais chamado
notação científica
O número 52,258 é representado na notação
científica como 0,52258 X 10^2
Prof. Adriano Teixeira de Souza
11. C e C++ e Java permitem que o programador
defina novos tipos primitivos através da
enumeração de identificadores dos valores do
novo tipo
◦ enum mes_letivo {mar, abr, mai, jun, ago, set, out, nov };
◦ enum mes_letivo m1, m2;
Possuem correspondência direta com intervalos
de tipos inteiros e podem ser usados para
indexar vetores e para contadores de repetições
Aumentam a legibilidade e confiabilidade do
código
Prof. Adriano Teixeira de Souza
12. Em PASCAL e ADA, também é possível definir
tipos intervalo de inteiros
◦ type meses = 1 .. 12;
Tipos intervalos herdam as operações dos
inteiros
Prof. Adriano Teixeira de Souza
13. Tipos compostos são aqueles que podem ser
criados a partir de tipos mais simples
◦ registros, vetores, listas, arquivos
Permitem Operações
◦ Ex.: Produtocartesiano, união e conjunto de
potências
Possuem Cardinalidade
◦ Número de valores distintos que fazem parte do
tipo
Prof. Adriano Teixeira de Souza
14. Podem ser implementados em Pascal, C, C++
e JAVA
É necessário alocar nova memória e copiar
conteúdo quando vetor aumenta de tamanho
É encargo do programador controlar alocação
e cópia. Em C e C++, o programador deve
controlar desalocação também. Isso torna a
programação mais complexa e suscetível a
erros
Prof. Adriano Teixeira de Souza
15. Também são conhecidos como matrizes.
Em linguagens que não possuem o conceito
de matrizes, como JAVA, vetores
multidimensionais são obtidos com o uso de
vetores unidimensionais cujos elementos são
outros vetores
◦ int [ ] [ ] a = new int [5] [ ];
O mesmo efeito pode ser obtido em C com o
uso de ponteiros para ponteiros
Prof. Adriano Teixeira de Souza
16. Valores correspondem a uma seqüência de
caracteres
Não existe consenso sobre como devem ser
tratadas
Podem ser consideradas tipos primitivos,
mapeamentos finitos ou tipo recursivo lista
Prof. Adriano Teixeira de Souza
17. Os objetos String encapsulam seqüências de
caracteres de 16-bits (representação
Unicode).
Podemos criar objetos String de várias
formas. Veja alguns exemplos:
◦ String s = “Meu texto”; //mais usual
◦ String s = new String(“Meu texto”);
◦ char [] c = {'M', 'e', 'u', ' ', 't', 'e', 'x', 't', 'o'};
◦ String s = new String(c);
Prof. Adriano Teixeira de Souza
18. length()
◦ Ex: System.out.println(“Hello”.length()); // imprime 5
O operador + é usado para concatenar strings.
◦ Ex: String str = “Java é ” + “segura.”;
charAt(1) – retorna o caracter na posição 1 ('a')
equals(“Java é segura.”) - retorna true
equalsIgnoreCase(“java é segura”) - retorna true
indexOf('J') – retorna 0
lastIndexOf('a') – retorna 12
substring(0, 4) – retorna 'Java'
Prof. Adriano Teixeira de Souza
19. Uma instância da classe StringBuffer
representa uma String que pode ser
facilmente alterada.
O tamanho e conteúdo da seqüencia da
StringBuffer pode ser alterada por alguns
métodos.
Veja o exemplo:
◦ StringBuffer sb = new StringBuffer();
◦ StringBuffer sb = new StringBuffer(“Meu texto”);
◦ sb.append(“!!!”); // Meu texto!!!
◦ sb.insert(0, “Esse é o “); // Esse é o Meu texto!!!
Prof. Adriano Teixeira de Souza
21. Todo tipo primitivo no Java possui uma classe
correspondente chamada de classe wrapper.
A classe wrapper ou empacotadora
simplesmente encapsula um valor primitivo
dentro de um objeto.
Prof. Adriano Teixeira de Souza
22. Classes Wrappers possuem métodos públicos
disponíveis na subclasse Object, devemos dar um
maior destaque para os métodos equals(Object) e
toString, o primeiro é utilizado para comparações
enquanto que o segundo permite que o conteúdo de
um objeto seja representado em formato de texto.
Classes derivadas da subclasse Number possuem
vários métodos para devolverem um tipo primitivo,
tais como: byteValue(), shortValue(), intValue(),
longValue(), doubleValue(), floatValue().
Alem disso a as classes derivadas de Number
possuem também o método
comparareTo(Object) que faz comparações entre
objetos wrapper
Prof. Adriano Teixeira de Souza
23. Tipo primitivo Classe Wrapper Subclasse
Lógico boolean Boolean
Object
Caractere char Caracter
byte Byte
short Short
Inteiro
int Integer
Number
long Long
float Float
Ponto flutuante
double Double
Prof. Adriano Teixeira de Souza
24. Tipos primitivos são bem rápidos
Consomem pouca memória
Além de permitirem operações mais
complexas
São bastantes eficientes em laços e expressões
Prof. Adriano Teixeira de Souza