Baixe o app para aproveitar ainda mais
Prévia do material em texto
Programação Orientada a Objetos Parte 3 Notas de aula baseadas no curso do prof. Flavio Elias Sistemas de Programação Turma B – 2s2014 Daniel Guerreiro e Silva Declarações e Controle de Acesso Pacotes • É um conjunto de classes java organizados em uma “estrutura de diretório”. • Normalmente, os pacotes são organizados por categoria, e muitas vezes as classes que fazem parte de um mesmo pacote tem relação entre si. • Declaração de que uma classe pertence a um pacote: package nomepacote; 3 Pacotes • Quando se utilizam classes que fazem parte de outro pacote (que também não seja java.lang.*, pacote pré-carregado por padrão), é necessário acrescentar o nome do pacote na lista de imports: import java.util.*; 4 Declarações e Modificadores de Classe • Modificadores de acesso – Há 4 níveis de acesso, mas apenas 3 modificadores. • public, protected, private, default (sem modificador) – Declaração de uma classe só pode ter o modificador public ou default (sem modificador) • Modificadores não referentes a acesso – final, static, abstract, entre outros. 5 Declarações e Modificadores de Classe • O que significa acessar uma classe? “Diretamente” – Classe A criar uma instância da Classe B – Classe A estender uma classe Classe B (tornar-se uma subclasse) “Indiretamente” – Classe A acessar métodos e variáveis da Classe B (conforme o tipo de controle de acesso destes) 6 Declarações e Modificadores de Classe • Modificadores de Acesso – Acesso default (sem modificador): • Permite acesso apenas a classes do mesmo pacote. • Também chamado de Acesso em Nível de Pacote. – Acesso public: • Todas as classes de todos os pacotes podem acessar uma classe pública. 7 Declarações e Modificadores de Classe • Modificadores não referentes a acesso – Classes finais: • Classes marcadas com o modificador “final”. • Significa que a classe não pode ter subclasses. – Classes abstratas: • Classes marcadas com o modificador “abstract”. • A classe não pode ser instanciada. • Deve ser estendida (ter subclasses). • Pode possuir métodos abstratos. • Não pode ser final. 8 Declarações e Modificadores de Métodos e Variáveis • Modificadores de acesso – Obs.: métodos e variáveis de instância (não locais) são conhecidos como membros. – Membros Públicos • Declarado com a palavra-chave “public”. • Outras classes, independente do pacote a qual pertençam, poderão acessar o membro. – Membros Privados • Declarado com a palavra-chave “private”. • Não podem ser acessados por membros de outra classe. 9 Declarações e Modificadores de Métodos e Variáveis • Modificadores de acesso – Membros Default • Declarado sem modificador de acesso. • Podem ser acessados por classes do mesmo pacote. – Membros Protegidos • Declarado com a palavra-chave “protected”. • Podem ser acessados por classes do mesmo pacote ou subclasses de outros pacotes. • A subclasse só poderá ver o membro protegido através da herança. 10 Declarações e Modificadores de Métodos e Variáveis • Modificadores de acesso – Modificadores e Variáveis Locais • Nenhum modificador de acesso pode ser aplicado a variáveis locais. • Somente o modificador (não referente a acesso) “final” pode ser aplicado a variáveis locais. • Modificadores não referentes a acesso – Métodos Finais • Declarado com a palavra-chave “final”. • O método não pode ser sobrescrito (overriding). 11 Declarações e Modificadores de Métodos e Variáveis • Modificadores não referentes a acesso – Métodos Abstratos • Declarado com a palavra-chave “abstract”. • O método não é implementado. • A implementação é feita em subclasses, através da sobrescrita do método. • Não pode ser “final” e nem “private”. • A classe também tem que ser abstrata. • Uma classe concreta que estenda uma classe abstrata deve implementar todos os métodos abstratos. • Exemplo: public abstract void sendData(byte[] dados); 12 Declarações e Modificadores de Métodos e Variáveis • Modificadores não referentes a acesso – Métodos synchronized • Método acessado por uma Thread de cada vez. – Variáveis Finais int final RAIO = 3; • Não podem ser reinicializadas (receber outra atribuição). • A referência é final, mas o objeto não. 13 Declarações e Modificadores de Métodos e Variáveis • Modificadores não referentes a acesso – Membros Estáticos • Declarado com a palavra-chave “static”. • Membros estáticos pertencem à classe, em vez de a qualquer instância específica. • Membro estático pode ser acessado sem existir nenhuma instância da classe. • Como acessar: – NomeClasse.nomeMetodo(); – NomeClasse.nomeVariavel; • Atenção: Um erro comum é tentar acessar um membro não estático a partir do método main(). 14 Regras de Declaração de Classes • Apenas 1 classe pública por arquivo .java – Ou seja, o mesmo arquivo pode ter múltiplas classes! • Nome do arquivo = Nome da classe pública • Declaração de pacote na 1ª linha do código • Importação depois da declaração de pacote (se houver) e antes da declaração de classe 15 Regras de Declaração • Estrutura do arquivo de código-fonte 16 package br.unb.principal; import java.util.*; import br.unb.utilitarios.Util; // Esta é uma classe de teste public class Teste { public static void main(String[] args) { System.out.println(Util.converteKgOz(args[0])); } } Implementação de Interfaces • Uma Interface define o que uma classe (que a implementa) pode fazer, mas não define como fazer. • É uma “classe” 100% abstrata. • Todos os métodos são implicitamente public abstract. • Os métodos não podem ser estáticos. • Todas as variáveis são implicitamente public static final, ou seja, constantes. 17 Implementação de Interfaces • Uma interface pode ter herança: estender uma ou mais interfaces diferentes. • Não pode implementar outra interface ou classe. • É declarada com a palavra-chave interface 18 Implementação de Interfaces • Definindo uma interface: 19 public interface Conexao { public static final int TIMEOUT = 60; //segundos int RETRY = 5; boolean conectar(String endereco); public abstract boolean desconectar(); void enviarDados(byte[] dados); } Implementação de Interfaces • Implementando uma interface: 20 public class ConexaoSemFio implements Conexao { boolean conectar(String endereco) { // Código específico for(int i=0; i<RETRY; i++) { } } public boolean desconectar() { // Código específico } void enviarDados(byte[] dados) { // Código específico } } Classes Internas Classes Internas (Inner Classes) § São Classes que são implementadas dentro de outras classes class MyOuter { class MyInner { } } 29/09/14 22 Classes Internas (Inner Classes) public class Externa { private int x; public class Interna { public void metodoI () { System.out.println(“x = ” + x); } } public void metodoE () { Interna interna = new Interna (); interna.metodoI(); } } 23 Classes Internas • Acesso a partir de um método ou classe que não seja nem da classe Externa nem da Interna: Externa.Interna 24 Classes Internas public staFc voidmain (String[] args) { MyOuter mo = new MyOuter(); MyOuter.MyInner inner = mo.new MyInner(); inner.seeOuter(); } 25 Classes Locais (a métodos) class MyOuter2 { private String x = "Outer2"; void doStuff() { class MyInner { public void seeOuter() { System.out.println("Outer x is " + x); } } } } 26 Classes Locais (a métodos) • Não podem ser referenciadas de fora do método. 27 Classes Anônimas public void metodoBeta() { botao.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println(“Ação”); } } ); ) Crie uma nova classe (sem nome) que implemente a interface ActionListener e, a propósito aqui esta a implementação dos métodos da interface: actionPerformed 28 Nested Classes • São staFc inner classes • Não tem o mesmo relacionamento com as classes externas tal como as classes internas regulares tem class BigOuter { static class Nested { ...} ... } 29 Nested Classes class BigOuter { static class Nested { } } class Broom { public static void main (String [] args) { BigOuter.Nested n = new BigOuter.Nested(); } } 30
Compartilhar