Programação Orientada a Objetos




    Atributos e Métodos Estáticos




           Ludimila Monjardim Casagrande
                       2012
Instâncias e Classes

      Objetos são instâncias de uma classe. Sendo
          assim, vários objetos de um mesmo “tipo” ou classe
          podem ser criados e cada instância terá uma cópia
          de todos os atributos declarados na classe.

      As instâncias de uma classe são, portanto,
          independentes entre si:
             a modificação do campo saldo de uma instância da
              classe Conta não afeta o valor do mesmo campo em
              outra instância da classe.


Elementos Estáticos       ©2012 Ludimila Monjardim Casagrande    2
Atributos Estáticos

      Sendo assim, como seria possível compartilhar uma
          informação entre todas as instâncias de uma classe?
      Uma forma de promover o compartilhamento de uma
          mesma variável e de seu valor entre as várias instâncias
          de uma classe é declarando essa variável de classe
          como estática (static).
      Em outras palavras, atributos ou campos estáticos de
          uma classe são compartilhados por todas as instâncias
          dessa classe e se o valor de um campo estático for
          modificado por uma das instâncias, a modificação será
          refletida em todas as instâncias da mesma classe.

Elementos Estáticos        ©2012 Ludimila Monjardim Casagrande       3
Atributos Estáticos

      Atributos estáticos são declarados com o
          modificador static, que deve ser posicionado antes
          do tipo do atributo e pode ser combinado com os
          modificadores de acesso public, private ou
          protected.

      Atributos estáticos são também conhecidos como
          atributos de classe, por poderem ser acessados
          diretamente usando o nome da classe, isto é, sem
          que uma instância tenha sido criada.


Elementos Estáticos      ©2012 Ludimila Monjardim Casagrande   4
Atributos Não-Estáticos

      Ao contrário dos atributos estáticos, os atributos
          que podem ter diferentes valores para cada
          instância da mesma classe são conhecidos
          como atributos de instância.

      Para a manipulação desses campos é
          necessária a criação de uma instância da classe
          e a existência de uma referência para tal
          instância.


Elementos Estáticos     ©2012 Ludimila Monjardim Casagrande   5
Ciclo de Vida de Atributos Estáticos

      As variáveis correspondentes a atributos
          estáticos são criadas no momento da carga da
          classe e são destruídas ao término da execução
          da aplicação.
      A carga ocorre na primeira vez em que a classe
          é utilizada.
      Exemplo:
          System.out.println("Número de participantes: "
                            + Participante.contador);


Elementos Estáticos        ©2012 Ludimila Monjardim Casagrande   6
Exemplo
   public class Participante {
        public static int contador;                  Atributo declarado como estático
        public Participante(){
           contador++;
        }

        public static int getContador() { A variável contador deve armazenar
          return contador;                o número de participantes existentes,
        }                                 isto é, o número de objetos desta
   }                                             classe que foram criados.

   Ela deve funcionar como uma variável
   global, cujo valor é compartilhado entre
   todas as instâncias.

Elementos Estáticos          ©2012 Ludimila Monjardim Casagrande                        7
Exemplo
  public class Principal {
          public static void main(String[] args) {
            System.out.println("Número de participantes: "
                                 + Participante.contador);
            Participante p1 = new Participante();
            Participante p2 = new Participante();
            System.out.println("Número de participantes: "
                                 + Participante.contador);
      }
  }
                      Atributo sendo acessado diretamente pelo nome da classe

                  Isso é possivel quando os atributos ou métodos são estáticos

Elementos Estáticos                ©2012 Ludimila Monjardim Casagrande           8
Métodos Estáticos

      Devem ser declarados como estáticos métodos:
             que somente manipulam variáveis estáticas ou
             que implementam rotinas que sejam
              independentes de dados armazenados em
              instâncias, ou seja, métodos que só necessitem
              dos dados passados como argumentos para
              efetuar a tarefa requerida e que produzem o
              mesmo resultado independentemente de qual
              instância da classe tenha sido usada para sua
              chamada.

Elementos Estáticos       ©2012 Ludimila Monjardim Casagrande   9
Métodos Estáticos

      Métodos estáticos também são declarados pelo uso
          do modificador static, que deve preceder o tipo de
          retorno do método e que pode ser combinado com os
          modificadores aplicáveis ao método.
      Os métodos estáticos (também conhecidos como
          métodos de classe) também podem ser chamados
          sem a necessidade de criação de uma instância da
          classe à qual pertencem.
             Isso é o que os diferenciam dos métodos não-
              estáticos.


Elementos Estáticos        ©2012 Ludimila Monjardim Casagrande   10
Métodos Estáticos

      O método main é um método estático, que permite
          que uma classe seja executada como uma
          aplicação ou programa.

      Não é necessário criar uma instância da classe que
          contém o método main para que ele seja
          executado.

      Métodos estáticos podem ser usados em classes
          que contenham o método main para servirem como
          sub-rotinas deste.

