Linguagens de Programação Orientadas a Objetos
description
Transcript of Linguagens de Programação Orientadas a Objetos
1 de 36
Linguagens de Programação Orientadas a Objetos
Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa
Marco [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
2 de 36
Roteiro
Modificador StaticRevisão do Módulo de FundamentosProjeto
3 de 36
Modificador Static
4 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
5 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()); }
}
6 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();} }
7 de 36
Revisão do Módulo Avançado
8 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
9 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
10 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
11 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 {...}
12 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
13 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
14 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:
Tuma
String situacaoTurma()String verLotacao()
TumaEspecialString situacaoTurma()
String verTurmaEspecial()
OverrideSobreposiçãoRedefinição
15 de 36
Módulo Avançado - Herança
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
OverrideSobreposiçãoRedefinição
16 de 36
Módulo Avançado - Herança
public class TestaHerancaTurma{... Turma t = new TurmaEspecial(); System.out.println(t.situacaoTurma()); }//fim class
Ligação Dinâmica
Ligação Dinâmica (proporciona o Polimorfismo) Por Exemplo:
17 de 36
Módulo Avançado - Herança
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
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:
18 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
19 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)
20 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”);}}
21 de 36
Módulo Avançado - Classes Abstratas e Interfaces
public class TestaAbstAluno{... Aluno a2 = new AlunoGrad(); a2.verAluno; a2.verJub; }//fim class
Ligação Dinâmica
Ligação Dinâmica (proporciona o Polimorfismo) Por Exemplo:
22 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())
23 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
24 de 36
Módulo Avançado - Interface
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); }
}
interface Chamar{ void proc1 (int param);}
de 36
Módulo Avançado - Classes Abstratas e Interface
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
O que usar? Quando?
26 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)
27 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 + “]”; }}
28 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); }}
29 de 36
Diretrizes de
Projeto