SlideShare ist ein Scribd-Unternehmen logo
1 von 145
Downloaden Sie, um offline zu lesen
Java


PUC-MG
Prof.ª Kecia Aline Marques Ferreira
Conceitos e Técnicas
 Obtendo Java
 Conceitos Fundamentais
 Pacotes
 Operadores e Estruturas de Controle
 Tipos Básicos
 Modificadores
 Semântica de Referência
 Arranjos
 Composição de Objetos
 Passagem de Parâmetros
 Herança
 Classes Abstratas
 Interfaces
 Polimorfismo
 Tratamento de Exceções
                            Kecia Marques   2
Obtendo JAVA




         Kecia Marques   3
Sun Microsystems
 Java é uma linguagem de programação orientada por objetos
 amplamente difundida.

 Foi desenvolvida pela Sun Microsystems por James Gosling.

 Na linguagem Java, é gerado um código intermediário,
 denominado bytecode, a ser interpretado e executado pela JVM
 (Java Virtual Machine). A vantagem disso é o alto grau de
 portabilidade dos programas.

 .java são os arquivos de código fonte
 .class são os arquivos compilados, os bytecodes.


                             Kecia Marques                      4
Para utilizar Java

 Site oficial de Java: http://java.sun.com/

  Para utilizar Java é preciso:

    Baixar e instalar o JDK: Java SE Development Kit
    Preferencialmente baixar e instalar uma
    ferramenta IDE. Exemplos de IDE free:
     Eclipse: www.eclipse.org
     NetBeans: da Sun, disponível em http://java.sun.com/
                        Kecia Marques                       5
Para saber mais sobre Java

  Tutorial da Sun:

http://java.sun.com/developer/onlineTraining/

  Deitel, H. M.; Deitel, P. J. Java - Como
  Programar. 6. ed. Prentice-Hall, 2005.



                       Kecia Marques            6
Conceitos Fundamentais




          Kecia Marques   7
Classe
 “Uma classe é um conceito OO que encapsula as abstrações de
 dados e procedimentos necessários para descrever o conteúdo
 e o comportamento de alguma entidade do mundo real”.
                                              Pressman, 2002.

 Uma classe é a implementação do objeto, seus serviços e
 propriedades destes serviços.

 Uma classe corresponde a um TAD (tipo abstrato de dados)




                          Kecia Marques                     8
TAD
 TAD (Tipo abstrato de dados) é a representação encapsulada de
 um tipo definido pelas suas operações

 TAD e “uma estrutura de programação na qual uma determinada
 estrutura de dados é conhecida somente via as operações
 realizadas sobre os seus elementos de dados, sem que se
 identifique como a estrutura é codificada”
                                                     Staa, 2000

 A programação orientada por objetos é o resultado do uso da
 abstração de dados no desenvolvimento de softwares




                           Kecia Marques                       9
Objeto
 Uma classe descreve uma categoria genérica.

 Um objeto é uma instância de uma classe.

 Uma instância de uma classe é uma estrutura de dados que
 representa um membro específico da categoria.
 Exemplo: classe: Aluno
          são objetos da classes Aluno: João, Paulo, Sílvia, Marina,
                                       Jurema, Felício.

 Objeto é uma estrutura computacional que representa um objeto do
 mundo real.
                              Kecia Marques                        10
Membros de uma classe
Uma classe possui:

  Atributos: também denominados membros de dados ou campos.

     Representam as características que os objetos da classe
     possuem.

  Métodos: também denominados membros de função ou operações.

     Representam o comportamento que os objetos da classe
     possuem.


                             Kecia Marques                     11
Um exemplo simples – Conta Corrente

Seja o contexto de automação bancária.
 Identificam-se as seguintes classes neste
 contexto: cliente, agência, conta,
 conta corrente, conta poupança,
 dentre outras.

A figura a seguir mostra a estrutura da classe
ContaCorrente.

                     Kecia Marques               12
Um exemplo simples – Conta Corrente

Atributos: numero, agência e saldo.

Métodos: depositar, sacar, consultar saldo.




                        Kecia Marques         13
Um exemplo simples – Conta Corrente
O código a seguir mostra uma implementação possível para esta
   classe em Java.
public class ContaCorrente {
    private long numero;
    private int agencia;
    private double saldo;

    public ContaCorrente(long n, int ag) {
        numero = n;
        agencia = ag;
        saldo = 0.0;
    }




                               Kecia Marques                    14
Um exemplo simples – Conta Corrente
    public void sacar(double valor){
      if (valor > 0)
         saldo = saldo - valor;
    }
    public void depositar(double valor){
      if (valor > 0)
        saldo = saldo + valor;
    }

    public double consultarSaldo(){
      return (saldo);
    }
}


                           Kecia Marques   15
Um exemplo simples – Conta Corrente

 No exemplo, o método ContaCorrente (de mesmo nome
 da classe) é denominado construtor.

 Um método construtor é utilizado para determinar o
 estado inicial do objeto.

 Em Java, objetos são criados utilizando-se a palavra
 reservada new.



                        Kecia Marques                   16
Criação de Objetos
1 ContaCorrente minhaConta;
2   minhaConta = new ContaCorrente(12345, 236);


A linha 1 cria uma área na memória que é uma referência para um
   objeto da classe ContaCorrente.



                     minhaConta




                                  Kecia Marques              17
Criação de Objetos
1 ContaCorrente minhaConta;
2   minhaConta = new ContaCorrente(12345, 236);


A linha 2 cria cria um objeto da classe ContaCorrente e o atribui a
   minhaConta;



                                     Numero = 12345
            minhaConta                Agencia = 236
                                        Saldo = 0



                                Kecia Marques                    18
Comunicação entre Objetos
 Programas orientados por objetos são
 constituídos por objetos que trocam
 mensagens entre si.

 O envio de uma mensagem a um objeto
 corresponde a invocar um método de tal
 objeto.


                   Kecia Marques          19
Comunicação entre Objetos
Em
     minhaConta.depositar(350.00);


O método depositar do objeto minhaConta é invocado. Em outras
  palavras, é enviada uma mensagem para o objeto minhaConta
  para que este realize a operação depositar.




                              Kecia Marques                     20
Interface de Classe
 Uma classe é conhecida externamente por sua interface, que
 descreve os serviços que ela fornece e como eles podem ser
 utilizados, ocultando a sua implementação.

 Os membros públicos de uma classe constituem a sua
 interface.

 Informações que fazem parte da interface da classe:
    nome da classe;
    assinatura dos construtores e métodos públicos da classe;
    atributos públicos da classe.


                             Kecia Marques                      21
Exercício

Para o exemplo de automação bancária citado
   anteriormente:
a) Identifique os atributos e os métodos das
   classes Cliente e Conta Poupança.
b) Implemente a classe Cliente em Java.




                    Kecia Marques              22
Pacotes




          Kecia Marques   23
Organização de Classes

 Em Java classes são organizadas em
 pacotes.

 Um pacote é um conjunto de classes
 relacionadas.

 A palavra package indica o pacote ao qual a
 classe pertence.
                   Kecia Marques           24
Organização de Classes

  Exemplo:

package rh;

public class Funcionario {
  //corpo da classe funcionario
}

  (A classe Funcionario está dentro de um pacote chamado rh. No
  Windows, um pacote corresponde a uma pasta onde ficam armazenadas
  as suas classes).


                              Kecia Marques                           25
Organização de Classes
 Exemplo: o JUnit (uma biblioteca open source para realizar testes
 em software Java) possui os pacotes extensions, framework, runner
 e textui.




                            Kecia Marques                        26
Organização de Classes

 Quando uma classe necessita utilizar uma outra classe
 que não esteja em seu pacote é necessário importar o
 pacote da classe a ser utilizada.

 Isso é feito incluindo um comando import no início do
 código do arquivo .java.
 Exemplo: se quisermos utilizar a classe Date da API de
 Java, temos que importar o seu pacote.
            import java.util.*;

                        Kecia Marques                     27
Organização de Classes
 Cada ferramenta IDE tem uma estrutura particular para
 armazenar os arquivos de um projeto.
 Por exemplo, o Net Beans organiza os arquivos de
 acordo com a estrutura a seguir:

   build: contém os arquivos bytecodes compilados (.class)
   organizados em pacotes
   dist: contém o arquivo .jar gerado
   nbprojetc: contém arquivos de configuração gerados pelo Net
   Beans.
   src: onde ficam os arquivos fontes (.java) organizados em
   pacotes


                           Kecia Marques                         28
Organização de Classes




                  Kecia Marques   29
Operadores e Estruturas de
 Controle



            Kecia Marques    30
Operadores
 Algumas estruturas utilizadas em Java são muito semelhantes
 às de C/C++

 Início de fim de blocos são marcados com { }

 Os operadores utilizados em Java são basicamente os mesmos
 utilizados em C/C++:

 Aritméticos: + - / * % ++ --
 Relacionais: == != >= <=
 Atribuição: =
 Lógicos: && || !

                            Kecia Marques                      31
Estruturas de controle
 Estruturas de controle
   Condicional:

           if (condição){
                comandos;
          }

          if (condição){
               comandos;
          }
          else{
                 comandos;
          }
                             Kecia Marques   32
Estruturas de controle
   Escolha:

         switch (expressão){
          case constante1: comandos;
                             break;
          case constante2: comandos;
                             break;
          ...
          default: comandos;

          }

                      Kecia Marques    33
Estruturas de controle
   Repetição:

        while (condição){
          comandos;
        }

        do{
           comandos;
        } while (condição);

         for (inicialização; condição; passo){
           comandos;
         }
                          Kecia Marques          34
Tipos Básicos




           Kecia Marques   35
Tipos Básicos
 Tipos básicos de Java:

   boolean: true ou false
   byte: inteiro de oito bits com sinal.
   short: inteiro de 16 bits com sinal.
   char: caracter de 16 bits
   int: inteiro de 32 bits com sinal.
   long: inteiro de 64 bits com sinal.
   float: valor em ponto flutuante de 32 bits
   double: valor em ponto flutuante de 64 bits




                              Kecia Marques      36
Wrappers (Empacotadoras)

 Empacotadoras: há uma classe empacotadora para
 cada tipo primitivo em Java

   boolean: Boolean
   byte: Byte
   short: Short
   char: Character
   int: Integer
   long: Long
   float: Float
   double: Double
                      Kecia Marques               37
Wrappers (Empacotadoras)

 Serviços das classes empacotadoras:

   Contrutor: public Integer(int value)
 Integer numero = new Integer(5);

   Contrutor: public Integer(String s)
 Integer numero = new Integer(“5”);
 Se o valor passado estiver no formato incorreto, por exemplo
   uma letra, é lançada uma exceção
   NumberFormatException.

                          Kecia Marques                     38
Wrappers (Empacotadoras)
   public static Integer valueOf(String s)
 Método que retorna um objeto Integer que empacota um inteiro
   cujo valor é dado por s.

   obj.intValue()
 Retorna um valor do tipo primitivo int empacotado pelo objeto
   obj, que é do tipo Integer.

   public static int parseInt("5")
 Retorna um valor do tipo primitivo int que corresponde à
   String passada. É lançada uma exceção
   NumberFormatException se a String passada não for do
   formato de um número.
                           Kecia Marques                        39
Wrappers (Empacotadoras)
 public void testaWrapper(){
       boolean b = true;
       byte bt = 5;
       char c = 'k';
       short s = 10;
       long l = 50;
       int i = 20;
       float f = 3.4f;
       double d = 5.8;

       Boolean B = new Boolean(b);
       Byte BT = new Byte(bt);
       Character C = new Character(c);
       Short S = new Short(s);
       Long L = new Long(l);
       Integer I = new Integer(i);
       Float F = new Float(f);
       Double D = new Double(d);


                               Kecia Marques   40
Wrappers (Empacotadoras)
       //imprime o valor inteiro armazenado em I
       System.out.println("Valor inteiro de I: " + I.intValue());

       //imprime o valor inteiro armazenado em I2
       Integer I2 = Integer.valueOf("700");
       System.out.println("Valor inteiro de I2: " + I2.intValue());

       //imprime o valor de i3
       int i3 = Integer.parseInt("500");
       System.out.println("Valor de i3: " + i3);

       try{
           int i4 = Integer.parseInt("cinco");
           System.out.println("Valor de i4: " + i4);
       }
       catch (NumberFormatException e){
         System.out.println("Formato numérico inválido");
       }
   }


                               Kecia Marques                          41
Modificadores




            Kecia Marques   42
Modificadores de Métodos

 Modificadores de Métodos

   abstract: método abstrato, sem corpo.
   final: método não pode ser redefinido.
   public: método pode ser acessado por outras classes.
   private: método só pode ser acessado pela própria classe.
   protected: método pode ser acessado por classes dentro
   do mesmo pacote ou pelas subclasses.
   static: método compartilhado por todos os objetos da
   classe, com acesso a apenas campos estáticos.

                         Kecia Marques                     43
Modificadores de Atributos

 Modificadores de Atributos

   final: atributo é uma constante.
   public: atributo pode ser acessado por outras classes.
   private: atributo só pode ser acessado pela própria classe.
   protected: atributo pode ser acessado por classes dentro
   do mesmo pacote ou pelas subclasses.
   static: atributo compartilhado por todos os objetos da
   classe.



                          Kecia Marques                      44
Semântica de Referência




            Kecia Marques   45
