Declarações e Controle de Acesso

Post on 18-Nov-2014

2.471 views 6 download

description

 

Transcript of Declarações e Controle de Acesso

Elenilson Vieiraelenilson.vieira.filho@gmail.com

SCJPSCJPDeclarações e Controle de AcessoDeclarações e Controle de Acesso

Definições Básicas

Um programa Java é uma coleção de objetos se comunicando com outros objetos pela invocação de métodos

Classe: descreve um objeto de forma a explicitar seus tipos de comportamento e estado (variáveis de instância)

Objeto: a representação, em tempo de execução, da classe

Definições Básicas

Estado (variáveis de instância): Cada objeto terá um único conjunto de variáveis de instância como descrito em sua classe e elas definirão o seu estado.

Comportamento (métodos): Onde a lógica da classe é colocada. São lá que os algoritmos são colocados e executados

Herança

Códigos definidos em uma classe podem ser reusados em outras classes. Uma subclasse tem que explicitamente declarar que está herdando de uma superclasse mas uma superclasse nem sabe quem são suas herdeiras

class A{public int x = 10;

}class B extends A{

public void b(){System.out.println(x);

}}

Interface

De certa forma elas atuam como superclasses mas não há qualquer implementação dos métodos e estes devem ser implementados pelas classes que implementam a interface.

Public interface A{public void a();

}public class B implements A{

public void a{}}

Identificadores Legais

Devem começar com letras, $ ou caractere de ligação (_) Não há limites de quantos caracteres um identificador pode conter (achei estranho!) identificadores são sensíveis a maiúscula e minúscula não se pode usar palavras reservadas

Ex: _a, $a, ___________2_w, .b, :a, e#.

Arquivos Fonte

Pode conter apenas uma classe pública

Se há uma classe pública no arquivo, o nome do arquivo deve ser o mesmo seguido de “.java”

Se a classe faz parte de um pacote, a declaração deve ser a primeira linha antes de qualquer código

Arquivos Fonte

Declarações import devem vir entre o local da declaração do package e o início da classe

Declarações import e package valem para todas as classes declaradas do arquivo de código fonte

Um arquivo pode ter mais de uma classe não pública

Modificadores de Acesso

Uma classe A pode acessar uma classe B se A pode uma das 3 coisas:

Criar uma instância de B Extender a classe B Acessar determinados métodos e variáveis dentro

da classe B

Modificadores de Acesso: Default

Dá acesso apenas a classes que estejam dentro do pacote

package cert;class Beverage { }

package exam.stuff;import cert.Beverage;class Tea extends Beverage { }

Can't access class cert.Beverage. Class or interface must be public, in same package, or an accessible member class.import cert.Beverage;

Modificadores de Acesso: Public

Dá acesso a todas as outras classes que tentarem

package eu;public class A{}

package B;import eu.A;public class B{

A a = new A();}

Outros Modificadores de Acesso

Final

Abstract

Strictfp (não é necessário saber o que strctfp faz, mas saber que é um modificador para classe e métodos, não para variáveis).

Outros Modificadores de Acesso

Final faz com que classes não possam ser especializadas. Usar final não vai contra o conceito de OO?

Usa-se final por segurança e apenas quando está certo que nenhum programador precisará extender sua classe.

Classes Abstratas

Classes abstratas Não podem ser instanciadas e sua única finalidade é

ser extendida Por que criar uma classe que não pode ser instanciada? Bem, poderíamos ter uma classe bem genérica dada como Carro, mas qual o motor desse carro? E o câmbio? Quantos cavalos de potência? Isso são características de modelos de carros, então uma classe BWM pode extender carro e implementar seus métodos abstratos

Classes Abstratas

Se há algum método marcado como abstrato, a classe inteira deve ser abstrata

Uma classe abstrata pode conter métodos não abstratos

Não se pode marcar uma classe como abstract e final

Interfaces

Pense em uma interface com 100% dos métodos marcados como abstratos

Uma interface pode ter apenas métodos abstratos

Todos os métodos de uma interface são implicitamente públicos e abstratos

Todas as variáveis definidas em uma interface devem ser públicas, estáticas e finais. Se você não explicitar, elas mesmo assim serão.

Interfaces

Métodos de uma interface não podem ser estáticos

