Aula 24 (AP6): Revisão Módulo Avançado

Propaganda
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
Download