Semântica de Referência

 Em Java não há ponteiros. Java implementa semântica
 de referência.

 A declaração de um objeto de uma classe C cria uma
 referência para um objeto da classe C.
                       C obj;

 Um objeto criado deve ser associado a uma referência.
                  obj = new C();


                        Kecia Marques                    46
Semântica de Referência

 A atribuição de uma referência b a outra a, resulta em a
 e b referenciando o mesmo objeto.
        a = new C();
        b = new C();
        a = b;

    a                                      a

                       após executar a=b
    b                                      b




                         Kecia Marques                      47
Semântica de Referência

 O que ocorre com o objeto para o qual não há mais
 referência?

 Java possui o Coletor de Lixo (Garbage Collector) que
 elimina objetos pendentes na memória de tempos em
 tempos.




                        Kecia Marques                    48
Exercício

 Analise o programa a seguir, escrito em Java
 e formado pelas classes Principal e
 ClasseMaluca.

            O que ele imprime?




                   Kecia Marques            49
Exercício
 public class ClasseMaluca {

     private int dado1;
     private int dado2;

     public ClasseMaluca(int d1, int d2) {
         dado1 = d1;
         dado2 = d2;
     }

     public int getDado1(){
        return (dado1);
     }

     public int getDado2(){
        return (dado2);
     }
 }




                                         Kecia Marques   50
Exercício
public class Principal {
    public static void main (String[] args) {

        ClasseMaluca objA, objB;

        objA = new ClasseMaluca(10,20);
        objB = new ClasseMaluca(50,100);

        System.out.println(objA.getDado1() + " " + objA.getDado2());
        System.out.println(objB.getDado1() + " " + objB.getDado2());

        objA = new ClasseMaluca(30,60);
        System.out.println(objA.getDado1() + " " + objA.getDado2());

        objB = objA;
        System.out.println(objB.getDado1() + " " + objB.getDado2());
    }
}



                                   Kecia Marques                       51
Arranjos




           Kecia Marques   52
Arranjos

 Declaração de arranjos:

   [] junto ao tipo indica que todos os elementos
   declarados são arranjos.
   int[] a, b; // a e b são arranjos

   [] junto da variável indica que ela é um arranjo
   int a[], b; // a é arranjo, mas b não

                       Kecia Marques                53
Arranjos

 Criação de arranjos:

   Arranjos devem ser criados:
 a = new int[4];


  a           0    1          2        3




                       Kecia Marques       54
Arranjos

   No caso de arranjo de objetos, cada posição do
   arranjo deve ser criada para ser então utilizada.
 a = new A[4];
 a[0] = new A(5,9,8);
 a[3] = new A(11,23,5);

  a            0     1          2        3




                         Kecia Marques                 55
Arranjos
public static void exemploArranjo(){
      int[] a = new int[10], b;
      int c[], d;
      b = new int[10];
      c = new int[5];
      // d = new int[3]; Este comando dá erro de compilação
      //                   porque d não é arranjo
      a[0] = 10;
      a[9] = 20;
      // a[10] = 5; Este comando gera a exceção
      //            ArrayIndexOutOfBoundsException


      for (int i=0; i < a.length; i++)
          System.out.print(a[i] + " - ");



                              Kecia Marques                   56
Arranjos
      A[] vetorObjetos = new A[5];

      vetorObjetos[1] = new A(1,2,3);

      vetorObjetos[1].ImprimeValores();

      // vetorObjetos[2].ImprimeValores();
      // Este comando gera a exceção NullPointerException
  }




                               Kecia Marques                57
Composição de Objetos




           Kecia Marques   58
Composição de Objetos

 Uma classe pode possuir um membro de dado que seja
 um objeto de outra classe.

 Esse tipo de relacionamento é chamado composição.

 Exemplos:
   Um Círculo possui um Ponto como centro.
   Uma Conta Corrente é de um Cliente.
   Uma Turma tem um Professor.
   Uma Turma tem muitos Alunos.

                          Kecia Marques               59
Classe Ponto
public class Ponto {
    private float x, y;

    public Ponto(float x, float y){
      this.x = x;
      this.y = y;
    }

    public void alterarX(float x){
       this.x = x;
    }

    public void alterarY(float y){
       this.y = y;
    }

    public float obterX(){
      return x;
    }

    public float obterY(){
      return y;
    }
}

                                 Kecia Marques   60
Classe Circulo
public class Circulo {

    private float raio;
    private Ponto centro;

    public Circulo(float x, float y, float r){
       raio = r;
       centro = new Ponto(x,y);
    }

    public void alterarCentro(float x, float y){
       centro.alterarX(x);
       centro.alterarY(y);
    }

    public void alterarRaio(float r){
        raio = r;
    }

    public float obterCentroX(){
      return centro.obterX();
    }




                                   Kecia Marques   61
Classe Circulo
    public float obterCentroY(){
      return centro.obterY();
    }

    public float obterRaio(){
      return raio;
    }

}




                                   Kecia Marques   62
Classe Aplicacao
import java.util.Scanner;

public class Aplicacao {

    public static void main(String[] args){
          float x, y, raio;
          Circulo circ;

          Scanner in = new Scanner (System.in);

          System.out.println("Digite as coordenadas do centro: ");
          x = in.nextFloat();
          y = in.nextFloat();
          System.out.println("Digite o raio: ");
          raio = in.nextFloat();

          circ = new Circulo (x, y, raio);
          System.out.println("Circulo criado: ");
          System.out.println("Raio: " + circ.obterRaio());
          System.out.println("Centro: (" + circ.obterCentroX() + ", " +
                             circ.obterCentroY() + ").");
          System.out.println("");
    }
}

                                 Kecia Marques                            63
Passagem de Parâmetros




           Kecia Marques   64
Passagem de parâmetros

 Em Java a passagem de parâmetros para métodos se
 dá sempre por valor.

 Não existe passagem de parâmetro por referência em
 Java.

 O que ocorre quando um objeto é passado por
 parâmetro?



                       Kecia Marques                  65
Passagem de parâmetros
 Quando um objeto é passado por parâmetro, na verdade
 a sua referência está sendo passada por parâmetro.

 Alterações realizadas no objeto dentro do método tem
 impacto no argumento passado para o método.

 Por exemplo, se o objeto a for passado como parâmetro
 para um método m(A x) e em m ocorrer alguma
 alteração em x (enquanto este estiver referenciando o
 mesmo objeto que a), após a execução de m, a estará
 com as alterações sofridas por x.

                        Kecia Marques                   66
Passagem de parâmetros

 Exemplo: considerando as classes Ponto e Circulo
 mostradas anteriormente, o que a classe Aplicação a
 seguir gera como saída para entradas 1, 1 e 2?




                        Kecia Marques                  67
Classe Aplicação
public class Aplicacao {

    public static void alteraCirculo(Circulo c){

        c.alterarCentro(10, 20);
        c.alterarRaio(5);
        System.out.println("nn**Dados do circulo dentro do método: **");
        System.out.println("Raio: " + c.obterRaio());
        System.out.println("Centro: (" + c.obterCentroX() + ", " +
                             c.obterCentroY() + ").");

        c = new Circulo(3,3,9);
        System.out.println("nn**Dados do novo circulo dentro do método:
                            **");
        System.out.println("Raio: " + c.obterRaio());
        System.out.println("Centro: (" + c.obterCentroX() + ", " +
                             c.obterCentroY() + ").");

    }




                                 Kecia Marques                               68
Classe Aplicação
 public static void main(String[] args){
        float x, y, raio;
        Circulo circ;

        Scanner in = new Scanner (System.in);

        System.out.println("Digite as coordenadas do centro: ");
        x = in.nextFloat();
        y = in.nextFloat();
        System.out.println("Digite o raio: ");
        raio = in.nextFloat();

        circ = new Circulo (x, y, raio);
        System.out.println("Circulo criado: ");
        System.out.println("Raio: " + circ.obterRaio());
        System.out.println("Centro: (" + circ.obterCentroX() + ", " +
                           circ.obterCentroY() + ").");

        //Passando objeto circ como parâmetro
        alteraCirculo(circ);




                               Kecia Marques                            69
Classe Aplicação

              System.out.println("n**Circulo após execução do método: **");
              System.out.println("Raio: " + circ.obterRaio());
              System.out.println("Centro: (" + circ.obterCentroX() + ", " +
                                 circ.obterCentroY() + ").");
              System.out.println("");
     }
}

Circulo criado:
Raio: 2.0
Centro: (1.0, 1.0).

**Dados do circulo dentro do método: **
Raio: 5.0
Centro: (10.0, 20.0).


**Dados do novo circulo dentro do método: **
Raio: 9.0
Centro: (3.0, 3.0).

**Circulo após execução do método: **
Raio: 5.0
Centro: (10.0, 20.0).



                                               Kecia Marques                   70
Passagem de Arranjos como
Parâmetros

 Para passar um arranjo como parâmetro, deve-se
 indicar o nome do arranjo sem colchetes na chamada do
 método.
                 metodo(arranjo);


 O método que recebe o arranjo como parâmetro deve
 indicar isso na sua lista de parâmetros.

               void metodo(int b[])




                       Kecia Marques                 71
Passagem de Arranjos como
Parâmetros

 Quando um arranjo é passado como parâmetro, o que o
 método recebe é uma cópia da sua referência. Desta
 forma, alterações sofridas pelo arranjo no método
 refletem no arranjo que foi passado como parâmetro.




                      Kecia Marques                72
Classe Aplicação
public class TesteArranjo {

   public static void alteraArranjo(int b[]){

       for(int i=0; i<b.length; i++){
         b[i] = i*2;
       }

       System.out.println(“n**Arranjo b**");
       for (int valor : b)
           System.out.print(valor + " - ");


       b = new int[3];
       System.out.println("n**Novo arranjo b**");
       for (int valor : b)
           System.out.print(valor + " - ");
   }




                                 Kecia Marques       73
Classe Aplicação
    public static void main(String[] args){
       int[] a = {1,2,3,4,5};


        System.out.println("n**Arranjo a antes da chamada do método**");
        for (int valor : a)
            System.out.print(valor + " - ");

        alteraArranjo(a);
        System.out.println("n**Arranjo a após a chamada do método**");
        for (int valor : a)
            System.out.print(valor + " - ");

    }

}




                                  Kecia Marques                             74
Classe Aplicação
**Arranjo a antes da chamada do método**
1-2-3-4-5–
**Arranjo b**
0-2-4-6-8-
**Novo arranjo b**
0-0-0-
**Arranjo a após a chamada do método**
0-2-4-6-8-




                                Kecia Marques   75
Herança




          Kecia Marques   76
Herança

 Herança é um recurso que permite que novas
 classes sejam definidas a partir de classes já
 definidas.

 Na hierarquia de classes:
   Super classes (ou ascendente): são as ascendentes de
   um classe.
   Sub classes (ou descendente): são as descendentes de
   um classe
   Classe mãe: é a ascendente direta de um classe
   Classe filha: é a descendente direta de uma classe.

                        Kecia Marques                     77
Herança
          No exemplo:
            Filha é descendente ou subclasse de Mãe e
            Avó.
            Mãe e Avó são ascendentes ou
            superclasses de Filha
            Mãe é descendente ou subclasse de Avó.
            Mãe é filha de Avó.
          Significa que:
            Mãe herda características e comportamentos
            de Avó.
            Filha herda características e
            comportamentos de Mãe e de Avó.

                    Kecia Marques                        78
Herança
  No exemplo:
    Conta é superclasse de Conta Corrente e de Conta
    Poupança.
    Conta Corrente e Conta Poupança são subclasses
    de Conta.




                      Kecia Marques                79
Herança

 Significa que:

   Conta Corrente herda características e
   comportamentos de Conta.

   Conta Poupança herda características e
   comportamentos de Conta.



                    Kecia Marques           80
Herança




          Kecia Marques   81
Herança

 No exemplo:
   Conta Corrente possui como atributos: número, saldo
   e limite, pois herda os dois primeiros da classe Conta.

   Conta Corrente possui como métodos: criar,
   depositar, sacar, consultarSaldo,
   obterNumero, e consultarSaldoTotal,
   consultarLimite e alterarLimite, sendo que os
   cinco primeiros são herdados de Conta.



                        Kecia Marques                    82
Herança



 No exemplo:
   Conta Poupança possui como atributos:
   número, saldo e rendimento, pois herda os dois
   primeiros da classe Conta.

   Conta Poupança possui como métodos:
   criar, depositar, sacar,
   consultarSaldo , obterNumero e
   atualizarRendimentos , sendo que, os cinco
   primeiros são herdados de Conta.

                      Kecia Marques                 83
Herança

 Exemplo de implementação de herança em
 Java
 A palavra chave extends indica herança em Java.

          public class A extends B

      Indica que a classe A herda da classe B



                     Kecia Marques                 84
Herança

 public class A {
     protected int x, y;
     private int z;

    public A(int a, int b, int c) {
        x = a;
        y = b;
        z = c;
    }

    public int obterX(){
       return (x);
    }
    public int obterY(){
       return (y);
    }

                             Kecia Marques   85
Herança
public int obterZ(){
      return (z);
   }
   public void alterarX(int a){
      x = a;
   }
   public void alterarY(int a){
      y = a;
   }
   public void alterarZ(int a){
      z = a;
   }




                          Kecia Marques   86
Herança
    public void ImprimeValores(){
           System.out.println("O valor de X é: " + x);
           System.out.println("O valor de Y é: " + y);
           System.out.println("O valor de Z é: " + z);
       }
}


public class B extends A{
    private int k;

      public B(int a, int b, int c, int d){
         super (a,b,c);
         k = d;
      }




