• Nenhum resultado encontrado

Atributos e Métodos de Classe

N/A
N/A
Protected

Academic year: 2021

Share "Atributos e Métodos de Classe"

Copied!
9
0
0

Texto

(1)

Algoritmos e Programação II

Aula 5 – Atributos e Métodos de Carga

*Adaptado do material do Prof. Júlio Machado e Profa. Isabel Manssour

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

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

(2)

Note que os atributos públicos não foram acessados a partir de um objeto!

Os atributos foram acessados pelo nome da classe

public class TestaMath {

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

}

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>

Exemplo: classe Circulo

Nos métodos de cálculo da á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

(3)

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

... }

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, cose tanrecebem 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

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

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

(4)

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

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

} }

Exemplo: Classe Professor

...

(5)

Estudo de caso 1

A “famosa” aplicação “Alô Mundo”:

public class AloMundo {

public static void main(String args[]) { System.out.println("Alo Mundo!"); }

}

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

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 PrintStreamque possui um método de instância chamado println

(6)

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

Estudo de caso 2 Atributos de instância:

acumguarda 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:

somaAcumfornece a funcionalidade de adicionar um valor ao acumulador

media é utilizado para calcular a média do acumulador

Estudo de caso 2 Atributos de classe:

acumGlobalguarda a soma de todos os valores adicionados a todos os acumuladores

qtdGlobalguarda 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

(7)

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

}

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)

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: " +

(8)

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

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 }

}

1) 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 maine dentro dele crie e inicialize um array de 10 pontos e depois apresente o conteúdo do atributo de classe.

(9)

2) 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 mainda classe CriaInstanciaspara testar a utilização deste método.

3) Crie uma classe Funcionariopara 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 ArrayListde 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 maine crie um cadastro de funcionários.

Referências

Documentos relacionados

«A clareza no enunciado das proposições, a correcção no desenvolvimento dos raciocínios, o vigor insinuante da exposição, o interesse que revela para se

• Para a realização de obras em planos horizontais ou verticais ou obras com uma inclinação em uma ou duas direções • Desempenho em obras com visível laser vermelho (NL400)

Resumo: Considerando a influência que as novas mídias da comunicação e da informação exercem sobre nossas vidas, o trabalho proposto visa apresentar a análise da

O Código de Defesa do Consumidor é uma legislação voltada para a proteção do sujeito desfavorável na relação entre o consumidor e o fornecedor, ou seja, é um sistema protetivo do

Já agora não se me dá de confessar que sentia umas tais ou quais cócegas de curiosidade, por saber onde ficava a origem dos séculos, se era tão misteriosa como a origem do Nilo, e

§ 4º Nos Processos Administrativos Disciplinares Demissionários, quando o acusado não constituir ou indicar defensor, a autoridade processante solicitará à autoridade

Esta tela apresenta os valores máximos de taxa de dose de radiação medidos na face e a 1 metro do radiofármaco embalado e permite a entrada de dados (código do cliente,

Objective: To investigate the reliability of the 50-Foot Walk Test (50 FWT) and 30-second Chair Stand Test (30 CST) in patients who have undergone total knee arthroplasty