Elementos Estáticos     ©2012 Ludimila Monjardim Casagrande   11
Métodos e Atributos Estáticos

      Métodos estáticos só podem acessar ou chamar
          diretamente (sem uma instância) variáveis ou
          métodos também estáticos.
      Sendo assim:
             Se um método for chamado diretamente a partir do
              método main, este método deverá ser obrigatoriamente
              declarado como estático.

             Se o método main for acessar campos declarados na sua
              classe mas fora do método main, estes campos também
              deverão ser declarados como estáticos.


Elementos Estáticos         ©2012 Ludimila Monjardim Casagrande       12
Exemplo
  public class ConversorDeUnidades {

      public static double milhasParaQuilometros(double milhas) {
        double quilometros = milhas*1.609;
        return quilometros;
      }

      public static void main(String[] args){
        double milhas = 100;
        double quilometros = milhasParaQuilometros(milhas);
        System.out.println(milhas + " milhas correspondem a " +
                           quilometros + " quilômetros.");
      }
  }

Elementos Estáticos       ©2012 Ludimila Monjardim Casagrande       13
O Modificador: final

      O modificador final pode ser aplicado a
          variáveis, métodos e classes.

      O significado de final varia de acordo com o
          elemento ao qual ele é aplicado.

      Porém a idéia essencial é sempre a mesma:
          elementos declarados como final não podem ser
          modificados.


Elementos Estáticos     ©2012 Ludimila Monjardim Casagrande   14
O Modificador: final

      Sendo assim:
             Variáveis declaradas como final correspondem a
              constantes, pois seu valor inicial não pode ser
              alterado.

             Um método final não pode ser sobrescrito (pelas
              subclasses).

             Uma classe final não pode ter subclasses.



Elementos Estáticos       ©2012 Ludimila Monjardim Casagrande   15
Exemplo
 public class ConstantesMatematicas {
      // Declaração dos campos da classe
      // raiz quadrada de 2
      public static final double RAIZ_DE_2 = 1.4142135623730950488;
      // raiz quadrada de 3
      public static final double RAIZ_DE_3 = 1.7320508075688772935;
      // raiz quadrada de 5
      final static public double RAIZ_DE_5 = 2.2360679774997896964;
      // raiz quadrada de 6: podemos usar as constantes já definidas
      static final public double RAIZ_DE_6 = RAIZ_DE_2 * RAIZ_DE_3;
 }


Elementos Estáticos        ©2012 Ludimila Monjardim Casagrande         16