                                  Kecia Marques          87
Herança

    public void ImprimeValores(){
        System.out.println("O valor de X é: " + x);
        System.out.println("O valor de Y é: " + y);
        System.out.println("O valor de K é: " + k);
        System.out.println("Z não pertence a esta
                           classe");
        System.out.println("O valor de Z da superclasse
                           é: " + obterZ());
    }

}



                           Kecia Marques                  88
Herança
public class TesteHeranca {

    public static void main (String[] args){
       B obj1 = new B(10,20,30,40);

        obj1.ImprimeValores();

        obj1.alterarY(100);

        obj1.ImprimeValores();

    }
}




                                 Kecia Marques   89
Herança

 O exemplo de código a seguir mostra a
 implementação das classes Conta e
 ContaCorrente em Java. É mostrada
 também uma classe MainBanco para
 exemplificar o uso das classes criadas.




                 Kecia Marques         90
Herança
public class Conta {
    long numero;
    double saldo;

    public Conta(long n) {
        numero = n;
        saldo = 0;
    }

    public void depositar(double v){
      if (v > 0)
         saldo = saldo + v;
    }

                        Kecia Marques   91
Herança
  public boolean sacar(double v){
     if ( (v > 0) && (saldo-v) >= 0){
       saldo = saldo - v;
       return true;
     }
     else
          return false;
  }

  public double consultarSaldo(){
     return(saldo);
  }


                       Kecia Marques    92
Herança
  public long obterNumero(){
       return(numero);
    }
} // Fim da classe Conta

public class ContaCorrente extends Conta{
    double limite;

    public ContaCorrente(long n, double l) {
        super(n);
        limite = l;
    }


                        Kecia Marques          93
Herança

  public void alterarLimite(double l){
     if (l > 0)
        limite = l;
  }

  public double consultarLimite(){
     return limite;
  }




                      Kecia Marques      94
Herança
public boolean sacar(double v){
    if ((v > 0) && (saldo + limite - v ) >= 0){
      saldo = saldo - v;
      return true;
    }
    else
        return false;
   }

    public double consultarSaldoTotal(){
       return(saldo + limite);
    }
} // Fim da classe Conta Corrente.



                           Kecia Marques          95
Herança
public class MainBanco {

  public static void main (String[] args){

       ContaCorrente minhaConta;

       minhaConta = new ContaCorrente(12345, 300);

       System.out.println("Numero da Conta: " +
                          minhaConta.obterNumero());
       System.out.println("Saldo: " +
                         minhaConta.consultarSaldo());



                           Kecia Marques                 96
Herança
     minhaConta.alterarLimite(200);

     System.out.println("Limite: " +
                      minhaConta.consultarLimite());
     System.out.println("Saldo Total: " +
                  minhaConta.consultarSaldoTotal());


     minhaConta.depositar(300);
     System.out.println("Saldo após depósito: " +
                     minhaConta.consultarSaldo());
     System.out.println("Saldo total após depósito: "
                 + minhaConta.consultarSaldoTotal());




                      Kecia Marques                     97
Herança


     if (minhaConta.sacar(200)) {
        System.out.println("Saldo após saque: " +
                       minhaConta.consultarSaldo());
        System.out.println("Saldo total após saque: "
                 + minhaConta.consultarSaldoTotal());
     }
     else
        System.out.println("Não foi possível realizar
            operação. Saldo total disponível é de " +
            minhaConta.consultarSaldoTotal());




                      Kecia Marques                     98
Herança


        if (minhaConta.sacar(700)) {
           System.out.println("Saldo total após saque: "
                    + minhaConta.consultarSaldoTotal());
        }
        else
           System.out.println("Não foi possível realizar
               operação. Saldo total disponível é de " +
               minhaConta.consultarSaldoTotal());
    }

 }//Fim da classe MainBanco


                          Kecia Marques                    99
Herança

  Herança provê reuso de classes já
  construídas.

  Alguns benefícios do uso de herança:
    evitar duplicação de código;
    reúso de código;
    manutenção mais fácil (desde que não haja
    abuso do recurso);
    extensibilidade.

                     Kecia Marques              100
Herança

 Exercício:
   Implemente a classe ContaPoupança.

   Altere a classe MainBanco para criar e realizar
   operações sobre a classe ContaPoupança que
   você criou.

   Pesquise: para que servem as seguintes palavras
   reservadas de Java: protected, public, private,
   static, final.

                      Kecia Marques                  101
Classes Abstratas




            Kecia Marques   102
Classes Abstratas

 A linguagem Java possui o recurso de criação de
 classes abstratas.

 Características de uma classe abstrata:
   é designada pela palavra chave abstract.
         abstract class FiguraGeometrica{...}
   podem possuir métodos sem definição de corpo (método
   abstrato).
           public abstract void CalculaArea();
   objetos de classes abstratas não podem ser criados.
   pode haver hierarquias de classes abstratas.

                         Kecia Marques                    103
Classes Abstratas

 Propósito de uso de classes abstratas:
 fornecer uma superclasse apropriada da qual
 outras classes possam herdar interface e/ou
 implementação.

 As classes herdeiras de uma classe abstrata
 são denominadas classes concretas.


                    Kecia Marques          104
Interface




            Kecia Marques   105
Interface
 Interface de Java é um recurso que permite especificar os
 serviços de uma classe.

                 interface Forma {...}

 Uma interface declara:
   métodos públicos sem definição de corpo (métodos não podem
   ser estáticos);
   campos públicos, estáticos e finais.

 Objetos não podem ser criados diretamente a partir de uma
 interface.


                           Kecia Marques                        106
Exemplo
 Classes que implementam uma interface devem implementar
 todos os métodos daquela interface e todos eles devem ser
 públicos.

       class Circulo implements Forma {...}

 Uma interface pode ser implementada por várias classes.

 Uma classe pode implementar várias interfaces.

 Interface é um caso especial de classe abstrata.




                            Kecia Marques                    107
Polimorfismo




               Kecia Marques   108
Polimorfismo
 Verificação de Tipos: “atividade que garante que os
 operandos utilizados com um operador sejam de tipos
 compatíveis.”

 Tipo Compatível: “é um tipo cujos valores são
 adequados para a realização da operação designada
 pelo operador ou que pode ser convertido implicitamente
 em um tipo cujos valores sejam adequados.”
                                            Varejão, 2004.




                        Kecia Marques                   109
Polimorfismo
 LP fracamente tipada: somente parte dos erros de
 tipos são verificados.

 Ex.: C.
 Em C, um ponteiro para float pode acessar um posição
 de memória ocupada por um char, por exemplo.

 LP fortemente tipada: realizam uma verificação
 extremamente ampla de tipos.
 Ex.: Java


                        Kecia Marques                   110
Polimorfismo
 Polimorfismo é a característica que possibilita a criação
 de código capaz de operar sobre valores distintos.

 Por exemplo, onde se espera um dado de um tipo de X,
 é possível receber um dado de um tipo Y.
             Polimorfismo = “muitas formas”




                         Kecia Marques                  111
Polimorfismo
 Coersão: é a conversão implícita de tipos.

 Quando um operação é realizada sobre um operando de
 tipo diferente do esperado, o compilador verifica se é
 possível realizar a conversão.

   Por exemplo, em C, um valor char pode ser
   convertido implicitamente para um valor int.
      int a;
      char c = ‘k’;
      a = c;
                        Kecia Marques                112
Polimorfismo
  Sobrecarga (ou Overloading): um identificador ou
  operador é sobrecarregado quando pode ser utilizado
  para designar duas ou mais operações distintas.
   Ex.: O operador + em Java.
       int a, b;
       a = 10; b = a + 20;
       System.out.println(“Resutaldo = ” + b );


+ é utilizado para realizar a operação de soma entre
  valores numéricos e para realizar concatenação de
  strings.
                                Kecia Marques           113
Polimorfismo
 Inclusão: é o polimorfismo decorrente de herança.

“Um subtipo S de um tipo T é formado por um
 subconjunto dos valores de T. Assim, todo valor de S
 deve ser também um valor de T.”




                        Kecia Marques                   114
Polimorfismo
Ex.: Considere as classes A e B do exemplo de herança
  dado anteriormente. A classe a seguir exemplifica uma
  situação polimórfica.




                         Kecia Marques                    115
Polimorfismo

Exemplo 1)
public class TesteHeranca {

    public static void main (String[] args){

        B obj1 = new B(10,20,30,40);
        A obj2 = new A (200, 300, 400);
        testePolimorfismo(obj2);
        testePolimorfismo(obj1);
    }

    public static void testePolimorfismo(A obj){
       obj.ImprimeValores();
    }
}


                              Kecia Marques        116
Polimorfismo
O programa anterior imprime:
   O valor de X é: 200
   O valor de Y é: 300
   O valor de Z é: 400
   O valor de X é: 10
   O valor de Y é: 20
   O valor de K é: 40
   Z não pertence a esta classe
   O valor de Z da superclasse é: 30



                           Kecia Marques   117
Tratamento de Exceções




           Kecia Marques   118
Tratamento de Exceções

 Conceito
 Ausência de mecanismos para exceções em LP
 Mecanismos para exceções em LP
 Lançamento de Exceções
 Tratamento de Exceções
 Propagação de Exceções
 Relançamento de Exceções
 Continuação após o Tratamento de Exceções


                    Kecia Marques             119
Conceito
  Robustez: é a capacidade de um software continuar
  em operação corretamente mesmo em condições
  anormais.

  Problemas: Como prevenir-se de erros em tempo de
  execução? Como contornar situações anormais?

  Exemplos de situações anormais: divisão por zero,
  fim de arquivo, overflow, utilização de um objeto não
  inicializado, acesso a um índice inválido de um vetor.

                        Kecia Marques                      120
Conceito
 Exceção:

  “é um evento ocorrido durante a execução de um
  programa que desvia o fluxo normal de
  instruções. ”

  “É uma condição provocada por uma situação
  excepcional que requer uma ação específica
  imediata.”
                                   Varejão, 2004.
                    Kecia Marques              121
Ausência de Mecanismos para
Exceções
 Quando a LP utilizada não fornece
 mecanismos para exceções, o programador
 usa recursos como:

  Abortar o programa.

  Utilizar códigos de erro.
  Ex.: uma função para ler dados de entrada. Caso algum
  dos dados seja inválido, a função retorna –1.

                        Kecia Marques                     122
Ausência de Mecanismos para
Exceções
   Testar a condição anormal antes que ela ocorra.
  Ex.: if (x!=0)  div = y/x;
      else cout << “Divisão por zero”;


 Conseqüências:
   Programas menos confiáveis.
   Programas com legibilidade prejudicada.

 Exemplos de LP sem mecanismos para
 exceções: C e Pascal.
                      Kecia Marques                  123
LP com Mecanismos para
Exceções
 Promovem os seguintes benefícios:

   A diminuição da sobrecarga do texto do programa.
   Desta forma, os programas têm melhor legibilidade.

   Os programas obtidos são mais confiáveis. Isso
   ocorre por que fica mais fácil tratar as condições
   anormais.

 Exemplos de LP com esses mecanismos: ADA, Java e
 Eiffel.

                         Kecia Marques                  124
LP com Mecanismos para
Exceções
 Exceções predefinidas: são parte da própria linguagem
 ou de sua biblioteca padrão.

 Exceções criadas pelo programador: são aquelas
 definidas pelo programador para um aplicação ou uma
 biblioteca.




                        Kecia Marques                    125
LP com Mecanismos para
Exceções
 Exemplos de exceções em Java:

 NullPointerException: ocorre quando a operação
 realizada gera um acesso a uma área não definida
 (nula).

 IndexOutOfBoundsException: ocorre quando é realizado
  um acesso a um vetor por índice que está fora dos seus
  limites.


                        Kecia Marques                  126
Lançamento de Exceções
 O lançamento (ou sinalização) de exceções
 pode ser realizado:

  Automaticamente: o próprio mecanismo de
  exceção é o responsável pelo lançamento da
  exceção. Esta situação pode surgir em qualquer
  ponto do programa passível de ocorrência de
  situação anormal.


                    Kecia Marques                  127
Lançamento de Exceções
  Explicitamente: o programador realiza o
  lançamento de uma exceção.

  O exemplo a seguir mostra um lançamento
  explícito de exceção em Java. Para tal, emprega-
  se a palavra reservada throw.

   try{
      throw new Exception();
  }


                       Kecia Marques             128
Tratamento de Exceções
 Tratadores de exceções são trechos de códigos
 responsáveis por tomar atitudes em resposta à
 ocorrência de uma exceção.

 Em Java:

   os comandos do bloco try são os tratados;
   os comandos das cláusulas catch correspondem ao
   tratamento das exceções ocorridas no bloco try
   correspondente;

                       Kecia Marques             129
Tratamento de Exceções
  podem ser incluídas várias cláusulas catch após
  o try;

  a cada catch corresponde um classe de
  exceções.




                     Kecia Marques              130
Tratamento de Exceções
Ex.:
...
String n, d;
...
try{
    int num = Integer.valueOf(n).intValue();
    int den = Integer.valueOf(d).intValue();
    int div = num / den;
}
catch(NumberFormatException x){
  System.out.println(“Erro na formatação.”);
}




                           Kecia Marques       131
Tratamento de Exceções
catch(ArithmeticException y){
  System.out.println(“Divisão por zero”);
}
catch(Exception z){
  System.out.println(“Ocorreu um erro durante a
                    operação”);
}

No exemplo:

