290 likes | 385 Views
Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes mafm@cin.ufpe.br Aula 24 e 25 - Revisão do Módulo Avançado e Diretrizes de Projeto http://www.ufpa.br/sampaio/bd2003/lpoo. Marco Fagundes. Roteiro.
E N D
Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes mafm@cin.ufpe.br Aula 24 e 25 - Revisão do Módulo Avançado e Diretrizes de Projeto http://www.ufpa.br/sampaio/bd2003/lpoo Marco Fagundes
Roteiro • Modificador Static • Revisão do Módulo de Fundamentos • Projeto
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
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()); } }
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();} }
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
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
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
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 {...}
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
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
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: Tuma String situacaoTurma() String verLotacao() Override Sobreposição Redefinição TumaEspecial String situacaoTurma() String verTurmaEspecial()
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
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
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
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
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)
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”);} }
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
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())
Módulo Avançado - Interface • Uma classe que implemente(implements) uma Interface deve fornecer implementação para todos os métodos da interface correspondente
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); } }
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 Módulo Avançado - Classes Abstratas e Interface O que usar? Quando?
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)
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 + “]”; } }
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); } }
Diretrizes de Projeto