POO - 19 - Elementos Estáticos

  • 1.
    Programação Orientada aObjetos Atributos e Métodos Estáticos Ludimila Monjardim Casagrande 2012
  • 2.
    Instâncias e Classes  Objetos são instâncias de uma classe. Sendo assim, vários objetos de um mesmo “tipo” ou classe podem ser criados e cada instância terá uma cópia de todos os atributos declarados na classe.  As instâncias de uma classe são, portanto, independentes entre si:  a modificação do campo saldo de uma instância da classe Conta não afeta o valor do mesmo campo em outra instância da classe. Elementos Estáticos ©2012 Ludimila Monjardim Casagrande 2
  • 3.
    Atributos Estáticos  Sendo assim, como seria possível compartilhar uma informação entre todas as instâncias de uma classe?  Uma forma de promover o compartilhamento de uma mesma variável e de seu valor entre as várias instâncias de uma classe é declarando essa variável de classe como estática (static).  Em outras palavras, atributos ou campos estáticos de uma classe são compartilhados por todas as instâncias dessa classe e se o valor de um campo estático for modificado por uma das instâncias, a modificação será refletida em todas as instâncias da mesma classe. Elementos Estáticos ©2012 Ludimila Monjardim Casagrande 3
  • 4.
    Atributos Estáticos  Atributos estáticos são declarados com o modificador static, que deve ser posicionado antes do tipo do atributo e pode ser combinado com os modificadores de acesso public, private ou protected.  Atributos estáticos são também conhecidos como atributos de classe, por poderem ser acessados diretamente usando o nome da classe, isto é, sem que uma instância tenha sido criada. Elementos Estáticos ©2012 Ludimila Monjardim Casagrande 4
  • 5.
    Atributos Não-Estáticos  Ao contrário dos atributos estáticos, os atributos que podem ter diferentes valores para cada instância da mesma classe são conhecidos como atributos de instância.  Para a manipulação desses campos é necessária a criação de uma instância da classe e a existência de uma referência para tal instância. Elementos Estáticos ©2012 Ludimila Monjardim Casagrande 5
  • 6.
    Ciclo de Vidade Atributos Estáticos  As variáveis correspondentes a atributos estáticos são criadas no momento da carga da classe e são destruídas ao término da execução da aplicação.  A carga ocorre na primeira vez em que a classe é utilizada.  Exemplo: System.out.println("Número de participantes: " + Participante.contador); Elementos Estáticos ©2012 Ludimila Monjardim Casagrande 6
  • 7.
    Exemplo public class Participante { public static int contador; Atributo declarado como estático public Participante(){ contador++; } public static int getContador() { A variável contador deve armazenar return contador; o número de participantes existentes, } isto é, o número de objetos desta } classe que foram criados. Ela deve funcionar como uma variável global, cujo valor é compartilhado entre todas as instâncias. Elementos Estáticos ©2012 Ludimila Monjardim Casagrande 7
  • 8.
    Exemplo publicclass Principal { public static void main(String[] args) { System.out.println("Número de participantes: " + Participante.contador); Participante p1 = new Participante(); Participante p2 = new Participante(); System.out.println("Número de participantes: " + Participante.contador); } } Atributo sendo acessado diretamente pelo nome da classe Isso é possivel quando os atributos ou métodos são estáticos Elementos Estáticos ©2012 Ludimila Monjardim Casagrande 8
  • 9.
    Métodos Estáticos  Devem ser declarados como estáticos métodos:  que somente manipulam variáveis estáticas ou  que implementam rotinas que sejam independentes de dados armazenados em instâncias, ou seja, métodos que só necessitem dos dados passados como argumentos para efetuar a tarefa requerida e que produzem o mesmo resultado independentemente de qual instância da classe tenha sido usada para sua chamada. Elementos Estáticos ©2012 Ludimila Monjardim Casagrande 9
  • 10.
    Métodos Estáticos  Métodos estáticos também são declarados pelo uso do modificador static, que deve preceder o tipo de retorno do método e que pode ser combinado com os modificadores aplicáveis ao método.  Os métodos estáticos (também conhecidos como métodos de classe) também podem ser chamados sem a necessidade de criação de uma instância da classe à qual pertencem.  Isso é o que os diferenciam dos métodos não- estáticos. Elementos Estáticos ©2012 Ludimila Monjardim Casagrande 10
  • 11.
    Métodos Estáticos  O método main é um método estático, que permite que uma classe seja executada como uma aplicação ou programa.  Não é necessário criar uma instância da classe que contém o método main para que ele seja executado.  Métodos estáticos podem ser usados em classes que contenham o método main para servirem como sub-rotinas deste. Elementos Estáticos ©2012 Ludimila Monjardim Casagrande 11
  • 12.
    Métodos e AtributosEstáticos  Métodos estáticos só podem acessar ou chamar diretamente (sem uma instância) variáveis ou métodos também estáticos.  Sendo assim:  Se um método for chamado diretamente a partir do método main, este método deverá ser obrigatoriamente declarado como estático.  Se o método main for acessar campos declarados na sua classe mas fora do método main, estes campos também deverão ser declarados como estáticos. Elementos Estáticos ©2012 Ludimila Monjardim Casagrande 12
  • 13.
    Exemplo publicclass ConversorDeUnidades { public static double milhasParaQuilometros(double milhas) { double quilometros = milhas*1.609; return quilometros; } public static void main(String[] args){ double milhas = 100; double quilometros = milhasParaQuilometros(milhas); System.out.println(milhas + " milhas correspondem a " + quilometros + " quilômetros."); } } Elementos Estáticos ©2012 Ludimila Monjardim Casagrande 13
  • 14.
    O Modificador: final  O modificador final pode ser aplicado a variáveis, métodos e classes.  O significado de final varia de acordo com o elemento ao qual ele é aplicado.  Porém a idéia essencial é sempre a mesma: elementos declarados como final não podem ser modificados. Elementos Estáticos ©2012 Ludimila Monjardim Casagrande 14
  • 15.
    O Modificador: final  Sendo assim:  Variáveis declaradas como final correspondem a constantes, pois seu valor inicial não pode ser alterado.  Um método final não pode ser sobrescrito (pelas subclasses).  Uma classe final não pode ter subclasses. Elementos Estáticos ©2012 Ludimila Monjardim Casagrande 15
  • 16.
    Exemplo public classConstantesMatematicas { // Declaração dos campos da classe // raiz quadrada de 2 public static final double RAIZ_DE_2 = 1.4142135623730950488; // raiz quadrada de 3 public static final double RAIZ_DE_3 = 1.7320508075688772935; // raiz quadrada de 5 final static public double RAIZ_DE_5 = 2.2360679774997896964; // raiz quadrada de 6: podemos usar as constantes já definidas static final public double RAIZ_DE_6 = RAIZ_DE_2 * RAIZ_DE_3; } Elementos Estáticos ©2012 Ludimila Monjardim Casagrande 16