  a cláusula catch(NumberFormatException x) captura exceções
  de formato de números. O comando dentro do bloco deste catch
  é o tratamento dado a este tipo de exceção.


                           Kecia Marques                    132
Tratamento de Exceções
 a cláusula catch(ArithmeticException y) captura exceções de
 ocorridas em operações aritméticas. Neste caso, serve para
 tratar divisões por zero. O comando dentro do bloco deste catch
 é o tratamento dado a este tipo de exceção.

 a cláusula catch(Exception z) captura qualquer tipo de
 exceções de ocorridas dentro do bloco try. O comando dentro do
 bloco deste catch é o tratamento genérico dado a qualquer outra
 exceção que ocorra dentro do bloco try, que não sejam dos tipos
 ArithmeticException ou NumberFormatException.




                            Kecia Marques                      133
Propagação de Exceções
 Quando um exceção ocorre, busca-se pela cláusula
 catch associada ao seu tipo. A sequência para
 realizar esta busca é a que aparece no código.

 Quando um exceção não é tratada no bloco em que
 ocorreu, ela é retornada para o bloco mais externo.

 No caso de chamadas de métodos, é retornada
 para o método chamador.

                      Kecia Marques                134
Propagação de Exceções
 Se o bloco ou método para o qual a exceção foi
 retornada não fizer o seu tratamento, ela é retornada
 para o bloco (ou método chamador) mais externo a este.

 Se a exceção chegar ao método principal sem que seja
 tratada, o programa é abortado.




                       Kecia Marques                 135
Relançamento de Exceções
 Em algumas situações, pode ser necessário que o local
 onde ocorreu a exceção a trate de maneira parcial,
 deixando o restante de seu tratamento para um dos
 blocos mais externo (ou para um dos métodos na
 seqüência de chamada). Neste caso, utiliza-se o recurso
 de relançamento de exceções.




                        Kecia Marques                 136
Relançamento de Exceções

 Ex.:
 ...
 try{
    try{
       ...
       throw new IOException();
       ...
    }
    catch(IOException e){
       ...      //tratamento parcial da exceção e
       throw e; //relançamento da exceção e
    }
 }
 catch(IOException e){
    ...// restante do tratamento da exceção.
 }

                              Kecia Marques         137
Continuação após o Tratamento
de Exceções
 A execução de um programa sem a
 ocorrência de exceções segue o fluxo normal
 determinado no programa.

  O que ocorre na presença de um exceção?
     Qual será o fluxo do programa nesta
                   situação?


                   Kecia Marques          138
Continuação após o Tratamento
de Exceções

  Em geral, as LP adotam a abordagem de terminação.

  Terminação: quando ocorre um exceção, o erro é
  considerado como crítico e a execução não retorna ao ponto
  no qual foi gerada. A execução é desviada para um ponto
  externo e são encerradas as unidades na pilha de execução,
  a partir do ponto onde ocorreu a exceção até a unidade
  anterior a que o tratador de exceção foi executado. A
  execução continua na unidade na qual o tratador foi
  encontrado.




                          Kecia Marques                        139
Continuação após o Tratamento
de Exceções

  A cláusula finally de Java:
     Em algumas situações, pode ser necessária a
     execução de um conjunto de comandos, independente
     do tipo de exceção ocorrida.

    A cláusula finally de Java provê este recurso.

    Em geral, este recurso é utilizado quando deseja-se
    restabelecer o estado de algum objeto de forma
    independente da ocorrência e da propagação de
    exceções. Por exemplo, quando deseja-se encerrar
    conexões com banco de dados ou fechar arquivos
    quando ocorrer uma exceção qualquer.

                         Kecia Marques                    140
Continuação após o Tratamento
de Exceções

  O bloco finally de Java executa quando:

    uma exceção for lançada no bloco try correspondente ou
    em um de seus blocos catch;

    o seu bloco try fechar utilizando return, break ou continue.




                           Kecia Marques                           141
Continuação após o Tratamento
de Exceções
  É possível a existência de bloco try sem a
  associação de uma cláusula catch. Mas, não é
  possível a existência de um bloco try sem pelo
  menos um cláusula catch ou finally.

  Em outras palavras, um bloco try pode não
  possuir cláusulas catch, mas, neste caso, deve
  possuir então uma cláusula finally.



                    Kecia Marques             142
Continuação após o Tratamento
de Exceções
Exemplo:
...
try {
    System.out.println(“Primeiro try”);
    try{
       System.out.println(“Segundo try”);
       ... //aqui ocorreu uma exceção qualquer
    }
    finally{
       System.out.println(Finally do segundo try);
    }
}




                            Kecia Marques            143
Continuação após o Tratamento
de Exceções
catch(Exception p){
  System.out.println(“Tratamento para a
                    exceção no primeiro try”);
}
finally{
   System.out.println(“Finally do primeiro try”);
}



  No exemplo, os comandos das duas
  cláusulas finally serão executadas, assim
  como os comandos da cláusula catch.
                        Kecia Marques               144
Bibliografia
 Barnes, David e Kölling, M. Programação Orientada a Objetos com
 Java. São Paulo: Pearson Prentice Hall, 2004.

 Bigonha, R. S. e Bigonha, M. A. S. Programação Modular. Apostila.
 Belo Horizonte: DCC-UFMG, 2001.

 Deitel, H. M.; Deitel, P. J. Java - Como Programar. 6. ed. Prentice-
 Hall, 2005.

 HORSTMANN,CAY. Big Java. Bookman, 2004.

 HORSTMANN, C.; Cornell, G. Core Java 2: Fundamentos - vol. 1 .
 7.ed. Alta Books. 2005.

