O documento discute vários tópicos relacionados a programação orientada a objetos em Java, incluindo:
1) Escopo de declarações de variáveis, parâmetros e métodos em classes;
2) Modificadores de acesso público e privado;
3) Uso da palavra-chave this para referenciar objetos;
4) Sobrecarga de construtores e métodos get/set para acessar atributos privados.
2. Escopo de Declarações
• Entidades Java:
• Classes, métodos, variáveis e parametros
• Declarações introduzem nomes que podem ser
utilizados para referenciar essas entidades;
• O escopo de uma declaração é a parte do
programa que pode referenciar a entidade
declarada pelo seu nome;
3. Escopo de Declarações
• O escopo de uma declaração de parâmetro é o
corpo do método em que a declaração aparece
• O escopo de uma declaração de variável local vai
do ponto em que a declaração aparece até o final
desse bloco
• O escopo de uma declaração de variável local que
aparece na inicialização do cabeçalho de uma
instrução FOR é o corpo da instrução FOR com as
outras expressões do cabeçalho
4. Escopo de Declarações
• O escopo de um método ou campo de uma classe é o
corpo inteiro dessa classe
• Qualquer bloco pode conter declarações de variáveis
• SOMBREAMENTO: quando um parametro ou uma
variável local em um método tiver o mesmo nome de
um campo, então o campo permanece OCULTO até
que o bloco termine a execução
• EXEMPLO NO NETBEANS
5. Escopo de Classe
• Os modificadores de acesso PUBLIC e PRIVATE
controlam o acesso ás variáveis e métodos de uma
classe
• MÉTODOS PUBLIC: apresentam aos clientes da
classe uma visualização dos serviços que a classe
fornece
• Os clientes da classe não precisam se preocupar
com a maneira como a classe realiza as tarefas
6. Escopo de Classe
• VARIÁVEIS E MÉTODOS PRIVATE: não permanecem
diretamente acessíveis aos clientes da classe. Os
detalhes de implementação da classe ficam
ocultos.
7. REFERÊNCIA THIS
• A palavra reservada THIS permite que cada objeto
faça uma referencia a si próprio.
• Quando um método NÃO-STATIC é chamado por
um objeto particular, o corpo do método utilizada
implicitamente a palavra-chave THIS para
referenciar as variáveis de instância do objeto e
outros métodos.
• Evite nomes de parametros ou variaveis local nos
métodos que conflitem com nomes de campos
8. REFERÊNCIA THIS
• THIS também pode ser utilizado de forma explicita
no corpo de um método NÃO-STATIC.
• Frequentemente é um erro de lógica quando um
método contém ump arametro ou variavel local
com o mesmo nome de um campo da classe
• Utilize a referencia THIS se desejar acessar o
campo da classe, caso contrário, o parametro ou
variavel local do método será referenciado
9. SOBRECARGA DE
CONSTRUTORES
• Funciona como os métodos sobrecarregados,
entretanto, é importante lembrar que:
• CONSTRUTORES não possuem tipo
• Construtores não possuem retorno
• Podemos ter vários construtores em uma classe
desde que eles tenham números de parâmetros
diferentes
• Construtor sem argumentos: é o construtor padrão
da classe
10. GET E SET
• Métodos SET são
MODIFICADORES
chamados
de
métodos
• Métodos GET são chamados de métodos de acesso
ou de consulta
• Com SET e GET é possível manipular campos
privados de uma classe, entretanto, o acesso é
restrito pela maneira como os métodos foram
implementados pelo programador, garantindo a
integridade dos dados.
11. GET E SET
• GET pode controlar como o cliente acessa a
variável private
• SET pode avaliar cuidadosamente as tentaivas de
modificar o valor da variável a fim de assegurar
que o novo valor é apropriado para esse item de
dados.
• Lembre-se: o programador deve fornecer a
verificação de validade, isso não ocorre de forma
automática!
12. MÉTODOS PREDICADOS
• São métodos que testam se uma condição é
verdadeira ou falsa.
• DICA: métodos set e get facilitam a depuração do
software quando há problemas na compilação e
execução do mesmo
13. COMPOSIÇÃO
• É quando uma classe pode ter referencias a
objetos de outras classes como membros
• Também conhecida como RELACIONAMENTO TEM
UM
• É uma forma de reutilização de software
• Uma classe tem referencias a objetos de outras
classes
14. ENUMERAÇÃO
• Define um conjunto de constantes representadas
como identificadores únicos.
• Os tipos ENUM são tipos por referencia: é possível
referencias um objeto de um tipo enum com uma
referencia
• Uma declaração de um tipo ENUM é declarado
como uma declaração ENUM
15. ENUMERAÇÃO
• Cada declaração ENUM declara uma classe ENUM com
as restrições seguintes:
• Tipos ENUM são implicitamente FINAL, porque
declaram constantes que nao devem ser modificadas
• Constantes ENUM são implicitamente STATIC
• Qualquer tentativa de criar um objeto de um tipo
ENUM com um operador NEW resulta em um erro de
compilação
16. ENUMERAÇÃO
• As constantes ENUM podem ser utilizadas em
qualquer lugar em que constantes podem ser
utilizadas (switch/case, for, etc)
• MÉTODO VALUES: é um método STATIC que
retorna um ARRAY das constantes de ENUM na
ordem em que elas foram declaradas
• MÉTODO RANGE: exibe o intervalo das constantes
do ENUM
17. Coleta de Lixo e o Método
Finalize
• RARAMENTE UTILIZADO!!!!!!!!!
• Toda classe JAVA contém métodos da classe
OBJECT (pacote.java.lang)
• Você NÃO DEVE
FINALIZE!!!!!!!
UTILIZAR
o
MÉTODO
• A JVM realiza coleta de lixo automatica para
reivindicar a memória ocupada por objetos que
não estão mais em uso
18. Coleta de Lixo e o Método
Finalize
• Todo objeto criado utiliza recursos do sistema
computacional, particularmente a memória.
• É necessário devolver ao sistema os recursos
quando eles não estão mais em uso.
• Exemplo: um aplicativo abre um arquivo no disco
para modificar seu conteúdo. Se o aplicativo não
fechar o arquivo, nenhum outro aplicativo poderá
usar o arquivo até que ele seja fechado
19. Coleta de Lixo e o Método
Finalize
• O MÉTODO FINALIZE é chamado pelo COLETOR DE
LIXO para faze a limpeza de terminação sobre um
objeto um pouco antes de o coletor de lixo
reivindicar a memória do objeto
• O MÉTODO FINALIZE não recebe parâmetros e tem
o tipo de retorno VOID
• O COLETOR DE LIXO nunca pode executar antes de
um programa terminar
20. Coleta de Lixo e o Método
Finalize
• A razão pela qual programadores NÃO DEVEM usar
o MÉTODO FINALIZE é que não se sabe quando o
método finalize será chamado.
• Não há garantias de que o coletor de lixo executrar
em uma data/hora específica.
• Muitas classes JAVA fornecem métodos para
liberação de recursos.
21. Relembrando: STATIC
• Estático, parado, constante
• Quando definimos uma classe e criamos vários
objetos dela, já sabemos que cada objeto será uma
cópia fiel da classe, porém com suas próprias
variáveis e métodos em lugares distintos da
memória.
22. Relembrando: STATIC
• Quando definimos variáveis com a palavra static
em uma classe ela terá um comportamento
especial: ela será a mesma para todos os objetos
daquela classe.
• Não haverá um tipo dela em cada objeto. Todos os
objetos, ao acessarem e modificarem essa variável,
acessarão a mesma variável, o mesmo espaço da
memória, e a mudança poderá ser vista em todos
os objetos.
23. Relembrando: STATIC
• Quando usar variáveis static em Java?????
• Quando você quiser ter um controle sobre os
objetos ou quando todos os objetos devem
partilhar uma informação
• Evitar ter que fazer Composição ou chamar
métodos de outros objetos
24. MEMBROS DA CLASSE STATIC
• Um campo STATIC é utilizado no caso em que
apenas UMA CÓPIA de uma variável particular
deve ser compartilhada por todos os objetos de
uma classe
• Também chamado de VARIÁVEL DE CLASSE
• Uma variável STATIC representa INFORMAÇÕES DE
ESCOPO DE CLASSE (todos os objetos
compartilham os mesmos dados)
25. MEMBROS DA CLASSE STATIC
• Portanto, UTILIZE uma variável static quando todos
os objetos de uma classe precisarem utilizar a
mesma cópia da variável
• Variáveis estáticas tem escopo de classe
• Membros PUBLIC STATIC podem ser acessados por
meio de uma referencia a qualquer objeto da
classe
26. MEMBROS DA CLASSE STATIC
• Membros PUBLIC STATIC podem ser acessados
qualificando o nome de membro com o nome de
classe e um ponto.
• Uma CLASSE de membros da classe PRIVATE STATIC
pode ser acessada somente por métodos da classe.
• Variáveis e métodos de classe estática existem e
podem ser utilizados, mesmo que nenhum objeto
dessa classe tiver sido instanciado
27. MEMBROS DA CLASSE STATIC
• Para acessar um MEMBRO PRIVATE STATIC quando
nenhum objeto da classe existe, um MÉTODO
PRIVATE STATIC deve ser fornecido e o método
deve ser chamado qualificando seu nome com o
nome da classe e um ponto.
• EXEMPLO NO NETBEANS
• (8.12 E 8.13)
28. MEMBROS DA CLASSE STATIC
• Objetos STRINGS originais em Java são imutáveis:
eles não podem ser modificados depois de criados!
• Quando concatenamos STRINGS na verdade
estamos criando um novo objeto STRING.
• Dica: ter muitas referências a um objeto STRING é
seguro!!!
29. MEMBROS DA CLASSE STATIC
• MÉTODO STATIC GC:
• Classe java.lang
• Indica que o coletor de lixo deve tentar fazer o
melhor que puder para reivindicar os objetos que
são elegíveis para a coleta de lixo
• Isso não quer dizer que tudo será coletado!!!!
30. MEMBROS DA CLASSE STATIC
• REFORÇANDO: A JVM não garante quando o
coletor de lixo será executado
• IMPORTANTE: um método declarado STATIC não
pode acessar membros de clsse NÃO-STATIC,
porque um método STATIC pode ser chamado
mesmo quando nenhum objeto da classe foi
instanciado.
31. MEMBROS DA CLASSE STATIC
• A referencia THIS não pode ser utilizada em um
MÉTODO STATIC pela mesma razão
• A referencia THIS deve referenciar um objeto
específico da classe
• Quando um método STATIC é chamado, talvez não
haja nenhum objeto da sua classe na memória.
• A referencia THIS é exigida para permitir que um
método de uma classe acesse outros membros NÃOSTATIC da mesma classe
32. IMPORT STATIC
• Permite que os programadores referenciem
membros STATIC importados como se fossem
declarados na classe que os utiliza
• O nome da classe e o ponto não são necessários
para utilizar um membro static importado
33. IMPORT STATIC
• Duas formas:
• Import static simples: importa um membro static
particular.
Exemplo:
import
static
nomeDoPacote.nomeDaClasse.nomeDoMembro
• Import static por demanda: importa todos os
membros static de uma classe. Exemplo: import
static nomeDoPacote.nomeDaClasse.*;
• Exemplo no netbeans
34. VARIÁVEIS DE INSTÂNCIA
FINAL
• PRINCÍPIO DO MENOR PRIVILÉGIO: deve ser concedido
ao código somente a quantidade de privilégio e acesso
que o código precisa para realizar sua tarefa
designada, e não mais que isso.
• FINAL: especifica que uma variavel não é
modificável, isto é, uma constante. Qualquer tentativa
de modificá-la é um erro
• Não é necessário inicializar as variáveis final. Elas
podem ser inicializadas em cada construtor.
• Exemplo no netbeans
35. Reutilização de software
• Quando um programa JAVA executa em um
computador, é trabalho da JVM traduzir os
comandos JAVA em comandos que o computador
local possa entender.
• Fazer uso das APIs
• RAD: desenvolvimento rapido de aplicações ou
rapid applications development
36. Abstração de dados e
encapsulamento
• Ocultamento de informações: quando classes
ocultam detalhes de implementação dos seus
clientes.
• ABSTRAÇÃO DE DADOS: um cliente de uma classe
não precisa se preocupar com a forma com que
aquela classe foi implementada. O cliente se
preocupa apenas com a funcionalidade que a
classe lhe oferece, não com o modo com que essa
funcionalidade foi implementada.
37. Abstração de dados e
encapsulamento
• ADT: abstract data type ou tipos de dados
abstratos
• INT: é uma representação abstrata de um número
inteiro
• ESTOURO ARITMÉTICO: quando um valor muito
grande é gerado e não cabe em uma variável do
tipo INT, já que esta é limitada em tamanho de
bytes
38. Abstração de dados e
encapsulamento
• ADT:
• Captura uma representação dos dados
• Captura as operações que podem ser realizadas
nesses dados
• O programador java não pode alterar a base da
linguagem por conta própria, mas ele pode
estender via novos tipos, pode criar tipos por meio
de novas classes
39. Abstração de dados e
encapsulamento
• Exemplos no netbeans
• Pacotes faciliam a reutilização de sotware
permitindo que programas importem classes de
outros pacotes
• Pacotes fornecem uma convenção para nomes de
classes, ajudando a evitar conflitos
40. Acesso de pacote
• É quando nenhum modificador de acesso é
especificado para um método ou variável quando esse
método ou variável é declarado em uma classe
• MODIFICADORES DE ACESSO: public, private ou
protected
• Importante: se um programa utilizar multiplas classe
no mesmo pacote, essas classes poderão acessar
diretamente os membros de acesso de pacote de
outras classes por meio de referências a objetos das
classes apropriadas.