Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes [email protected] Aula 24 e 25 - Revisão do Módulo Avançado e Diretrizes de Projeto http://www.ufpa.br/sampaio/bd2003/lpoo Marco Fagundes 1 de 36 Roteiro Modificador Static Revisão do Módulo de Fundamentos Projeto 2 de 36 Modificador Static 3 de 36 Modificador Static Pode ser utilizado com Variáveis e Métodos, tornando-os relacionados à classe e não às instâncias Métodos e variáveis estáticos podem ser utilizados sem a necessidade de instanciar um objeto da classe desejada 4 de 36 Exemplo class AppVarStatic{ static int varSt; public AppVarStatic(){ varSt++;} public static int impVarSt(){ return varSt; } } class TestaAppVarStatic{ public static void main(String[] args){ System.out.println( AppVarStatic.varSt); AppVarStatic t = new AppVarStatic(); System.out.println( AppVarStatic.impVarSt()); } } 5 de 36 Observação sobre variáveis É importante lembrar que as variáveis de instância são inicializadas automaticamente. Por outro lado, as variáveis locais devem ser obrigatoriamente inicializadas em código. Por Exemplo: class AppVar{ int i; void impVar(){System.out.println(i);} void impVar2(){ int i = 0; System.out.println(i);} } class TestaAppVar{ public static void main(String[] args) {AppVar av = new AppVar(); av.impVar(); av.impVar2();} } 6 de 36 Revisão do Módulo Avançado 7 de 36 Módulo Avançado Módulo Avançado • Objetivo: Apresentar conceitos avançados envolvidos na programação orientada a objetos, onde destacamos a reutilização de comportamento e/ou dados através da herança de classes. Adicionalmente, visa também apresentar mecanismos envolvidos no desenvolvimento de aplicações robustas através do tratamento de erro com exceções • Meta: Estender a aplicação desenvolvida no módulo de fundamentos adicionando reutilização de comportamento/dados e robustez através de tratamento de erros 8 de 36 Módulo Avançado Conteúdo • Construção de Pacotes • Herança de Classes • Redefinição de Métodos e Ligação Dinâmica • Manipulação de Exceções • Classes Abstratas • Interfaces 9 de 36 Módulo de Fundamentos Duração: 11 Aulas Java e 06 Aulas Delphi (ainda Falta!!!) • Início: 30/04/2003 (2 aulas) ... 20/05/2003 • Término: 02/06/2003(Java) - 09/06/2003 (provável) Datas Importantes • Entrega do 2º Exercício: 11/06/2003 • Exame Escrito: 17/06/2003 • Entrega da 1ª Etapa do Projeto Final: 17/06/2003 Vale lembrar que: • Cada exercício vale 5% da média final • Cada exame vale 10% da média final • A 1ª etapa do projeto vale 20% da média final 10 de 36 Módulo Avançado - Pacote Construção de Pacotes • Cada pacote é associado a um diretório do sistema operacional: – os arquivos .class das classes do pacote são colocados neste diretório – é recomendável que o código fonte das classes do pacote também esteja neste diretório Todas as classes de um pacote têm o mesmo cabeçalho: Exemplo: package cadastroTurmas; public class Turma {...} 11 de 36 Módulo Avançado - Pacote Modificadores de Acesso: Public, Private, Protected e Default (acesso de pacote) • Métodos e Atributos private podem ser somente acessados dentro da classe em que estão declarados • Métodos e Atributos public podem ser acessados a partir de qualquer pacote • Métodos e Atributos protected e default podem somente ser acessados dentro do mesmo pacote • Obs: o modificador protected quando trata-se herança permite que atributos e métodos sejam herdados somente pela subclasse direta da classe que os define 12 de 36 Módulo Avançado - Herança Todas as classes em Java inclusive as que implementamos são herdadas de Object Object outras classes do Java Nossas Classes 13 de 36 Módulo Avançado - Herança Uma classe derivada herda as propriedades e métodos da classe, podendo: Adicionar novos métodos, Adicionar novos atributos ou Redefinir a implementação de métodos existentes (override) Herança Simples (extends) Por Exemplo: Override Sobreposição Redefinição Tuma String situacaoTurma() String verLotacao() TumaEspecial String situacaoTurma() String verTurmaEspecial() 14 de 36 Módulo Avançado - Herança Override Sobreposição Redefinição public class Turma{ public String situacaoTurma(){ return “Turma Regular”;} public String verLotacao(){ return “Lotacao da Turma”;} }//fim class public class TurmaEspecial extends Turma{ public String situacaoTurma(){ return “Turma Especial”;} public String verTurmaEspecial(){ return “verificação da Turma Especial”;} }//fim class 15 de 36 Módulo Avançado - Herança Ligação Dinâmica (proporciona o Polimorfismo) Por Exemplo: public class TestaHerancaTurma{ ... Turma t = new TurmaEspecial(); System.out.println(t.situacaoTurma()); }//fim class Ligação Dinâmica 16 de 36 Módulo Avançado - Herança Sobrecarga (overaload) de Métodos • Métodos sobrecarregados são distinguidos por sua assinatura (nome do método + número de parâmetros + tipo dos parâmetros) Por Exemplo: public class Turma{ ... public String verTurma(){...}; public String verTurma(String pCod){...}; public String verTurma(int pCod){...}; public String verTurma(String pCod, int pVagas){...}; public String verTurma(int pVagas, String pCod){...}; ... }//fim class 17 de 36 Módulo Avançado - Herança Para acessar membros da superclasse deve-se utilizar o palavra reservada super: Por Exemplo: super.codTurma; O construtor da superclasse pode ser ativado na subclasse também através de super: Por Exemplo: super(); //se o construtor da superclase não possuir parâmetros 18 de 36 Módulo Avançado - Herança OBS1: Caso seja fornecida uma implementação para o construtor de uma classe diferente da padrão (fornecida por Object), o construtor padrão deixa de existir OBS2: Caso um método de um superclasse seja redefinido em sua subclasse, mas com diferentes tipos e/ou número de parâmetros, isto não é sobreposição(override) e sim sobrecarga(overload) 19 de 36 Módulo Avançado - Classes Abstratas e Interfaces Modificador abstract para declarar classes ou métodos abstratos (Herança Simples - extends) Por Exemplo: public abstract class Aluno { public abstract void String verJub(); public void verAluno(){ System.out.println(“Verificando Aluno Genérico”);} } public class AlunoGrad extends Aluno { public void verJub(){System.out.println(“Jubilando Aluno Graduação”);} public void verAluno(){ System.out.println(“Verificando Aluno Graduação”);} } 20 de 36 Módulo Avançado - Classes Abstratas e Interfaces Ligação Dinâmica (proporciona o Polimorfismo) Por Exemplo: public class TestaAbstAluno{ ... Aluno a2 = new AlunoGrad(); a2.verAluno; a2.verJub; }//fim class Ligação Dinâmica 21 de 36 Módulo Avançado - Classes Abstratas e Interfaces Classes abstratas não podem ser instanciadas diretamente com o operador new Uma subclasse de uma classe abstrata deve implementar todos os métodos abstratos da superclasse Pode ter construtor mas somente para ser herdado (super()) 22 de 36 Módulo Avançado - Interface Uma classe que implemente(implements) uma Interface deve fornecer implementação para todos os métodos da interface correspondente 23 de 36 Módulo Avançado - Interface interface Chamar{ void proc1 (int param); } class Cliente implements Chamar{ void proc1 (int p) { System.out.println(“método Chamar com “ + p); } } class TestaInterface{ public static void main (String args[ ]){ Chamar c = new Cliente( ); c.proc1(42); } } 24 de 36 Módulo Avançado - Classes Abstratas e Interface O que usar? Quando? Classes (abstratas) Agrupa objetos com implementações compartilhadas Define novas classes através de herança (simples) de código Só uma pode ser supertipo de outra classe Interfaces Agrupa objetos com implementações diferentes Define novas interfaces através de herança (múltipla) de assinaturas Várias podem ser supertipo do mesmo tipo de 36 Módulo Avançado - Classes Abstratas e Interface Duas formas para definir subtipos: • extends: classe -> classe (herança simples) interface -> interface • implements: classe -> interface (herança múltipla) 26 de 36 Tipos de exceção As exceções em Java são objetos Novos tipos de exceção estendem a classe Exception class AlunoJaExiste extends Exception{ private String detalhe; AlunoJaExiste(String a) { detalhe = a; } public String toString( ) { return "Aluno Já Cadastrado [” + detalhe + “]”; } } 27 de 36 Exemplo public class TestaExcecaoPer{ static void inserir (String a) throws AlunoJaExiste{ System.out.println(”inclusão de alunos"); //...verificar se aluno a existe e caso exista throw new AlunoJaExiste(a); } public static void main(String args[ ]){ try { inserir("001"); }catch (AlunoJaExiste e){ System.out.println("capturada " + e); } } 28 de 36 Diretrizes de Projeto 29 de 36