atributos pra classe professor

26
Atributos e Métodos de Atributos e Métodos de Classe Classe César A. M. Marcon 2009/01

Upload: fwannmacher

Post on 10-Jun-2015

865 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Atributos Pra Classe Professor

Atributos e Métodos de ClasseAtributos e Métodos de Classe

César A. M. Marcon

2009/01

Page 2: Atributos Pra Classe Professor

2

Atributos e Métodos de Classe

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

Page 3: Atributos Pra Classe Professor

3

Atributos e Métodos de Classe

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

Page 4: Atributos Pra Classe Professor

4

Atributos e Métodos de Classe

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

Page 5: Atributos Pra Classe Professor

5

Atributos e Métodos de Classe

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>

Page 6: Atributos Pra Classe Professor

6

Atributos e Métodos de Classe

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)

Page 7: Atributos Pra Classe Professor

7

Atributos e Métodos de Classe

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); }

...

}

Page 8: Atributos Pra Classe Professor

8

Atributos e Métodos de Classe

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

Page 9: Atributos Pra Classe Professor

9

Atributos e Métodos de Classe

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

Page 10: Atributos Pra Classe Professor

10

Atributos e Métodos de Classe

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>)

Page 11: Atributos Pra Classe Professor

11

Atributos e Métodos de Classe

Exemplo: classe Professor Contador para o número de objetos instanciados Método para saber o valor do contador

public class Professor {

private static int contador=0; ...

public Professor(String n, int m, int c) {

setNome(n);

setMatricula(m);

setCargaHoraria(c);

contador++;

}

public static int getTotalInstancias() {

return (contador);

}}

Professor- nome: String- matricula: int- cargaHoraria: int- contador: int

+ setNome (n: String)+ getNome ( ): String+ setMatricula (m: int)+ getMatricula( ): int+ setCargaHoraria (c: int)+ getCargaHoraria( ): int+ getCargaHorariaMensal( ): float+ getTotalInstancias( ): int

Page 12: Atributos Pra Classe Professor

12

Atributos e Métodos de Classe

Exemplo: classe Professor

...Professor p3 = new Professor("Fulano", 777, 12);System.out.println("Total Objetos = " + Professor.getTotalInstancias());

Professor p4 = new Professor("Beltrano", 888, 20);System.out.println("Total Objetos = " + p4.getTotalInstancias());...

Professor- nome: String- matricula: int- cargaHoraria: int- contador: int

+ setNome (n: String)+ getNome ( ): String+ setMatricula (m: int)+ getMatricula( ): int+ setCargaHoraria (c: int)+ getCargaHoraria( ): int+ getCargaHorariaMensal( ): float+ getTotalInstancias( ): int

Page 13: Atributos Pra Classe Professor

13

Atributos e Métodos de Classe

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

public class AloMundo {

public static void main(String args[]) {

System.out.println("Alo Mundo!");

}

}

Page 14: Atributos Pra Classe Professor

14

Atributos e Métodos de Classe

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

Page 15: Atributos Pra Classe Professor

15

Atributos e Métodos de Classe

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

Page 16: Atributos Pra Classe Professor

16

Atributos e Métodos de Classe

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

Page 17: Atributos Pra Classe Professor

17

Atributos e Métodos de Classe

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

Page 18: Atributos Pra Classe Professor

18

Atributos e Métodos de Classe

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

Page 19: Atributos Pra Classe Professor

19

Atributos e Métodos de Classe

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); }}

Page 20: Atributos Pra Classe Professor

20

Atributos e Métodos de Classe

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)

Page 21: Atributos Pra Classe Professor

21

Atributos e Métodos de Classe

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()); }}

Page 22: Atributos Pra Classe Professor

22

Atributos e Métodos de Classe

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

Page 23: Atributos Pra Classe Professor

23

Atributos e Métodos de Classe

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óriapublic class UmaClasse{ ...

public static int atributo;static{

//código para inicializar atributo}

}

Page 24: Atributos Pra Classe Professor

24

Exercícios

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

Page 25: Atributos Pra Classe Professor

25

Exercícios

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

212

212 )()( yyxx

Page 26: Atributos Pra Classe Professor

26

Exercícios

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