Prof. Adriano Teixeira de Souza
   Não podem ser decompostos em valores
    mais simples

   Costumam ser definidos na implementação
    da LP




                      Prof. Adriano Teixeira de Souza
   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
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
   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
   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
 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
   Armazena um número fixo de dígitos
    decimais
    ◦ Existe, por exemplo, no Cobol e no Pascal




                           Prof. Adriano Teixeira de Souza
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
Prof. Adriano Teixeira de Souza
   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
   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
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
   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

Paradigmas de Linguagens de Programação - Tipos primitivos e compostos

  • 1.
  • 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
  • 20.
  • 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