Vous êtes sur la page 1sur 26

Atributos e Métodos de Classe

César A. M. Marcon

2009/01
Atributos e Métodos de Classe
2

 Java permite declarar duas categorias distintas de


atributos e métodos
 Atributos de instância
 Atributos de classe
 Métodos de instância
 Métodos de classe
Atributos e Métodos de Classe
3

 Cada objeto de uma classe possui sua própria cópia


de todos os atributos de instância da classe
 Em certos casos, entretanto, é interessante que

apenas uma cópia de um atributo em particular seja


compartilhada por todos os objetos de uma classe
 Exemplo: constantes da classe Math

 As constantes matemáticas E e PI são armazenadas em


uma única cópia e então compartilhadas
Atributos e Métodos de Classe
4

public class TestaMath


{
public static void main(String args[])
{
System.out.println("PI = " + Math.PI);
System.out.println("E = " + Math.E);
}
}

 Note que os atributos E e PI não foram


acessados a partir de um objeto! Foram
acessados pelo nome da classe
Atributos e Métodos de Classe
5

 Atributos de Instância
 Cada objeto possui uma cópia particular com seus valores
 Representam o estado de um objeto em particular
 Atributos de Classe
 Cada classe possui uma única cópia do atributo,
independente do número de objetos instanciados a partir
da classe
 Objetos compartilham os atributos de classe
 São declarados pela palavra-chave static
 Invocação: <nome_classe>.<nome_atributo_público>
Atributos e Métodos de Classe
6

 Exemplo: classe Circulo


 Nos métodos de cálculo de área e circunferência,
percebe-se a presença de um valor importante em
cálculos geométricos que se repete para todas as
instâncias: constante PI
 Pode ser desejado manter somente uma cópia desse
valor, com a aproximação desejada no número de suas
casas decimais de uma forma consistente, impedindo
que em um método seja utilizado o valor 3,14 e em outro
3,1415
 PI será declarado como atributo de classe (static) e
constante (final)
Atributos e Métodos de Classe
7

public class Circulo


{
public static final double PI = 3.14;
private int centrox;
private int centroy;
private int raio;
...
public double area() {
return (PI * raio * raio);
}
public double circunferencia() {
return (2 * PI * raio);
}
...
}
Atributos e Métodos de Classe
8

 Em muitos exemplos de classes pode-se notar


alguns métodos que não acessam nenhum atributo
de uma instância
 Exemplo: funções trigonométricas da classe Math

 Os métodos sin, cos e tan recebem o valor do ângulo (em


radianos) por parâmetro e devolvem o seno, cosseno ou a
tangente correspondente, calculados unicamente a partir
do valor recebido
Atributos e Métodos de Classe
9

public class Trigonometria {


public static void main(String args[]) {
System.out.println("Seno(45) = " + Math.sin(Math.PI/4));
System.out.println("Cosseno(45) = " + Math.cos(Math.PI/4));
System.out.println("Tangente(45) = " + Math.tan(Math.PI/4));
}
}

 Note que os métodos de cálculo não são


executados sobre um objeto!
 Os métodos são acessados pelo nome da

classe
Atributos e Métodos de Classe
10

 Métodos de Instância
 Fornecem o comportamento dos objetos instanciados a partir de uma
classe
 Trabalham sobre os atributos de um objeto dessa classe

 Métodos de Classe
 Fornecem um comportamento que é independente da existência de
objetos de uma classe.
 Pertencem à classe e são compartilhados por todas as instâncias da
classe.
 Trabalham sobre os atributos de classe.
 Indicados pela palavra-chave static.
 Invocação: <nome_classe>.<nome_método>(<parâmetros>)
Atributos e Métodos de Classe
11

 Exemplo: classe Professor



Contador para o número de objetos instanciados

Método para saber o valor do contador
public class Professor { Professor
private static int contador=0; - nome: String
... - matricula: int
public Professor(String n, int m, int c) { - cargaHoraria: int
setNome(n); - contador: int
setMatricula(m);
setCargaHoraria(c); + setNome (n: String)
contador++; + getNome ( ): String
} + setMatricula (m: int)
public static int getTotalInstancias() { + getMatricula( ): int
return (contador); + setCargaHoraria (c:
} int)
} + getCargaHoraria( ):
int
+
Atributos e Métodos de Classe
12 Professor
- nome: String
 Exemplo: classe Professor - matricula: int
- cargaHoraria: int
- contador: int

+ setNome (n: String)


+ getNome ( ): String
+ setMatricula (m: int)
+ getMatricula( ): int
+ setCargaHoraria (c:
int)
... + getCargaHoraria( ):
Professor p3 = new Professor("Fulano", 777, 12); int
System.out.println("Total Objetos = " + +
getCargaHorariaMensal
Professor.getTotalInstancias());
( ): float
Professor p4 = new Professor("Beltrano", 888, 20);
+ getTotalInstancias( ):
System.out.println("Total Objetos = " + p4.getTotalInstancias());
... int
Atributos e Métodos de Classe
13

 Estudo de caso 1
 A “famosa” aplicação “Alô Mundo”:

public class AloMundo {


public static void main(String args[]) {
System.out.println("Alo Mundo!");
}
}
Atributos e Métodos de Classe
14

 Estudo de caso 1
 A classe AloMundo possui um método de classe, o