                              Kecia Marques                             145

Weitere ähnliche Inhalte

Was ist angesagt?

Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros Karoline Tavares
 
Lógica de Programação - Procedimento
Lógica de Programação - ProcedimentoLógica de Programação - Procedimento
Lógica de Programação - ProcedimentoWesley R. Bezerra
 
Estrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TADEstrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TADLeinylson Fontinele
 
03 - Orientação a objetos e classes em C# v1.0
03 - Orientação a objetos e classes em C# v1.003 - Orientação a objetos e classes em C# v1.0
03 - Orientação a objetos e classes em C# v1.0César Augusto Pessôa
 
Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Daniel Brandão
 
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...Leinylson Fontinele
 
Conceitos de Banco de dados e SGBD
Conceitos de Banco de dados e SGBDConceitos de Banco de dados e SGBD
Conceitos de Banco de dados e SGBDVinicius Buffolo
 
Normalização - Banco de Dados
Normalização - Banco de DadosNormalização - Banco de Dados
Normalização - Banco de DadosRoberto Grande
 
Programação Orientação a Objetos - Herança
Programação Orientação a Objetos - HerançaProgramação Orientação a Objetos - Herança
Programação Orientação a Objetos - HerançaDaniel Brandão
 
Programação Orientada a Objetos parte 1
Programação Orientada a Objetos parte 1Programação Orientada a Objetos parte 1
Programação Orientada a Objetos parte 1Elaine Cecília Gatto
 
Introdução sobre desenvolvimento web
Introdução sobre desenvolvimento webIntrodução sobre desenvolvimento web
Introdução sobre desenvolvimento webRodrigo Rodrigues
 
Estrutura de Dados Aula 13 - Árvores (conceito, elementos, tipos e utilizações)
Estrutura de Dados Aula 13 - Árvores (conceito, elementos, tipos e utilizações)Estrutura de Dados Aula 13 - Árvores (conceito, elementos, tipos e utilizações)
Estrutura de Dados Aula 13 - Árvores (conceito, elementos, tipos e utilizações)Leinylson Fontinele
 
Módulo 12 - Introdução aos sistemas de informação
Módulo 12 - Introdução aos sistemas de informaçãoMódulo 12 - Introdução aos sistemas de informação
Módulo 12 - Introdução aos sistemas de informaçãoLuis Ferreira
 
Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Bruno Grange
 
Estrutura de Dados - Aula 12 - Pesquisa de Dados (Sequencial e Binária)
Estrutura de Dados - Aula 12 - Pesquisa de Dados (Sequencial e Binária)Estrutura de Dados - Aula 12 - Pesquisa de Dados (Sequencial e Binária)
Estrutura de Dados - Aula 12 - Pesquisa de Dados (Sequencial e Binária)Leinylson Fontinele
 
Como Apresentar Codigo em Slides - Javou #7 - 2016
Como Apresentar Codigo em Slides - Javou #7 - 2016Como Apresentar Codigo em Slides - Javou #7 - 2016
Como Apresentar Codigo em Slides - Javou #7 - 2016Rafael Ponte
 
Apresentação java
Apresentação javaApresentação java
Apresentação javamunosai
 

Was ist angesagt? (20)

Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros
 
Lógica de Programação - Procedimento
Lógica de Programação - ProcedimentoLógica de Programação - Procedimento
Lógica de Programação - Procedimento
 
Estrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TADEstrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TAD
 
03 - Orientação a objetos e classes em C# v1.0
03 - Orientação a objetos e classes em C# v1.003 - Orientação a objetos e classes em C# v1.0
03 - Orientação a objetos e classes em C# v1.0
 
Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)
 
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
 
Conceitos de Banco de dados e SGBD
Conceitos de Banco de dados e SGBDConceitos de Banco de dados e SGBD
Conceitos de Banco de dados e SGBD
 
Normalização - Banco de Dados
Normalização - Banco de DadosNormalização - Banco de Dados
Normalização - Banco de Dados
 
Programação Orientação a Objetos - Herança
Programação Orientação a Objetos - HerançaProgramação Orientação a Objetos - Herança
Programação Orientação a Objetos - Herança
 
Programação Orientada a Objetos parte 1
Programação Orientada a Objetos parte 1Programação Orientada a Objetos parte 1
Programação Orientada a Objetos parte 1
 
Introdução sobre desenvolvimento web
Introdução sobre desenvolvimento webIntrodução sobre desenvolvimento web
Introdução sobre desenvolvimento web
 
Linguagem c
Linguagem cLinguagem c
Linguagem c
 
Estrutura de Dados Aula 13 - Árvores (conceito, elementos, tipos e utilizações)
Estrutura de Dados Aula 13 - Árvores (conceito, elementos, tipos e utilizações)Estrutura de Dados Aula 13 - Árvores (conceito, elementos, tipos e utilizações)
Estrutura de Dados Aula 13 - Árvores (conceito, elementos, tipos e utilizações)
 
Módulo 12 - Introdução aos sistemas de informação
Módulo 12 - Introdução aos sistemas de informaçãoMódulo 12 - Introdução aos sistemas de informação
Módulo 12 - Introdução aos sistemas de informação
 
Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)
 
Estrutura de Dados - Aula 12 - Pesquisa de Dados (Sequencial e Binária)
Estrutura de Dados - Aula 12 - Pesquisa de Dados (Sequencial e Binária)Estrutura de Dados - Aula 12 - Pesquisa de Dados (Sequencial e Binária)
Estrutura de Dados - Aula 12 - Pesquisa de Dados (Sequencial e Binária)
 
Aula 09 - introducao oo
Aula 09 - introducao ooAula 09 - introducao oo
Aula 09 - introducao oo
 
Como Apresentar Codigo em Slides - Javou #7 - 2016
Como Apresentar Codigo em Slides - Javou #7 - 2016Como Apresentar Codigo em Slides - Javou #7 - 2016
Como Apresentar Codigo em Slides - Javou #7 - 2016
 
Apresentação java
Apresentação javaApresentação java
Apresentação java
 
Algoritmo 06 - Array e Matrizes
Algoritmo 06 - Array e MatrizesAlgoritmo 06 - Array e Matrizes
Algoritmo 06 - Array e Matrizes
 

Andere mochten auch

Curso Java Basico
Curso Java BasicoCurso Java Basico
Curso Java BasicoJoel Lobo
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesOziel Moreira Neto
 
Introdução ao JAVA (linguagem de programação WEB)
Introdução ao JAVA (linguagem de programação WEB)Introdução ao JAVA (linguagem de programação WEB)
Introdução ao JAVA (linguagem de programação WEB)Luis Borges Gouveia
 
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃO
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃOCURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃO
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃOMicrosoft
 
Construtores em Java
Construtores em JavaConstrutores em Java
Construtores em JavaEderson Lima
 
Introdução a Linguagem Java
Introdução a Linguagem JavaIntrodução a Linguagem Java
Introdução a Linguagem JavaUFPA
 
Classes Java , JDBC / Swing / Collections
Classes Java , JDBC / Swing / Collections Classes Java , JDBC / Swing / Collections
Classes Java , JDBC / Swing / Collections Eduardo Carvalho
 
Lógica de programação - Como estudar sem achar chato e ainda ter motivação
Lógica de programação - Como estudar sem achar chato e ainda ter motivaçãoLógica de programação - Como estudar sem achar chato e ainda ter motivação
Lógica de programação - Como estudar sem achar chato e ainda ter motivaçãoFelipe Fontoura
 
Aula de Introdução - JAVA
Aula de Introdução  - JAVAAula de Introdução  - JAVA
Aula de Introdução - JAVAMoises Omena
 
Programando em java
Programando em javaProgramando em java
Programando em javaVictor Hugo
 
Sucesso na gestão de TI e sistemas
Sucesso na gestão de TI e sistemasSucesso na gestão de TI e sistemas
Sucesso na gestão de TI e sistemasPMO Fast Track
 
Conhecendo A Linguagem de Programação Java
Conhecendo A Linguagem de Programação JavaConhecendo A Linguagem de Programação Java
Conhecendo A Linguagem de Programação JavaMicael Coutinho
 
HERANÇA - Programação Orientada a Objetos JAVA
HERANÇA - Programação Orientada a Objetos JAVAHERANÇA - Programação Orientada a Objetos JAVA
HERANÇA - Programação Orientada a Objetos JAVAAparicio Junior
 
Curso Java #05 - Heranca, Polimorfismo e Classe abstratas
Curso Java #05 - Heranca, Polimorfismo e Classe abstratasCurso Java #05 - Heranca, Polimorfismo e Classe abstratas
Curso Java #05 - Heranca, Polimorfismo e Classe abstratasRenato Sousa
 
Fundamentos do java: estruturas de controle
Fundamentos do java: estruturas de controleFundamentos do java: estruturas de controle
Fundamentos do java: estruturas de controleNécio de Lima Veras
 
Java - Aula 4 - Sobrecarga de construtores, UML e Herança
Java - Aula 4 - Sobrecarga de construtores, UML e HerançaJava - Aula 4 - Sobrecarga de construtores, UML e Herança
Java - Aula 4 - Sobrecarga de construtores, UML e HerançaMoises Omena
 

Andere mochten auch (20)

Curso Java Basico
Curso Java BasicoCurso Java Basico
Curso Java Basico
 
Curso Java Basico
Curso Java BasicoCurso Java Basico
Curso Java Basico
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para Iniciantes
 
Introdução ao JAVA (linguagem de programação WEB)
Introdução ao JAVA (linguagem de programação WEB)Introdução ao JAVA (linguagem de programação WEB)
Introdução ao JAVA (linguagem de programação WEB)
 
Curso de Java #05 - Swing e JavaFX
Curso de Java #05 - Swing e JavaFXCurso de Java #05 - Swing e JavaFX
Curso de Java #05 - Swing e JavaFX
 
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃO
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃOCURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃO
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃO
 
Construtores em Java
Construtores em JavaConstrutores em Java
Construtores em Java
 
Introdução a Linguagem Java
Introdução a Linguagem JavaIntrodução a Linguagem Java
Introdução a Linguagem Java
 
Classes Java , JDBC / Swing / Collections
Classes Java , JDBC / Swing / Collections Classes Java , JDBC / Swing / Collections
Classes Java , JDBC / Swing / Collections
 
Lógica de programação - Como estudar sem achar chato e ainda ter motivação
Lógica de programação - Como estudar sem achar chato e ainda ter motivaçãoLógica de programação - Como estudar sem achar chato e ainda ter motivação
Lógica de programação - Como estudar sem achar chato e ainda ter motivação
 
Aula de Introdução - JAVA
Aula de Introdução  - JAVAAula de Introdução  - JAVA
Aula de Introdução - JAVA
 
Programando em java
Programando em javaProgramando em java
Programando em java
 
Sucesso na gestão de TI e sistemas
Sucesso na gestão de TI e sistemasSucesso na gestão de TI e sistemas
Sucesso na gestão de TI e sistemas
 
Conhecendo A Linguagem de Programação Java
Conhecendo A Linguagem de Programação JavaConhecendo A Linguagem de Programação Java
Conhecendo A Linguagem de Programação Java
 
HERANÇA - Programação Orientada a Objetos JAVA
HERANÇA - Programação Orientada a Objetos JAVAHERANÇA - Programação Orientada a Objetos JAVA
HERANÇA - Programação Orientada a Objetos JAVA
 
POO - 13 - Arrays em Java
POO - 13 - Arrays em JavaPOO - 13 - Arrays em Java
POO - 13 - Arrays em Java
 
Curso Java #05 - Heranca, Polimorfismo e Classe abstratas
Curso Java #05 - Heranca, Polimorfismo e Classe abstratasCurso Java #05 - Heranca, Polimorfismo e Classe abstratas
Curso Java #05 - Heranca, Polimorfismo e Classe abstratas
 
Fundamentos do java: estruturas de controle
Fundamentos do java: estruturas de controleFundamentos do java: estruturas de controle
Fundamentos do java: estruturas de controle
 
POO - 10 - Herança
POO - 10 - HerançaPOO - 10 - Herança
POO - 10 - Herança
 
Java - Aula 4 - Sobrecarga de construtores, UML e Herança
Java - Aula 4 - Sobrecarga de construtores, UML e HerançaJava - Aula 4 - Sobrecarga de construtores, UML e Herança
Java - Aula 4 - Sobrecarga de construtores, UML e Herança
 

Ähnlich wie Java conceitos fundamentais

Ähnlich wie Java conceitos fundamentais (20)

Classes e Objectos JAVA
Classes e Objectos JAVAClasses e Objectos JAVA
Classes e Objectos JAVA
 
Introdução a programação Orientada a Objeto
Introdução a programação Orientada a ObjetoIntrodução a programação Orientada a Objeto
Introdução a programação Orientada a Objeto
 
Java7
Java7Java7
Java7
 
Java11
Java11Java11
Java11
 
Curso de Java (Parte 2)
 Curso de Java (Parte 2) Curso de Java (Parte 2)
Curso de Java (Parte 2)
 
Script c
Script cScript c
Script c
 
Programação OO - Java
Programação OO - JavaProgramação OO - Java
Programação OO - Java
 
TESTE
TESTETESTE
TESTE
 
Reflections
ReflectionsReflections
Reflections
 
Orientação a Objetos para Desenvolvedores Android
Orientação a Objetos para Desenvolvedores AndroidOrientação a Objetos para Desenvolvedores Android
Orientação a Objetos para Desenvolvedores Android
 
JAVA REFLETCION
JAVA REFLETCIONJAVA REFLETCION
JAVA REFLETCION
 
http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/
 
Aula 02 - Classes em C++ ( Parte 1 )
Aula 02 - Classes em C++ ( Parte 1 )Aula 02 - Classes em C++ ( Parte 1 )
Aula 02 - Classes em C++ ( Parte 1 )
 
Aula02
Aula02Aula02
Aula02
 
Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...
 
Apresentação curso de Extensão em Java (UERJ-IME) v1
Apresentação curso de Extensão em Java (UERJ-IME) v1Apresentação curso de Extensão em Java (UERJ-IME) v1
Apresentação curso de Extensão em Java (UERJ-IME) v1
 
Curso Java Básico - Aula02
Curso Java Básico - Aula02Curso Java Básico - Aula02
Curso Java Básico - Aula02
 
Mini aula-java
Mini aula-javaMini aula-java
Mini aula-java
 
Artigo c#
Artigo c#Artigo c#
Artigo c#
 
Java aula 2
Java aula 2Java aula 2
Java aula 2
 

Mehr von Breno Vitorino

Linux: X Window System e Gerenciadores de janelas
Linux: X Window System e Gerenciadores de janelasLinux: X Window System e Gerenciadores de janelas
Linux: X Window System e Gerenciadores de janelasBreno Vitorino
 
Linux: Kernel, Runlevels e Virtualização
Linux: Kernel, Runlevels e VirtualizaçãoLinux: Kernel, Runlevels e Virtualização
Linux: Kernel, Runlevels e VirtualizaçãoBreno Vitorino
 
Linux: Instalação de aplicativos
Linux: Instalação de aplicativosLinux: Instalação de aplicativos
Linux: Instalação de aplicativosBreno Vitorino
 
Introdução ao Software Livre e Linux
Introdução ao Software Livre e LinuxIntrodução ao Software Livre e Linux
Introdução ao Software Livre e LinuxBreno Vitorino
 
FSM, vetores e funções em PHP
FSM, vetores e funções em PHPFSM, vetores e funções em PHP
FSM, vetores e funções em PHPBreno Vitorino
 
Validação e Operações CRUD em PHP
Validação e Operações CRUD em PHPValidação e Operações CRUD em PHP
Validação e Operações CRUD em PHPBreno Vitorino
 
Fundamentos de PHP, phpMyAdmin e MySQL (parte 2)
Fundamentos de  PHP, phpMyAdmin e MySQL (parte 2)Fundamentos de  PHP, phpMyAdmin e MySQL (parte 2)
Fundamentos de PHP, phpMyAdmin e MySQL (parte 2)Breno Vitorino
 
Fundamentos de PHP, phpMyAdmin e MySQL (parte 1)
Fundamentos de  PHP, phpMyAdmin e MySQL (parte 1)Fundamentos de  PHP, phpMyAdmin e MySQL (parte 1)
Fundamentos de PHP, phpMyAdmin e MySQL (parte 1)Breno Vitorino
 
Evolução das arquiteturas para aplicações Web
Evolução das arquiteturas para aplicações WebEvolução das arquiteturas para aplicações Web
Evolução das arquiteturas para aplicações WebBreno Vitorino
 
Sistema gerenciador de conteúdo
Sistema gerenciador de conteúdoSistema gerenciador de conteúdo
Sistema gerenciador de conteúdoBreno Vitorino
 
Introdução à Arquitetura Web
Introdução à Arquitetura WebIntrodução à Arquitetura Web
Introdução à Arquitetura WebBreno Vitorino
 
Como criar blogs: WordPress.com
Como criar blogs: WordPress.comComo criar blogs: WordPress.com
Como criar blogs: WordPress.comBreno Vitorino
 
Uma visao geral sobre blogs
Uma visao geral sobre blogsUma visao geral sobre blogs
Uma visao geral sobre blogsBreno Vitorino
 
Arquitetura de aplicações Web 2.0 em Java
Arquitetura de aplicações Web 2.0 em JavaArquitetura de aplicações Web 2.0 em Java
Arquitetura de aplicações Web 2.0 em JavaBreno Vitorino
 

Mehr von Breno Vitorino (17)

Linux: X Window System e Gerenciadores de janelas
Linux: X Window System e Gerenciadores de janelasLinux: X Window System e Gerenciadores de janelas
Linux: X Window System e Gerenciadores de janelas
 
Linux: Kernel, Runlevels e Virtualização
Linux: Kernel, Runlevels e VirtualizaçãoLinux: Kernel, Runlevels e Virtualização
Linux: Kernel, Runlevels e Virtualização
 
Linux: Instalação de aplicativos
Linux: Instalação de aplicativosLinux: Instalação de aplicativos
Linux: Instalação de aplicativos
 
Introdução ao Software Livre e Linux
Introdução ao Software Livre e LinuxIntrodução ao Software Livre e Linux
Introdução ao Software Livre e Linux
 
Modelo de Camadas
Modelo de CamadasModelo de Camadas
Modelo de Camadas
 
Criando seu Blog
Criando seu BlogCriando seu Blog
Criando seu Blog
 
FSM, vetores e funções em PHP
FSM, vetores e funções em PHPFSM, vetores e funções em PHP
FSM, vetores e funções em PHP
 
Validação e Operações CRUD em PHP
Validação e Operações CRUD em PHPValidação e Operações CRUD em PHP
Validação e Operações CRUD em PHP
 
Fundamentos de PHP, phpMyAdmin e MySQL (parte 2)
Fundamentos de  PHP, phpMyAdmin e MySQL (parte 2)Fundamentos de  PHP, phpMyAdmin e MySQL (parte 2)
Fundamentos de PHP, phpMyAdmin e MySQL (parte 2)
 
Fundamentos de PHP, phpMyAdmin e MySQL (parte 1)
Fundamentos de  PHP, phpMyAdmin e MySQL (parte 1)Fundamentos de  PHP, phpMyAdmin e MySQL (parte 1)
Fundamentos de PHP, phpMyAdmin e MySQL (parte 1)
 
Evolução das arquiteturas para aplicações Web
Evolução das arquiteturas para aplicações WebEvolução das arquiteturas para aplicações Web
Evolução das arquiteturas para aplicações Web
 
Introdução ao PHP
Introdução ao PHPIntrodução ao PHP
Introdução ao PHP
 
Sistema gerenciador de conteúdo
Sistema gerenciador de conteúdoSistema gerenciador de conteúdo
Sistema gerenciador de conteúdo
 
Introdução à Arquitetura Web
Introdução à Arquitetura WebIntrodução à Arquitetura Web
Introdução à Arquitetura Web
 
Como criar blogs: WordPress.com
Como criar blogs: WordPress.comComo criar blogs: WordPress.com
Como criar blogs: WordPress.com
 
Uma visao geral sobre blogs
Uma visao geral sobre blogsUma visao geral sobre blogs
Uma visao geral sobre blogs
 
Arquitetura de aplicações Web 2.0 em Java
Arquitetura de aplicações Web 2.0 em JavaArquitetura de aplicações Web 2.0 em Java
Arquitetura de aplicações Web 2.0 em Java
 

Java conceitos fundamentais

