16
Atributos e Métodos Estáticos Programação Orientada a Objetos Ludimila Monjardim Casagrande 2012

POO - 19 - Elementos Estáticos

Embed Size (px)

Citation preview

Page 1: POO - 19 - Elementos Estáticos

Atributos e Métodos Estáticos

Programação Orientada a Objetos

Ludimila Monjardim Casagrande 2012

Page 2: POO - 19 - Elementos Estáticos

Elementos Estáticos ©2012 Ludimila Monjardim Casagrande 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.

Page 3: POO - 19 - Elementos Estáticos

Elementos Estáticos ©2012 Ludimila Monjardim Casagrande 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.

Page 4: POO - 19 - Elementos Estáticos

Elementos Estáticos ©2012 Ludimila Monjardim Casagrande 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.

Page 5: POO - 19 - Elementos Estáticos

Elementos Estáticos ©2012 Ludimila Monjardim Casagrande 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.

Page 6: POO - 19 - Elementos Estáticos

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

Page 7: POO - 19 - Elementos Estáticos

Elementos Estáticos ©2012 Ludimila Monjardim Casagrande 7

Exemplo

public class Participante {

public static int contador;

public Participante(){

contador++;

}

public static int getContador() {

return contador;

}

}

Atributo declarado como estático

A variável contador deve armazenar

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.

Page 8: POO - 19 - Elementos Estáticos

Elementos Estáticos ©2012 Ludimila Monjardim Casagrande 8

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

Page 9: POO - 19 - Elementos Estáticos

Elementos Estáticos ©2012 Ludimila Monjardim Casagrande 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.

Page 10: POO - 19 - Elementos Estáticos

Elementos Estáticos ©2012 Ludimila Monjardim Casagrande 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.

Page 11: POO - 19 - Elementos Estáticos

Elementos Estáticos ©2012 Ludimila Monjardim Casagrande 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.

Page 12: POO - 19 - Elementos Estáticos

Elementos Estáticos ©2012 Ludimila Monjardim Casagrande 12

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.

Page 13: POO - 19 - Elementos Estáticos

Elementos Estáticos ©2012 Ludimila Monjardim Casagrande 13

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.");

}

}

Page 14: POO - 19 - Elementos Estáticos

Elementos Estáticos ©2012 Ludimila Monjardim Casagrande 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.

Page 15: POO - 19 - Elementos Estáticos

Elementos Estáticos ©2012 Ludimila Monjardim Casagrande 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.

Page 16: POO - 19 - Elementos Estáticos

Elementos Estáticos ©2012 Ludimila Monjardim Casagrande 16

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;

}