método main

O método main é automaticamente invocado pela máquina virtual
Java quando se executa a classe AloMundo

Ele é um método de classe, pois não depende de nenhum objeto
da classe AloMundo na qual ele está declarado
Atributos e Métodos de Classe
15

 Estudo de caso 1
 A classe AloMundo referencia também um atributo de
classe

A construção System.out.println() é na verdade o atributo de
classe out da classe System, o qual guarda uma instância da
classe PrintStream que possui um método de instância chamado
println
Atributos e Métodos de Classe
16

 Estudo de caso 2
 A classe Media é capaz de manter informações sobre um
acumulador de valores inteiros, apresentando a
funcionalidade de calcular a média, a qualquer momento,
dos valores que foram adicionados ao acumulador
 Adicionalmente, a classe Media também é capaz de
informar a média de todas as instâncias já criadas dessa
classe
Atributos e Métodos de Classe
17

 Estudo de caso 2
 Atributos de instância:

acum guarda a soma de todos os valores adicionados ao
acumulador

qtd é um contador do número de valores adicionados ao
acumulador
 Métodos de instância:

somaAcum fornece a funcionalidade de adicionar um valor ao
acumulador

media é utilizado para calcular a média do acumulador
Atributos e Métodos de Classe
18

 Estudo de caso 2
 Atributos de classe:

acumGlobal guarda a soma de todos os valores adicionados a
todos os acumuladores

qtdGlobal guarda o número de valores adicionados a todos os
contadores
 Métodos de classe:

mediaGlobal é utilizado para calcular a média de todos os
acumuladores
Atributos e Métodos de Classe
19

public class Media


{
private int acum,qtd;
private static int acumGlobal,qtdGlobal;
public int somaAcum(int a) {
acum = acum + a;
qtd++;
acumGlobal = acumGlobal + a;
qtdGlobal++;
return(acum);
}
public double media() {
return((double) acum/qtd);
}
public static double mediaGlobal() {
if (qtdGlobal == 0) return 0;
return((double) acumGlobal/qtdGlobal);
}
}
Atributos e Métodos de Classe
20

 Estudo de caso 2
 Note no exemplo, que um método de instância
(somaAcum) pode acessar atributos de instância (acum,
qtd) e atributos de classe (acumGlobal, qtdGlobal)
 Mas um método de classe (mediaGlobal) só pode acessar
atributos de classe (acumGlobal, qtdGlobal)
Atributos e Métodos de Classe
21

public class TesteMedia


{
public static void main(String args[])
{
Media var1 = new Media();
var1.somaAcum(1);
var1.somaAcum(3);
var1.somaAcum(5);
System.out.println("Media da instancia var1: "+var1.media());
System.out.println("Media das instancias da classe Media: " +

Media.mediaGlobal());
Media var2 = new Media();
var2.somaAcum(1);
var2.somaAcum(1);
System.out.println("Media da instancia var2: "+var2.media());
System.out.println("Media das instancias da classe Media: " +

Media.mediaGlobal());
}
}
Atributos e Métodos de Classe
22

 Inicialização de atributos de classe


 Convém destacar que a forma de inicialização dos
atributos de classe é usualmente no momento de sua
declaração, pois eles não pertencem às instâncias e
portanto não dependem do construtor para serem
inicializados

Se a inicialização com valores padrão for suficiente, não é
necessário inicializar o atributo explicitamente
Atributos e Métodos de Classe
23

 Para inicializar atributos de classe que necessitam


de uma forma mais complexa, Java fornece um
bloco de inicialização estático
 Não possui nome e não possui tipo de retorno
 Começa pela palavra-chave static, seguido de um bloco de
código entre parênteses
 Executa somente uma vez quando a classe é carregada em
memória
public class UmaClasse
{
...
public static int atributo;
static
{
//código para inicializar atributo
}
}
Exercícios
24

 Utilizando a classe Ponto exemplificada em aulas


anteriores, introduza um atributo de classe para
contar o número de objetos criados. Acrescente
também um método de classe para retornar o
valor deste atributo. Depois implemente uma
classe CriaInstancias que tenha o método main e
dentro dele crie e inicialize um array de 10 pontos
e depois apresente o conteúdo do atributo de
classe
Exercícios
25

 Acrescente à classe Ponto desenvolvida no


exercício 1, um método para calcular a distância
entre dois pontos recebidos como parâmetro (a
fórmula é apresentada abaixo). Como tal método
não utiliza nenhum atributo de classe, ele pode
ser criado como um método de classe. Altere o
método main da classe CriaInstancias para testar
a utilização deste método

( x2 − x1 ) + ( y2 − y1 )
2 2
Exercícios
26

 Crie uma classe Funcionario para armazenar os


seguintes dados de um funcionário: código, nome,
RG, salário. Note que o código dos funcionários
deve ser criado automaticamente. Agora
implemente uma classe Cadastro que possua um
ArrayList de funcionários e métodos para incluir,
excluir e consultar dados de funcionários. Teste a
utilização destas classes criando uma classe que
implemente o método main e crie um cadastro de
funcionários

Vous aimerez peut-être aussi