Encapsulamento - Métodos e atributos de classe (static)

Computação II - Ciência da Computação


Prof.: Danilo S. Carvalho

Nessa aula, concluiremos as noções básicas de encapsulamento com a ideia de que as classes, assim como objetos, podem ter o seu próprio estado.


Ao final da aula, asberemos como e porque manter o estado de classes.

Falamos bastante até agora sobre os objetos e seus estados.

Mas e se eu lhes dissesse que as classes também são objetos?

Sim. As classes que criamos no Java são todas instâncias da classe Class, ou seja, são objetos.

Portanto elas também podem ter atributos e métodos, e portanto possuem estado próprio.

Quanto ao tipo Class... Não precisamos falar sobre ele aqui.

Para criar um atributo ou método para uma classe usamos o modificador static.

Por exemplo, se quisermos manter uma contagem de quantos objetos do tipo Pessoa foram criados no programa, podemos incluir um novo atributo static totalPessoas na classe Pessoa.

Quando uma nova pessoa é criada, incrementamos esse valor em 1 no construtor.

E podemos conceder acesso público a tal atributo através de um método getter static.

Dessa forma, podemos saber o total de pessoas criadas em outras partes do programa chamando o método Pessoa.getTotalPessoas().

Atributos e métodos criados com o modificador static são também chamados de atributos ou métodos de classe (em oposição à atributos/métodos de instância).

Similarmente ao caso do total de pessoas, incluimos atributos de classe quando precisamos manter alguma informação que diz respeito à todos os objetos da classe, ou à classe em si.

Já os métodos de classe são também utilizados para criar procedimentos dependam do estado da classe ou que não dependam de estado algum, tal como Math.sqrt(double a).

Foi isso que usamos nas primeiras aulas para criar nossas "funções" básicas.

O método main é sempre static, pois inicia o programa a partir de uma certa classe, e portanto não depende de estado anterior.

                        
                            public class Pessoa {
                                private static int totalPessoas;
                                private String cpf;
                                ...
                            }
                        
                    
                        
                            public class Pessoa {
                                private static int totalPessoas;
                                private String cpf;
                                ...

                                public Pessoa(String cpf, ...) {
                                    this.cpf = cpf;
                                    ...
                                    Pessoa.totalPessoas++;
                                }
                            }
                        
                    
                        
                            public class Pessoa {
                                private static int totalPessoas = 0;  // Podem ser inicializados dessa forma.
                                private String cpf;
                                ...

                                public Pessoa(String cpf, ...) {
                                    this.cpf = cpf;
                                    ...
                                    Pessoa.totalPessoas++;
                                }

                                public static int getTotalPessoas() {
                                    return Pessoa.totalPessoas;
                                }
                            }
                        
                    

Agora sabemos que há situações em que precisamos manter informações sobre a classe em si ou sobre todas as instâncias de uma classe e que é possivel fazer isso com atributos e métodos de classe (static).


Há alguma informação que diz respeito a todas as instâncias de alguma classe no sistema bancario simples?

Perguntas:

  1. A que referência vou apontar se usar this em um método static?
  2. Porque é do interesse do programador encapsular o estado da classe?

Exercício:

  1. Resolva os desafios da apostila da Caelum Seção 5.9 .

Até a próxima aula!