Baixe o app para aproveitar ainda mais
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.
Compartilhar