atributos pra classe professor
TRANSCRIPT
Atributos e Métodos de ClasseAtributos e Métodos de Classe
César A. M. Marcon
2009/01
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
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
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
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>
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)
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); }
...
}
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
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
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>)
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
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
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!");
}
}
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
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
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
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
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
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); }}
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)
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()); }}
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
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}
}
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
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
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