Buscar

15- Escopo variaveis e modificadores de acesso

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 27 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 27 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 27 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Linguagem de 
Programação
Escopo variáveis
Modificadores Acesso
Escopo variáveis
• Por escopo entendemos todos os locais que um
declaração tem validade, ou seja, a variável é visível.
• A variável é visível no bloco ou estrutura na qual foi
definida.
• Variáveis declaradas no corpo da classe são têm• Variáveis declaradas no corpo da classe são têm
escopo global.
• Variáveis declaradas dentro de métodos são
denominadas variáveis locais.
• O uso de variáveis fora do seu escopo constitui erro
de compilação que previsa ser obrigatoriamente
corrigido.
Exemplo de escopo
public class Escopo {
int x, y = 5;
public void metodo1 (int z){
x = z;
System.out.println(x);
}
public void metodo2 (){
int j;
global
local método
local método (parâmetro)
int j;
for (j = 0; j < 3; j++)
x = x + j;
System.out.println(x);
System.out.println(j);
}
public void metodo3 (){
for (int i = 0; i < 3; i++){
y = y + i;
}
System.out.println(i);
}
}
local método
local apenas para o for
erro compilação
Modificadores de Acesso
• Modificadores são palavras chave que modificam a
definição e o comportamento de uma classe, método ou
variável.
• Os seguintes modificadores estão presentes na
linguagem java:linguagem java:
� Modificadores para controlar o acesso à classe,
método ou variável : public, private e protected;
Modificadores de Acesso
• As variáveis declaradas dentro de métodos não podem
ter modificador de acesso.
public float obterMedia(){
publicpublic float media; Illegal modifier for media...publicpublic float media;
media = (vlr1 + vlr2)/2;
return media;
}
Modificadores de Acesso
• Uma classe, método ou atributo pode não ter um
modificador de acesso explícito.
• Neste caso assume o modificador default.
• O modificador default é conhecido também como
package.package.
• Não se pode declarar explicitamente numa classe,
método ou atributo um modificador com o nome
default ou com o nome package.
Outros Modificadores
• Modificador static para indicar métodos e variáveis de
classe;
• Modificador final, para finalizar as implementações de
classes, métodos e variáveis.
Público
• Um método ou atributo (variável) com acesso público
(public) proporciona o mais alto grau de visibilidade,
ou seja, são visíveis independente de onde estejam,
seja numa biblioteca numa classe, subclasse, etc.
public class Media {
public float vlr1, vlr2;
public void alterarValor1 (float v){public void alterarValor1 (float v){
vlr1 = v;
}
public void incrementaValor2(){
vlr2 = vlr2 + 1;
}
public float obterMedia(){
float media;
media = (vlr1 + vlr2)/2;
return media;
}
}
Atributo - Público
public class Media {
public float vlr1, vlr2;
public void alterarValor1 (float v){
vlr1 = v;
}
public void incrementaValor2(){
vlr2 = vlr2 + 1;
}
public float obterMedia(){
float media;
media = (vlr1 + vlr2)/2;
return media;
}}
}
public class Principal { 
public static void main(String[] args) {
Media m = new Media();
m.vlr1 = 5; //acesso direto atributo
m.vlr2 = 6;
float res = (m.vlr1 + m.vlr2) / 2;
System.out.println(res);
}
}
Método Público
• Os métodos public são visíveis para qualquer
instância da classe.
• Qualquer método public pode ser sobreescrito por
qualquer subclasse(*).qualquer subclasse(*).
(*) a ser visto na explicação de herança. Uma subclasse é uma classe que herda a estrutura 
(atributos e métodos) de outra classe denominada Superclasse.
Private
• Os métodos e variáveis do tipo private são opostos
aos que contém declaração pública e não podem ser
vistos por nenhuma classe a não ser aquela na qual
foram definidas.
• Classes principais não podem ser declaradas como
private.private.
Atributo - Private
public class Media {
private float vlr1, vlr2;
public void alterarValor1 (float v){
vlr1 = v;
}
public void incrementaValor2(){
vlr2 = vlr2 + 1;
}
public float obterMedia(){
float media;
media = (vlr1 + vlr2)/2;
acessíveis apenas por métodos 
da própria classe.
media = (vlr1 + vlr2)/2;
return media;
}
}
public class Principal { 
public static void main(String[] args) {
Media m = new Media();
m.vlr1 = 5; 
float res = (m.vlr1 + m.vlr2) / 2;
System.out.println(res);
}
}
the field vlr1 is not visible
erro acesso – vlr1 e vlr2
Default (package)
• Em classes, métodos e atributos sem especificador
definido é assumido o modificador default ou package.
• Métodos e atributos são visíveis a qualquer método de
outra classe que esteja dentro do mesmo pacote.
• Um método default pode ser sobreescrito por qualquer• Um método default pode ser sobreescrito por qualquer
subclasse(*) dentro do mesmo pacote.
(*) a ser visto na explicação de herança. 
Default (package) - classe
package classes;
class Media {
...
}
package classes;
public class Principal { 
public static void main(String[] args) {
Media m = new Media();
modificador acesso não especificado.
okMedia m = new Media();
...
}
}
package classes2;
public class Principal { 
public static void main(String[] args) 
{
Media m = new Media();
...
}
}
The Type Media is not visible
ok
Default (package) - atributo
package classes;
public class Media {
float vlr1;
private float vlr2;
}
package classes;
public class Principal { 
public static void main(String[] args) {
Media m = new Media();
m.vlr1 = 4.5f; 
modificador acesso não especificado.
ok
ok
...
}
}
package classes2;
public class Principal { 
public static void main(String[] args) 
{
Media m = new Media();
m.vlr1 = 2.5f;
...
}
}
The field vlr1 is not visible
ok
ok
Default (package) - método
package classes;
public class Media {
...
float obterMedia(){
float media;
media = (vlr1 + vlr2)/2;
return media;
}
}
package classes;
public class Principal { 
public static void main(String[] args) {
Media m = new Media();
float res = m.obterMedia(); 
modificador acesso não especificado.
ok
okfloat res = m.obterMedia(); 
...
}
}
package classes2;
public class Principal { 
public static void main(String[] args) 
{
Media m = new Media();
float res = m.obterMedia();
...
}
}
The method obterMedia() for 
type Media is not visible
ok
ok
Protected
• Somente métodos e variáveis podem ser declarados
protected.
• Os métodos ou variáveis com acesso protected se
restringem à classe que o declara, suas
subclasses(*) e classes no mesmo pacote. Estesubclasses(*) e classes no mesmo pacote. Este
último caso se assemelha ao default.
(*) subclasse é uma classe que incorpora a definiação da estrutura e comportamente de outra 
classe, a superclasse. A ser visto na explicação de herança. 
Modificadores de Acesso
• Um resumo sobre a visibilidade com uso dos
modificadores de acesso é dado abaixo:
Visibilidade Public Protected Package Private
Da Mesma Classe Sim Sim Sim Sim
De uma classe no mesmo pacote Sim Sim Sim NãoDe uma classe no mesmo pacote Sim Sim Sim Não
De qualquer classe fora do pacote Sim Não Não Não
De uma subclasse fora do pacote Sim Sim Não Não
Modificadores de Acesso
(notação UML)
Público (+) - acesso total, sem restrição.
Protegido (#) - acesso pela própria classe e classes 
derivadas dela.derivadas dela.
Privado (-) - acesso apenas pela própria classe.
Modificador final
• Este modificador pode ser usado nas definições de
classes, métodos e atributos.
• Quando for aplicado a uma classe, significa que essa
classe não poderá ser “subclassificada”, ou seja, não
pode ser herdada.
• Quando for aplicado a um atributo, significa que o
atributo terá valor constante.
• Quando for aplicado a um método, significa que esse
método não poderá ser sobrepostopor subclasses
(classes filhas).
Modificador Final (atributo)
public class Media {
private float vlr1;
private final float vlr2 = 1;
...
public void incrementaValor2(){
vlr2 = vlr2 + 1;
}
public float obterMedia(){
The final field Media.vlr2
cannot be assigned
public float obterMedia(){
float media;
media = (vlr1 + vlr2)/2;
return media;
}
}
o atributo pode ser utilizado 
em expressão
Modificador static
• Este modificador pode ser usado nas definições de
métodos e atributos.
• Pode ser aplicado a bloco de código não associado a
um método.
• No exemplo abaixo, não importa quantos objetos
(instâncias) da classe Media estejam declarados, o
atributo vlr2 sempre ocupará a mesma área de
(instâncias) da classe Media estejam declarados, o
atributo vlr2 sempre ocupará a mesma área de
memória e será compartilhado por todas as instâncias.
public class Media {
private float vlr1;
private static float vlr2;
...
}
Modificador static (atributo)
public class Media {
private float vlr1;
private static float vlr2;
public Media (){
vlr1 = 0;
vlr2 = 0;
}
public void alterarValor1 (float v){public void alterarValor1 (float v){
vlr1 = v;
}
public void incrementaValor2(){
vlr2 = vlr2 + 1;
}
public float obterMedia(){
float media;
media = (vlr1 + vlr2)/2;
return media;
}
}
public class Principal { 
public static void main(String[] args) {
Media m1 = new Media();
Media m2 = new Media();
m1.alterarValor1(4);
Modificador static (atributo)
m1.vlr1 Media.vlr2 m2.vlr1
0 0
0
4
m2.alterarValor1(5);
m1.incrementaValor2();
System.out.println(m1.obterMedia());
m2.incrementaValor2();
System.out.println(m2.obterMedia());
System.out.println(m1.obterMedia());
}
}
5
1
2.5
2
3.5
3.0
Modificador static (método)
• Métodos com o modificador static não podem utilizar
atributos ou métodos não estáticos da classe.
public class Principal { 
float res;
public static void main(String[] args) {
Media m1 = new Media();
res = m1.obterMedia();
System.out.println(res);
}
}
Cannot make a static reference a 
non-static field res
Modificador static (método)
• Métodos static podem ser acionados diretamente a
partir da classe, não necessitando instâncias para
chamadas de execução ao método.
• Classes que são aplicações Java (Java Application) tem
um método main com o modificador static.
• Na classe Media, apresentada em slides anteriores, se• Na classe Media, apresentada em slides anteriores, se
o método obterMedia fosse static, ele poderia ter uma
chamada de execução na forma abaixo:
Media m1 = new Media();
float res = m1.obterMedia();
ou
float res = Media.obterMedia();
Variáveis (atributos) e métodos de 
instância e de classe
• Variável de instância são as variáveis que só podem
ser referenciadas a partir de um objeto (instância) da
classe.
• Variável de classe são as variáveis que podem ser
referenciadas pelo nome da classe semreferenciadas pelo nome da classe sem
necessariamente ter uma instância criada. São as
variáveis com o modificador static.
• As mesmas definições também se aplicam aos
métodos.

Outros materiais