  • 2. Conceitos e Técnicas Obtendo Java Conceitos Fundamentais Pacotes Operadores e Estruturas de Controle Tipos Básicos Modificadores Semântica de Referência Arranjos Composição de Objetos Passagem de Parâmetros Herança Classes Abstratas Interfaces Polimorfismo Tratamento de Exceções Kecia Marques 2
  • 3. Obtendo JAVA Kecia Marques 3
  • 4. Sun Microsystems Java é uma linguagem de programação orientada por objetos amplamente difundida. Foi desenvolvida pela Sun Microsystems por James Gosling. Na linguagem Java, é gerado um código intermediário, denominado bytecode, a ser interpretado e executado pela JVM (Java Virtual Machine). A vantagem disso é o alto grau de portabilidade dos programas. .java são os arquivos de código fonte .class são os arquivos compilados, os bytecodes. Kecia Marques 4
  • 5. Para utilizar Java Site oficial de Java: http://java.sun.com/ Para utilizar Java é preciso: Baixar e instalar o JDK: Java SE Development Kit Preferencialmente baixar e instalar uma ferramenta IDE. Exemplos de IDE free: Eclipse: www.eclipse.org NetBeans: da Sun, disponível em http://java.sun.com/ Kecia Marques 5
  • 6. Para saber mais sobre Java Tutorial da Sun: http://java.sun.com/developer/onlineTraining/ Deitel, H. M.; Deitel, P. J. Java - Como Programar. 6. ed. Prentice-Hall, 2005. Kecia Marques 6
  • 7. Conceitos Fundamentais Kecia Marques 7
  • 8. Classe “Uma classe é um conceito OO que encapsula as abstrações de dados e procedimentos necessários para descrever o conteúdo e o comportamento de alguma entidade do mundo real”. Pressman, 2002. Uma classe é a implementação do objeto, seus serviços e propriedades destes serviços. Uma classe corresponde a um TAD (tipo abstrato de dados) Kecia Marques 8
  • 9. TAD TAD (Tipo abstrato de dados) é a representação encapsulada de um tipo definido pelas suas operações TAD e “uma estrutura de programação na qual uma determinada estrutura de dados é conhecida somente via as operações realizadas sobre os seus elementos de dados, sem que se identifique como a estrutura é codificada” Staa, 2000 A programação orientada por objetos é o resultado do uso da abstração de dados no desenvolvimento de softwares Kecia Marques 9
  • 10. Objeto Uma classe descreve uma categoria genérica. Um objeto é uma instância de uma classe. Uma instância de uma classe é uma estrutura de dados que representa um membro específico da categoria. Exemplo: classe: Aluno são objetos da classes Aluno: João, Paulo, Sílvia, Marina, Jurema, Felício. Objeto é uma estrutura computacional que representa um objeto do mundo real. Kecia Marques 10
  • 11. Membros de uma classe Uma classe possui: Atributos: também denominados membros de dados ou campos. Representam as características que os objetos da classe possuem. Métodos: também denominados membros de função ou operações. Representam o comportamento que os objetos da classe possuem. Kecia Marques 11
  • 12. Um exemplo simples – Conta Corrente Seja o contexto de automação bancária. Identificam-se as seguintes classes neste contexto: cliente, agência, conta, conta corrente, conta poupança, dentre outras. A figura a seguir mostra a estrutura da classe ContaCorrente. Kecia Marques 12
  • 13. Um exemplo simples – Conta Corrente Atributos: numero, agência e saldo. Métodos: depositar, sacar, consultar saldo. Kecia Marques 13
  • 14. Um exemplo simples – Conta Corrente O código a seguir mostra uma implementação possível para esta classe em Java. public class ContaCorrente { private long numero; private int agencia; private double saldo; public ContaCorrente(long n, int ag) { numero = n; agencia = ag; saldo = 0.0; } Kecia Marques 14
  • 15. Um exemplo simples – Conta Corrente public void sacar(double valor){ if (valor > 0) saldo = saldo - valor; } public void depositar(double valor){ if (valor > 0) saldo = saldo + valor; } public double consultarSaldo(){ return (saldo); } } Kecia Marques 15
  • 16. Um exemplo simples – Conta Corrente No exemplo, o método ContaCorrente (de mesmo nome da classe) é denominado construtor. Um método construtor é utilizado para determinar o estado inicial do objeto. Em Java, objetos são criados utilizando-se a palavra reservada new. Kecia Marques 16
  • 17. Criação de Objetos 1 ContaCorrente minhaConta; 2 minhaConta = new ContaCorrente(12345, 236); A linha 1 cria uma área na memória que é uma referência para um objeto da classe ContaCorrente. minhaConta Kecia Marques 17
  • 18. Criação de Objetos 1 ContaCorrente minhaConta; 2 minhaConta = new ContaCorrente(12345, 236); A linha 2 cria cria um objeto da classe ContaCorrente e o atribui a minhaConta; Numero = 12345 minhaConta Agencia = 236 Saldo = 0 Kecia Marques 18
  • 19. Comunicação entre Objetos Programas orientados por objetos são constituídos por objetos que trocam mensagens entre si. O envio de uma mensagem a um objeto corresponde a invocar um método de tal objeto. Kecia Marques 19
  • 20. Comunicação entre Objetos Em minhaConta.depositar(350.00); O método depositar do objeto minhaConta é invocado. Em outras palavras, é enviada uma mensagem para o objeto minhaConta para que este realize a operação depositar. Kecia Marques 20
  • 21. Interface de Classe Uma classe é conhecida externamente por sua interface, que descreve os serviços que ela fornece e como eles podem ser utilizados, ocultando a sua implementação. Os membros públicos de uma classe constituem a sua interface. Informações que fazem parte da interface da classe: nome da classe; assinatura dos construtores e métodos públicos da classe; atributos públicos da classe. Kecia Marques 21
  • 22. Exercício Para o exemplo de automação bancária citado anteriormente: a) Identifique os atributos e os métodos das classes Cliente e Conta Poupança. b) Implemente a classe Cliente em Java. Kecia Marques 22
  • 23. Pacotes Kecia Marques 23
  • 24. Organização de Classes Em Java classes são organizadas em pacotes. Um pacote é um conjunto de classes relacionadas. A palavra package indica o pacote ao qual a classe pertence. Kecia Marques 24
  • 25. Organização de Classes Exemplo: package rh; public class Funcionario { //corpo da classe funcionario } (A classe Funcionario está dentro de um pacote chamado rh. No Windows, um pacote corresponde a uma pasta onde ficam armazenadas as suas classes). Kecia Marques 25
  • 26. Organização de Classes Exemplo: o JUnit (uma biblioteca open source para realizar testes em software Java) possui os pacotes extensions, framework, runner e textui. Kecia Marques 26
  • 27. Organização de Classes Quando uma classe necessita utilizar uma outra classe que não esteja em seu pacote é necessário importar o pacote da classe a ser utilizada. Isso é feito incluindo um comando import no início do código do arquivo .java. Exemplo: se quisermos utilizar a classe Date da API de Java, temos que importar o seu pacote. import java.util.*; Kecia Marques 27
  • 28. Organização de Classes Cada ferramenta IDE tem uma estrutura particular para armazenar os arquivos de um projeto. Por exemplo, o Net Beans organiza os arquivos de acordo com a estrutura a seguir: build: contém os arquivos bytecodes compilados (.class) organizados em pacotes dist: contém o arquivo .jar gerado nbprojetc: contém arquivos de configuração gerados pelo Net Beans. src: onde ficam os arquivos fontes (.java) organizados em pacotes Kecia Marques 28
  • 29. Organização de Classes Kecia Marques 29
  • 30. Operadores e Estruturas de Controle Kecia Marques 30
  • 31. Operadores Algumas estruturas utilizadas em Java são muito semelhantes às de C/C++ Início de fim de blocos são marcados com { } Os operadores utilizados em Java são basicamente os mesmos utilizados em C/C++: Aritméticos: + - / * % ++ -- Relacionais: == != >= <= Atribuição: = Lógicos: && || ! Kecia Marques 31
  • 32. Estruturas de controle Estruturas de controle Condicional: if (condição){ comandos; } if (condição){ comandos; } else{ comandos; } Kecia Marques 32
  • 33. Estruturas de controle Escolha: switch (expressão){ case constante1: comandos; break; case constante2: comandos; break; ... default: comandos; } Kecia Marques 33
  • 34. Estruturas de controle Repetição: while (condição){ comandos; } do{ comandos; } while (condição); for (inicialização; condição; passo){ comandos; } Kecia Marques 34
  • 35. Tipos Básicos Kecia Marques 35
  • 36. Tipos Básicos Tipos básicos de Java: boolean: true ou false byte: inteiro de oito bits com sinal. short: inteiro de 16 bits com sinal. char: caracter de 16 bits int: inteiro de 32 bits com sinal. long: inteiro de 64 bits com sinal. float: valor em ponto flutuante de 32 bits double: valor em ponto flutuante de 64 bits Kecia Marques 36
  • 37. Wrappers (Empacotadoras) Empacotadoras: há uma classe empacotadora para cada tipo primitivo em Java boolean: Boolean byte: Byte short: Short char: Character int: Integer long: Long float: Float double: Double Kecia Marques 37
  • 38. Wrappers (Empacotadoras) Serviços das classes empacotadoras: Contrutor: public Integer(int value) Integer numero = new Integer(5); Contrutor: public Integer(String s) Integer numero = new Integer(“5”); Se o valor passado estiver no formato incorreto, por exemplo uma letra, é lançada uma exceção NumberFormatException. Kecia Marques 38
  • 39. Wrappers (Empacotadoras) public static Integer valueOf(String s) Método que retorna um objeto Integer que empacota um inteiro cujo valor é dado por s. obj.intValue() Retorna um valor do tipo primitivo int empacotado pelo objeto obj, que é do tipo Integer. public static int parseInt("5") Retorna um valor do tipo primitivo int que corresponde à String passada. É lançada uma exceção NumberFormatException se a String passada não for do formato de um número. Kecia Marques 39
  • 40. Wrappers (Empacotadoras) public void testaWrapper(){ boolean b = true; byte bt = 5; char c = 'k'; short s = 10; long l = 50; int i = 20; float f = 3.4f; double d = 5.8; Boolean B = new Boolean(b); Byte BT = new Byte(bt); Character C = new Character(c); Short S = new Short(s); Long L = new Long(l); Integer I = new Integer(i); Float F = new Float(f); Double D = new Double(d); Kecia Marques 40
  • 41. Wrappers (Empacotadoras) //imprime o valor inteiro armazenado em I System.out.println("Valor inteiro de I: " + I.intValue()); //imprime o valor inteiro armazenado em I2 Integer I2 = Integer.valueOf("700"); System.out.println("Valor inteiro de I2: " + I2.intValue()); //imprime o valor de i3 int i3 = Integer.parseInt("500"); System.out.println("Valor de i3: " + i3); try{ int i4 = Integer.parseInt("cinco"); System.out.println("Valor de i4: " + i4); } catch (NumberFormatException e){ System.out.println("Formato numérico inválido"); } } Kecia Marques 41
  • 42. Modificadores Kecia Marques 42
  • 43. Modificadores de Métodos Modificadores de Métodos abstract: método abstrato, sem corpo. final: método não pode ser redefinido. public: método pode ser acessado por outras classes. private: método só pode ser acessado pela própria classe. protected: método pode ser acessado por classes dentro do mesmo pacote ou pelas subclasses. static: método compartilhado por todos os objetos da classe, com acesso a apenas campos estáticos. Kecia Marques 43
  • 44. Modificadores de Atributos Modificadores de Atributos final: atributo é uma constante. public: atributo pode ser acessado por outras classes. private: atributo só pode ser acessado pela própria classe. protected: atributo pode ser acessado por classes dentro do mesmo pacote ou pelas subclasses. static: atributo compartilhado por todos os objetos da classe. Kecia Marques 44
  • 45. Semântica de Referência Kecia Marques 45
  • 46. Semântica de Referência Em Java não há ponteiros. Java implementa semântica de referência. A declaração de um objeto de uma classe C cria uma referência para um objeto da classe C. C obj; Um objeto criado deve ser associado a uma referência. obj = new C(); Kecia Marques 46
  • 47. Semântica de Referência A atribuição de uma referência b a outra a, resulta em a e b referenciando o mesmo objeto. a = new C(); b = new C(); a = b; a a após executar a=b b b Kecia Marques 47
  • 48. Semântica de Referência O que ocorre com o objeto para o qual não há mais referência? Java possui o Coletor de Lixo (Garbage Collector) que elimina objetos pendentes na memória de tempos em tempos. Kecia Marques 48
  • 49. Exercício Analise o programa a seguir, escrito em Java e formado pelas classes Principal e ClasseMaluca. O que ele imprime? Kecia Marques 49
  • 50. Exercício public class ClasseMaluca { private int dado1; private int dado2; public ClasseMaluca(int d1, int d2) { dado1 = d1; dado2 = d2; } public int getDado1(){ return (dado1); } public int getDado2(){ return (dado2); } } Kecia Marques 50
  • 51. Exercício public class Principal { public static void main (String[] args) { ClasseMaluca objA, objB; objA = new ClasseMaluca(10,20); objB = new ClasseMaluca(50,100); System.out.println(objA.getDado1() + " " + objA.getDado2()); System.out.println(objB.getDado1() + " " + objB.getDado2()); objA = new ClasseMaluca(30,60); System.out.println(objA.getDado1() + " " + objA.getDado2()); objB = objA; System.out.println(objB.getDado1() + " " + objB.getDado2()); } } Kecia Marques 51
  • 52. Arranjos Kecia Marques 52
  • 53. Arranjos Declaração de arranjos: [] junto ao tipo indica que todos os elementos declarados são arranjos. int[] a, b; // a e b são arranjos [] junto da variável indica que ela é um arranjo int a[], b; // a é arranjo, mas b não Kecia Marques 53
  • 54. Arranjos Criação de arranjos: Arranjos devem ser criados: a = new int[4]; a 0 1 2 3 Kecia Marques 54
  • 55. Arranjos No caso de arranjo de objetos, cada posição do arranjo deve ser criada para ser então utilizada. a = new A[4]; a[0] = new A(5,9,8); a[3] = new A(11,23,5); a 0 1 2 3 Kecia Marques 55
  • 56. Arranjos public static void exemploArranjo(){ int[] a = new int[10], b; int c[], d; b = new int[10]; c = new int[5]; // d = new int[3]; Este comando dá erro de compilação // porque d não é arranjo a[0] = 10; a[9] = 20; // a[10] = 5; Este comando gera a exceção // ArrayIndexOutOfBoundsException for (int i=0; i < a.length; i++) System.out.print(a[i] + " - "); Kecia Marques 56
  • 57. Arranjos A[] vetorObjetos = new A[5]; vetorObjetos[1] = new A(1,2,3); vetorObjetos[1].ImprimeValores(); // vetorObjetos[2].ImprimeValores(); // Este comando gera a exceção NullPointerException } Kecia Marques 57
  • 58. Composição de Objetos Kecia Marques 58
  • 59. Composição de Objetos Uma classe pode possuir um membro de dado que seja um objeto de outra classe. Esse tipo de relacionamento é chamado composição. Exemplos: Um Círculo possui um Ponto como centro. Uma Conta Corrente é de um Cliente. Uma Turma tem um Professor. Uma Turma tem muitos Alunos. Kecia Marques 59
  • 60. Classe Ponto public class Ponto { private float x, y; public Ponto(float x, float y){ this.x = x; this.y = y; } public void alterarX(float x){ this.x = x; } public void alterarY(float y){ this.y = y; } public float obterX(){ return x; } public float obterY(){ return y; } } Kecia Marques 60
  • 61. Classe Circulo public class Circulo { private float raio; private Ponto centro; public Circulo(float x, float y, float r){ raio = r; centro = new Ponto(x,y); } public void alterarCentro(float x, float y){ centro.alterarX(x); centro.alterarY(y); } public void alterarRaio(float r){ raio = r; } public float obterCentroX(){ return centro.obterX(); } Kecia Marques 61
  • 62. Classe Circulo public float obterCentroY(){ return centro.obterY(); } public float obterRaio(){ return raio; } } Kecia Marques 62
  • 63. Classe Aplicacao import java.util.Scanner; public class Aplicacao { public static void main(String[] args){ float x, y, raio; Circulo circ; Scanner in = new Scanner (System.in); System.out.println("Digite as coordenadas do centro: "); x = in.nextFloat(); y = in.nextFloat(); System.out.println("Digite o raio: "); raio = in.nextFloat(); circ = new Circulo (x, y, raio); System.out.println("Circulo criado: "); System.out.println("Raio: " + circ.obterRaio()); System.out.println("Centro: (" + circ.obterCentroX() + ", " + circ.obterCentroY() + ")."); System.out.println(""); } } Kecia Marques 63
  • 64. Passagem de Parâmetros Kecia Marques 64
  • 65. Passagem de parâmetros Em Java a passagem de parâmetros para métodos se dá sempre por valor. Não existe passagem de parâmetro por referência em Java. O que ocorre quando um objeto é passado por parâmetro? Kecia Marques 65
  • 66. Passagem de parâmetros Quando um objeto é passado por parâmetro, na verdade a sua referência está sendo passada por parâmetro. Alterações realizadas no objeto dentro do método tem impacto no argumento passado para o método. Por exemplo, se o objeto a for passado como parâmetro para um método m(A x) e em m ocorrer alguma alteração em x (enquanto este estiver referenciando o mesmo objeto que a), após a execução de m, a estará com as alterações sofridas por x. Kecia Marques 66
  • 67. Passagem de parâmetros Exemplo: considerando as classes Ponto e Circulo mostradas anteriormente, o que a classe Aplicação a seguir gera como saída para entradas 1, 1 e 2? Kecia Marques 67
  • 68. Classe Aplicação public class Aplicacao { public static void alteraCirculo(Circulo c){ c.alterarCentro(10, 20); c.alterarRaio(5); System.out.println("nn**Dados do circulo dentro do método: **"); System.out.println("Raio: " + c.obterRaio()); System.out.println("Centro: (" + c.obterCentroX() + ", " + c.obterCentroY() + ")."); c = new Circulo(3,3,9); System.out.println("nn**Dados do novo circulo dentro do método: **"); System.out.println("Raio: " + c.obterRaio()); System.out.println("Centro: (" + c.obterCentroX() + ", " + c.obterCentroY() + ")."); } Kecia Marques 68
  • 69. Classe Aplicação public static void main(String[] args){ float x, y, raio; Circulo circ; Scanner in = new Scanner (System.in); System.out.println("Digite as coordenadas do centro: "); x = in.nextFloat(); y = in.nextFloat(); System.out.println("Digite o raio: "); raio = in.nextFloat(); circ = new Circulo (x, y, raio); System.out.println("Circulo criado: "); System.out.println("Raio: " + circ.obterRaio()); System.out.println("Centro: (" + circ.obterCentroX() + ", " + circ.obterCentroY() + ")."); //Passando objeto circ como parâmetro alteraCirculo(circ); Kecia Marques 69
  • 70. Classe Aplicação System.out.println("n**Circulo após execução do método: **"); System.out.println("Raio: " + circ.obterRaio()); System.out.println("Centro: (" + circ.obterCentroX() + ", " + circ.obterCentroY() + ")."); System.out.println(""); } } Circulo criado: Raio: 2.0 Centro: (1.0, 1.0). **Dados do circulo dentro do método: ** Raio: 5.0 Centro: (10.0, 20.0). **Dados do novo circulo dentro do método: ** Raio: 9.0 Centro: (3.0, 3.0). **Circulo após execução do método: ** Raio: 5.0 Centro: (10.0, 20.0). Kecia Marques 70
  • 71. Passagem de Arranjos como Parâmetros Para passar um arranjo como parâmetro, deve-se indicar o nome do arranjo sem colchetes na chamada do método. metodo(arranjo); O método que recebe o arranjo como parâmetro deve indicar isso na sua lista de parâmetros. void metodo(int b[]) Kecia Marques 71
  • 72. Passagem de Arranjos como Parâmetros Quando um arranjo é passado como parâmetro, o que o método recebe é uma cópia da sua referência. Desta forma, alterações sofridas pelo arranjo no método refletem no arranjo que foi passado como parâmetro. Kecia Marques 72
  • 73. Classe Aplicação public class TesteArranjo { public static void alteraArranjo(int b[]){ for(int i=0; i<b.length; i++){ b[i] = i*2; } System.out.println(“n**Arranjo b**"); for (int valor : b) System.out.print(valor + " - "); b = new int[3]; System.out.println("n**Novo arranjo b**"); for (int valor : b) System.out.print(valor + " - "); } Kecia Marques 73
  • 74. Classe Aplicação public static void main(String[] args){ int[] a = {1,2,3,4,5}; System.out.println("n**Arranjo a antes da chamada do método**"); for (int valor : a) System.out.print(valor + " - "); alteraArranjo(a); System.out.println("n**Arranjo a após a chamada do método**"); for (int valor : a) System.out.print(valor + " - "); } } Kecia Marques 74
  • 75. Classe Aplicação **Arranjo a antes da chamada do método** 1-2-3-4-5– **Arranjo b** 0-2-4-6-8- **Novo arranjo b** 0-0-0- **Arranjo a após a chamada do método** 0-2-4-6-8- Kecia Marques 75
  • 76. Herança Kecia Marques 76
  • 77. Herança Herança é um recurso que permite que novas classes sejam definidas a partir de classes já definidas. Na hierarquia de classes: Super classes (ou ascendente): são as ascendentes de um classe. Sub classes (ou descendente): são as descendentes de um classe Classe mãe: é a ascendente direta de um classe Classe filha: é a descendente direta de uma classe. Kecia Marques 77
  • 78. Herança No exemplo: Filha é descendente ou subclasse de Mãe e Avó. Mãe e Avó são ascendentes ou superclasses de Filha Mãe é descendente ou subclasse de Avó. Mãe é filha de Avó. Significa que: Mãe herda características e comportamentos de Avó. Filha herda características e comportamentos de Mãe e de Avó. Kecia Marques 78
  • 79. Herança No exemplo: Conta é superclasse de Conta Corrente e de Conta Poupança. Conta Corrente e Conta Poupança são subclasses de Conta. Kecia Marques 79
  • 80. Herança Significa que: Conta Corrente herda características e comportamentos de Conta. Conta Poupança herda características e comportamentos de Conta. Kecia Marques 80
  • 81. Herança Kecia Marques 81
  • 82. Herança No exemplo: Conta Corrente possui como atributos: número, saldo e limite, pois herda os dois primeiros da classe Conta. Conta Corrente possui como métodos: criar, depositar, sacar, consultarSaldo, obterNumero, e consultarSaldoTotal, consultarLimite e alterarLimite, sendo que os cinco primeiros são herdados de Conta. Kecia Marques 82
  • 83. Herança No exemplo: Conta Poupança possui como atributos: número, saldo e rendimento, pois herda os dois primeiros da classe Conta. Conta Poupança possui como métodos: criar, depositar, sacar, consultarSaldo , obterNumero e atualizarRendimentos , sendo que, os cinco primeiros são herdados de Conta. Kecia Marques 83
  • 84. Herança Exemplo de implementação de herança em Java A palavra chave extends indica herança em Java. public class A extends B Indica que a classe A herda da classe B Kecia Marques 84
  • 85. Herança public class A { protected int x, y; private int z; public A(int a, int b, int c) { x = a; y = b; z = c; } public int obterX(){ return (x); } public int obterY(){ return (y); } Kecia Marques 85
  • 86. Herança public int obterZ(){ return (z); } public void alterarX(int a){ x = a; } public void alterarY(int a){ y = a; } public void alterarZ(int a){ z = a; } Kecia Marques 86
  • 87. Herança public void ImprimeValores(){ System.out.println("O valor de X é: " + x); System.out.println("O valor de Y é: " + y); System.out.println("O valor de Z é: " + z); } } public class B extends A{ private int k; public B(int a, int b, int c, int d){ super (a,b,c); k = d; } Kecia Marques 87
  • 88. Herança public void ImprimeValores(){ System.out.println("O valor de X é: " + x); System.out.println("O valor de Y é: " + y); System.out.println("O valor de K é: " + k); System.out.println("Z não pertence a esta classe"); System.out.println("O valor de Z da superclasse é: " + obterZ()); } } Kecia Marques 88
  • 89. Herança public class TesteHeranca { public static void main (String[] args){ B obj1 = new B(10,20,30,40); obj1.ImprimeValores(); obj1.alterarY(100); obj1.ImprimeValores(); } } Kecia Marques 89
  • 90. Herança O exemplo de código a seguir mostra a implementação das classes Conta e ContaCorrente em Java. É mostrada também uma classe MainBanco para exemplificar o uso das classes criadas. Kecia Marques 90
  • 91. Herança public class Conta { long numero; double saldo; public Conta(long n) { numero = n; saldo = 0; } public void depositar(double v){ if (v > 0) saldo = saldo + v; } Kecia Marques 91
  • 92. Herança public boolean sacar(double v){ if ( (v > 0) && (saldo-v) >= 0){ saldo = saldo - v; return true; } else return false; } public double consultarSaldo(){ return(saldo); } Kecia Marques 92
  • 93. Herança public long obterNumero(){ return(numero); } } // Fim da classe Conta public class ContaCorrente extends Conta{ double limite; public ContaCorrente(long n, double l) { super(n); limite = l; } Kecia Marques 93
  • 94. Herança public void alterarLimite(double l){ if (l > 0) limite = l; } public double consultarLimite(){ return limite; } Kecia Marques 94
  • 95. Herança public boolean sacar(double v){ if ((v > 0) && (saldo + limite - v ) >= 0){ saldo = saldo - v; return true; } else return false; } public double consultarSaldoTotal(){ return(saldo + limite); } } // Fim da classe Conta Corrente. Kecia Marques 95
  • 96. Herança public class MainBanco { public static void main (String[] args){ ContaCorrente minhaConta; minhaConta = new ContaCorrente(12345, 300); System.out.println("Numero da Conta: " + minhaConta.obterNumero()); System.out.println("Saldo: " + minhaConta.consultarSaldo()); Kecia Marques 96
  • 97. Herança minhaConta.alterarLimite(200); System.out.println("Limite: " + minhaConta.consultarLimite()); System.out.println("Saldo Total: " + minhaConta.consultarSaldoTotal()); minhaConta.depositar(300); System.out.println("Saldo após depósito: " + minhaConta.consultarSaldo()); System.out.println("Saldo total após depósito: " + minhaConta.consultarSaldoTotal()); Kecia Marques 97
  • 98. Herança if (minhaConta.sacar(200)) { System.out.println("Saldo após saque: " + minhaConta.consultarSaldo()); System.out.println("Saldo total após saque: " + minhaConta.consultarSaldoTotal()); } else System.out.println("Não foi possível realizar operação. Saldo total disponível é de " + minhaConta.consultarSaldoTotal()); Kecia Marques 98
  • 99. Herança if (minhaConta.sacar(700)) { System.out.println("Saldo total após saque: " + minhaConta.consultarSaldoTotal()); } else System.out.println("Não foi possível realizar operação. Saldo total disponível é de " + minhaConta.consultarSaldoTotal()); } }//Fim da classe MainBanco Kecia Marques 99
  • 100. Herança Herança provê reuso de classes já construídas. Alguns benefícios do uso de herança: evitar duplicação de código; reúso de código; manutenção mais fácil (desde que não haja abuso do recurso); extensibilidade. Kecia Marques 100
  • 101. Herança Exercício: Implemente a classe ContaPoupança. Altere a classe MainBanco para criar e realizar operações sobre a classe ContaPoupança que você criou. Pesquise: para que servem as seguintes palavras reservadas de Java: protected, public, private, static, final. Kecia Marques 101
  • 102. Classes Abstratas Kecia Marques 102
  • 103. Classes Abstratas A linguagem Java possui o recurso de criação de classes abstratas. Características de uma classe abstrata: é designada pela palavra chave abstract. abstract class FiguraGeometrica{...} podem possuir métodos sem definição de corpo (método abstrato). public abstract void CalculaArea(); objetos de classes abstratas não podem ser criados. pode haver hierarquias de classes abstratas. Kecia Marques 103
  • 104. Classes Abstratas Propósito de uso de classes abstratas: fornecer uma superclasse apropriada da qual outras classes possam herdar interface e/ou implementação. As classes herdeiras de uma classe abstrata são denominadas classes concretas. Kecia Marques 104
  • 105. Interface Kecia Marques 105
  • 106. Interface Interface de Java é um recurso que permite especificar os serviços de uma classe. interface Forma {...} Uma interface declara: métodos públicos sem definição de corpo (métodos não podem ser estáticos); campos públicos, estáticos e finais. Objetos não podem ser criados diretamente a partir de uma interface. Kecia Marques 106
  • 107. Exemplo Classes que implementam uma interface devem implementar todos os métodos daquela interface e todos eles devem ser públicos. class Circulo implements Forma {...} Uma interface pode ser implementada por várias classes. Uma classe pode implementar várias interfaces. Interface é um caso especial de classe abstrata. Kecia Marques 107
  • 108. Polimorfismo Kecia Marques 108
  • 109. Polimorfismo Verificação de Tipos: “atividade que garante que os operandos utilizados com um operador sejam de tipos compatíveis.” Tipo Compatível: “é um tipo cujos valores são adequados para a realização da operação designada pelo operador ou que pode ser convertido implicitamente em um tipo cujos valores sejam adequados.” Varejão, 2004. Kecia Marques 109
  • 110. Polimorfismo LP fracamente tipada: somente parte dos erros de tipos são verificados. Ex.: C. Em C, um ponteiro para float pode acessar um posição de memória ocupada por um char, por exemplo. LP fortemente tipada: realizam uma verificação extremamente ampla de tipos. Ex.: Java Kecia Marques 110
  • 111. Polimorfismo Polimorfismo é a característica que possibilita a criação de código capaz de operar sobre valores distintos. Por exemplo, onde se espera um dado de um tipo de X, é possível receber um dado de um tipo Y. Polimorfismo = “muitas formas” Kecia Marques 111
  • 112. Polimorfismo Coersão: é a conversão implícita de tipos. Quando um operação é realizada sobre um operando de tipo diferente do esperado, o compilador verifica se é possível realizar a conversão. Por exemplo, em C, um valor char pode ser convertido implicitamente para um valor int. int a; char c = ‘k’; a = c; Kecia Marques 112
  • 113. Polimorfismo Sobrecarga (ou Overloading): um identificador ou operador é sobrecarregado quando pode ser utilizado para designar duas ou mais operações distintas. Ex.: O operador + em Java. int a, b; a = 10; b = a + 20; System.out.println(“Resutaldo = ” + b ); + é utilizado para realizar a operação de soma entre valores numéricos e para realizar concatenação de strings. Kecia Marques 113
  • 114. Polimorfismo Inclusão: é o polimorfismo decorrente de herança. “Um subtipo S de um tipo T é formado por um subconjunto dos valores de T. Assim, todo valor de S deve ser também um valor de T.” Kecia Marques 114
  • 115. Polimorfismo Ex.: Considere as classes A e B do exemplo de herança dado anteriormente. A classe a seguir exemplifica uma situação polimórfica. Kecia Marques 115
  • 116. Polimorfismo Exemplo 1) public class TesteHeranca { public static void main (String[] args){ B obj1 = new B(10,20,30,40); A obj2 = new A (200, 300, 400); testePolimorfismo(obj2); testePolimorfismo(obj1); } public static void testePolimorfismo(A obj){ obj.ImprimeValores(); } } Kecia Marques 116
  • 117. Polimorfismo O programa anterior imprime: O valor de X é: 200 O valor de Y é: 300 O valor de Z é: 400 O valor de X é: 10 O valor de Y é: 20 O valor de K é: 40 Z não pertence a esta classe O valor de Z da superclasse é: 30 Kecia Marques 117
  • 118. Tratamento de Exceções Kecia Marques 118
  • 119. Tratamento de Exceções Conceito Ausência de mecanismos para exceções em LP Mecanismos para exceções em LP Lançamento de Exceções Tratamento de Exceções Propagação de Exceções Relançamento de Exceções Continuação após o Tratamento de Exceções Kecia Marques 119
  • 120. Conceito Robustez: é a capacidade de um software continuar em operação corretamente mesmo em condições anormais. Problemas: Como prevenir-se de erros em tempo de execução? Como contornar situações anormais? Exemplos de situações anormais: divisão por zero, fim de arquivo, overflow, utilização de um objeto não inicializado, acesso a um índice inválido de um vetor. Kecia Marques 120
  • 121. Conceito Exceção: “é um evento ocorrido durante a execução de um programa que desvia o fluxo normal de instruções. ” “É uma condição provocada por uma situação excepcional que requer uma ação específica imediata.” Varejão, 2004. Kecia Marques 121
  • 122. Ausência de Mecanismos para Exceções Quando a LP utilizada não fornece mecanismos para exceções, o programador usa recursos como: Abortar o programa. Utilizar códigos de erro. Ex.: uma função para ler dados de entrada. Caso algum dos dados seja inválido, a função retorna –1. Kecia Marques 122
  • 123. Ausência de Mecanismos para Exceções Testar a condição anormal antes que ela ocorra. Ex.: if (x!=0) div = y/x; else cout << “Divisão por zero”; Conseqüências: Programas menos confiáveis. Programas com legibilidade prejudicada. Exemplos de LP sem mecanismos para exceções: C e Pascal. Kecia Marques 123
  • 124. LP com Mecanismos para Exceções Promovem os seguintes benefícios: A diminuição da sobrecarga do texto do programa. Desta forma, os programas têm melhor legibilidade. Os programas obtidos são mais confiáveis. Isso ocorre por que fica mais fácil tratar as condições anormais. Exemplos de LP com esses mecanismos: ADA, Java e Eiffel. Kecia Marques 124
  • 125. LP com Mecanismos para Exceções Exceções predefinidas: são parte da própria linguagem ou de sua biblioteca padrão. Exceções criadas pelo programador: são aquelas definidas pelo programador para um aplicação ou uma biblioteca. Kecia Marques 125
  • 126. LP com Mecanismos para Exceções Exemplos de exceções em Java: NullPointerException: ocorre quando a operação realizada gera um acesso a uma área não definida (nula). IndexOutOfBoundsException: ocorre quando é realizado um acesso a um vetor por índice que está fora dos seus limites. Kecia Marques 126
  • 127. Lançamento de Exceções O lançamento (ou sinalização) de exceções pode ser realizado: Automaticamente: o próprio mecanismo de exceção é o responsável pelo lançamento da exceção. Esta situação pode surgir em qualquer ponto do programa passível de ocorrência de situação anormal. Kecia Marques 127
  • 128. Lançamento de Exceções Explicitamente: o programador realiza o lançamento de uma exceção. O exemplo a seguir mostra um lançamento explícito de exceção em Java. Para tal, emprega- se a palavra reservada throw. try{ throw new Exception(); } Kecia Marques 128
  • 129. Tratamento de Exceções Tratadores de exceções são trechos de códigos responsáveis por tomar atitudes em resposta à ocorrência de uma exceção. Em Java: os comandos do bloco try são os tratados; os comandos das cláusulas catch correspondem ao tratamento das exceções ocorridas no bloco try correspondente; Kecia Marques 129
  • 130. Tratamento de Exceções podem ser incluídas várias cláusulas catch após o try; a cada catch corresponde um classe de exceções. Kecia Marques 130
  • 131. Tratamento de Exceções Ex.: ... String n, d; ... try{ int num = Integer.valueOf(n).intValue(); int den = Integer.valueOf(d).intValue(); int div = num / den; } catch(NumberFormatException x){ System.out.println(“Erro na formatação.”); } Kecia Marques 131
  • 132. Tratamento de Exceções catch(ArithmeticException y){ System.out.println(“Divisão por zero”); } catch(Exception z){ System.out.println(“Ocorreu um erro durante a operação”); } No exemplo: a cláusula catch(NumberFormatException x) captura exceções de formato de números. O comando dentro do bloco deste catch é o tratamento dado a este tipo de exceção. Kecia Marques 132
  • 133. Tratamento de Exceções a cláusula catch(ArithmeticException y) captura exceções de ocorridas em operações aritméticas. Neste caso, serve para tratar divisões por zero. O comando dentro do bloco deste catch é o tratamento dado a este tipo de exceção. a cláusula catch(Exception z) captura qualquer tipo de exceções de ocorridas dentro do bloco try. O comando dentro do bloco deste catch é o tratamento genérico dado a qualquer outra exceção que ocorra dentro do bloco try, que não sejam dos tipos ArithmeticException ou NumberFormatException. Kecia Marques 133
  • 134. Propagação de Exceções Quando um exceção ocorre, busca-se pela cláusula catch associada ao seu tipo. A sequência para realizar esta busca é a que aparece no código. Quando um exceção não é tratada no bloco em que ocorreu, ela é retornada para o bloco mais externo. No caso de chamadas de métodos, é retornada para o método chamador. Kecia Marques 134
  • 135. Propagação de Exceções Se o bloco ou método para o qual a exceção foi retornada não fizer o seu tratamento, ela é retornada para o bloco (ou método chamador) mais externo a este. Se a exceção chegar ao método principal sem que seja tratada, o programa é abortado. Kecia Marques 135
  • 136. Relançamento de Exceções Em algumas situações, pode ser necessário que o local onde ocorreu a exceção a trate de maneira parcial, deixando o restante de seu tratamento para um dos blocos mais externo (ou para um dos métodos na seqüência de chamada). Neste caso, utiliza-se o recurso de relançamento de exceções. Kecia Marques 136
  • 137. Relançamento de Exceções Ex.: ... try{ try{ ... throw new IOException(); ... } catch(IOException e){ ... //tratamento parcial da exceção e throw e; //relançamento da exceção e } } catch(IOException e){ ...// restante do tratamento da exceção. } Kecia Marques 137
  • 138. Continuação após o Tratamento de Exceções A execução de um programa sem a ocorrência de exceções segue o fluxo normal determinado no programa. O que ocorre na presença de um exceção? Qual será o fluxo do programa nesta situação? Kecia Marques 138
  • 139. Continuação após o Tratamento de Exceções Em geral, as LP adotam a abordagem de terminação. Terminação: quando ocorre um exceção, o erro é considerado como crítico e a execução não retorna ao ponto no qual foi gerada. A execução é desviada para um ponto externo e são encerradas as unidades na pilha de execução, a partir do ponto onde ocorreu a exceção até a unidade anterior a que o tratador de exceção foi executado. A execução continua na unidade na qual o tratador foi encontrado. Kecia Marques 139
  • 140. Continuação após o Tratamento de Exceções A cláusula finally de Java: Em algumas situações, pode ser necessária a execução de um conjunto de comandos, independente do tipo de exceção ocorrida. A cláusula finally de Java provê este recurso. Em geral, este recurso é utilizado quando deseja-se restabelecer o estado de algum objeto de forma independente da ocorrência e da propagação de exceções. Por exemplo, quando deseja-se encerrar conexões com banco de dados ou fechar arquivos quando ocorrer uma exceção qualquer. Kecia Marques 140
  • 141. Continuação após o Tratamento de Exceções O bloco finally de Java executa quando: uma exceção for lançada no bloco try correspondente ou em um de seus blocos catch; o seu bloco try fechar utilizando return, break ou continue. Kecia Marques 141
  • 142. Continuação após o Tratamento de Exceções É possível a existência de bloco try sem a associação de uma cláusula catch. Mas, não é possível a existência de um bloco try sem pelo menos um cláusula catch ou finally. Em outras palavras, um bloco try pode não possuir cláusulas catch, mas, neste caso, deve possuir então uma cláusula finally. Kecia Marques 142
  • 143. Continuação após o Tratamento de Exceções Exemplo: ... try { System.out.println(“Primeiro try”); try{ System.out.println(“Segundo try”); ... //aqui ocorreu uma exceção qualquer } finally{ System.out.println(Finally do segundo try); } } Kecia Marques 143
  • 144. Continuação após o Tratamento de Exceções catch(Exception p){ System.out.println(“Tratamento para a exceção no primeiro try”); } finally{ System.out.println(“Finally do primeiro try”); } No exemplo, os comandos das duas cláusulas finally serão executadas, assim como os comandos da cláusula catch. Kecia Marques 144
  • 145. Bibliografia Barnes, David e Kölling, M. Programação Orientada a Objetos com Java. São Paulo: Pearson Prentice Hall, 2004. Bigonha, R. S. e Bigonha, M. A. S. Programação Modular. Apostila. Belo Horizonte: DCC-UFMG, 2001. Deitel, H. M.; Deitel, P. J. Java - Como Programar. 6. ed. Prentice- Hall, 2005. HORSTMANN,CAY. Big Java. Bookman, 2004. HORSTMANN, C.; Cornell, G. Core Java 2: Fundamentos - vol. 1 . 7.ed. Alta Books. 2005. Kecia Marques 145