Uma interface não pode extender uma classe mas pode extender uma ou mais interfaces :O (pág 59)

Uma interface não pode implementar outra interface

Você pode tipar uma interface como abstract mas é redundante

public abstract interface Rollable { }public interface Rollable { }

Interfaces

Modificadores de Acesso

Default, public, protected, private

Classes podem usar apenas default e public mas membros podem usar os 4

Modificadores de Acesso

Membros públicos Significa que todas as outras classes tem acesso a

esse membro seja usando o (.) ou extends

Modificadores de Acesso

Membros private Significa que apenas a própria classe tem acesso a

esses membros

Um método private pode sofrer override em uma subclasse?

Modificadores de Acesso

Protected e Default São quase idênticos, mas há uma pequena e crítica

diferença: no default os membros podem ser acessados apenas dentro do pacote e o protected é igual ao default mas suas subclasses podem acessar mesmo estando fora do pacote

package tu;public class A{

void a(){}}

package nos;public class B extends A{

void b(){a();

}}

Relembrando

Variáveis Locais Apenas o final é aplicado

…public void a(){

final int c = 10;}

Relembrando

Métodos final não podem ser sobrescritos

Métodos abstratos: são métodos sem implementação

Assim? public abstract void vos();

Ou assim? public abstract void lalala(){}

Definições Básicas

Estado (variáveis de instância): Cada objeto terá um único conjunto de variáveis de instância como descrito em sua classe e elas definirão o seu estado.

Comportamento (métodos): Onde a lógica da classe é colocada. São lá que os algoritmos são colocados e executados

Métodos Synchronized

Indicam que o método pode ser acessado por uma única thread no tempo.

public synchronized void c(){}

Métodos Native

Indica que o método é dependente de plataforma. Não é necessário saber como funciona, apenas que é um modificador

Métodos strictfp

Faz com que seja usado o padrão IEE754 para operações com ponto flutuante (mais precisão e mais velocidade nas operações

Argumentos Variáveis

Usamos os …; Pode haver outros argumentos mas esses devem vir antes e o var-arg deve vir por último. Não pode ter mais de um var-arg

Sintaxe:void a(int... x); // Legalvoid b(char c, int... y); // legalvoid c(int... u, String a);//Ilegalvoid d(int u...);//Ilegal

Construtores

Devem ter o mesmo nome da classe e JAMAIS ter tipo de retorno. Não podem ser assinalados como static, final ou abstract.

public class Elenilson{public Elenilson(String nome){}

}

Variáveis Primitivas

Podem ser de 8 tipos e podem ser declaradas como variáveis de classe, de instância, argumentos de métodos e variáveis locais

Não é necessário saber calcular a faixa dos tipos mas saber que os tipos inteiros na sequencia são byte, short, int, long e os de ponto flutuante são float e double

Os tipos tem sinais e o bit mais a esquerda indica se é positivo ou negativo (1 e 0) e os outros indicam o valor.

Variáveis Primitivas

Variáveis de Instância

São declarados dentro da classe mas fora de qualquer método. São inicializadas apenas na instanciação da classe

Variáveis Locais

Tem seu tempo de vida no início do método e são destruídas no término do métodos. Não pode ter modificadores de acesso e podem ser apenas assinaladas como final

public void a(){int x = 10;

}

Variáveis

Arrays

São objetosInt x[];int[] y = new int[10];

Pode-se declarar arrays multidimensionaisint a[][][];char[] b[];

Final, Transient, Volatile e Static

Variáveis final não podem ter seus valores alterados. Final pode ser

usado para classes, métodos e variáveis

Variáveis e métodos static São pertencentes às classes e existem

independentemente da instanciação

Final, Transient, Volatile e Static

Final, Transient, Volatile e Static

Variáveis transiente indica para a JVM não salvar o valor de uma

variável em uma serialização

Volatile: Indica para a JVM que sempre que precisar

consultar o valor da variável que a busque na cópia principal (não use a cópia do registrador como otimização)

Enum

Restringe variáveis a um número fechado de valores que são definidos pelo programador

enum CoffeeSize { BIG, HUGE, OVERWHELMING };CoffeeSize cs = CoffeeSize.BIG

Enum

Enum

Perguntas?

Elenilson Vieiraelenilson.vieira.filho@gmail.com

Obrigado!