Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
MDULO #3
ORIENTAO A OBJETOS EM JAVA
Carga Horria: 20h
Mdulo #3
Sumrio Geral
Encapsulamento
Herana
Motivao
Sobrecarga de Mtodos
Sobrescrita de Mtodos
java.lang.Object
Polimorfismo
Classes Abstratas
Interfaces
Motivao
O QUE FAZER?
Vamos desenvolver
uma aplicao para
uma empresa que
possui uma equipe
de empregados, tais
como, gerentes,
engenheiros, etc...
Como modelar
empregado?
Modelagem e Codificao
Empregado
public class Empregado{
private String nome;
private long cpf;
private double salario;
//construtor omitido
//getters e setters omitidos
public String toString(){
return nome + +
cpf + + salario;
}
}
Como modelar
gerente?
Modelagem e Codificao
Gerente
public class Gerente{
private String nome;
private long cpf;
private double salario;
private String departamento;
//construtor omitido
//getters e setters omitidos
public String toString(){
return nome + +
cpf + + salario
+ + departamento;
}
}
Modelagem Inicial
Um gerente tem tudo o que
um empregado tem!
Modelagem Inicial
Essa repetio dificulta a manuteno do
software, pois uma mudana pode implicar
alteraes em vrias partes do cdigo
Modelagem Inicial
Imagine a manuteno de todas as classes se
quisermos manter o estado civil de todos os
funcionrios...
PRATO-CHEIO para introduzir BUGS no sistema!
Efetuando REFATORAMENTO!
Vamos limpar o cdigo que representar
um prato-cheio para os bugs
Representando herana
em UML
HERANA!
Relacionamento -um
Herana
Sintaxe
Exemplo
Codificao
public class Empregado {
private String nome;
private long cpf;
private double salario;
//construtor, getters e setters omitidos
public String toString(){
return nome + + cpf + + salario;
}
}
Exemplo
Codificao
Hierarquia de Classes
CLASSES MAIS
GENRICAS
estende ou herda
atributos e mtodos
SUPERCLASSE
CLASSES MAIS
ESPECFICAS
SUBCLASSE
SUBCLASSE
SUBCLASSE
Hierarquia de Classes
Exemplo
hierarquia de classes?
Encapsulamento
Encapsulamento
Entendendo os Modificadores
de Acesso
private
Modificador
private
default
protected
public
default
Mesma
classe
protected
Mesmo
pacote
public
Subclasse
Universal
possvel acessar
atributos nas subclasses
diretamente, desde que
tenham visibilidade
protected
Acomplamento
Minimizar o ACOPLAMENTO
uma das LEIS de ouro da OO
super
instanciar as classes?
CONSTRUTORES NO SO HERDADOS
Afinal, no so mtodos nem atributos
Mas, existe um modo simples de invocar
o construtor da superclasse!
super, de novo!
Exemplo
Codificao
public class
private
private
private
Empregado {
String nome;
long cpf;
double salario;
Exemplo
Codificao
public class Gerente extends Empregado {
private String departamento;
public Gerente(String nome, long cpf,
double salario, String departamento){
super(nome, cpf, salario);
this.departamento = departamento;
}
//getters e setters omitidos
public String toString(){
return super.toString() + departamento;
}
}
Construtores e Herana
public Gerente() {
}
igual a
public Gerente() {
super();
}
Caso o construtor no seja invocado explicitamente, Java
insere uma chamada super() que, na verdade, invoca o
construtor default da superclasse imediata
Exemplo
Codificao
public class
private
private
private
Empregado {
String nome;
long cpf;
double salario;
//construtor no declarado
//getters e setters omitidos
public String toString(){
return nome + + cpf + + salario;
}
}
Exemplo
Codificao
public class Gerente extends Empregado {
private String departamento;
public Gerente(String departamento){
super();
this.departamento = departamento;
}
//getters e setters omitidos
public String toString(){
return super.toString() + departamento;
}
}
Exemplo
Codificao
public class Gerente extends Empregado {
private String departamento;
public Gerente(String departamento){
this.departamento = departamento;
}
//getters e setters omitidos
public String toString(){
return super.toString() + departamento;
}
}
Mdulo #3
Sumrio Geral
Encapsulamento
Herana
Motivao
Sobrecarga de Mtodos
Sobrescrita de Mtodos
java.lang.Object
Polimorfismo
Classes Abstratas
Interfaces
Sobrecarga de Mtodos
Sobrecarga de Mtodos
Exemplos
public void metodo(String s) { }
public void metodo() { }
public void metodo(int i, String s) { }
public int metodo (String s, int i) { }
public void metodo(String s, int i) { }
precisarmos modificar o
comportamento herdado de
sua superclasse?
Mdulo #3
Sumrio Geral
Encapsulamento
Herana
Motivao
Sobrecarga de Mtodos
Sobrescrita de Mtodos
java.lang.Object
Polimorfismo
Classes Abstratas
Interfaces
Sobrescrita de Mtodos
Regras de sobreposio
private
default
protected
public
Sobrescrita de Mtodos
Exemplo
public class Empregado {
private String nome;
private long cpf;
private double salario;
//construtor, getters e setters omitidos
public String toString(){
return nome + + cpf + + salario;
}
}
Sobrescrita de Mtodos
Exemplo
Mdulo #3
Sumrio Geral
Encapsulamento
Herana
Motivao
Sobrecarga de Mtodos
Sobrescrita de Mtodos
java.lang.Object
Polimorfismo
Classes Abstratas
Interfaces
java.lang.Object
Mtodos Herdados
equals()
hashCode()
toString()
finalize()
pessoas.Pessoa@29841f
Compara 2 objetos
Exemplo
Usando java.lang.Object
public class Pessoa {
private String nome;
private int idade;
public Pessoa(String nome, int idade){
this.nome = nome;
this.idade = idade;
}
//getters e setters omitidos
@Override
public String toString(){
return this.nome + " tem "
+ this.idade + " anos";
}
Exemplo
Usando java.lang.Object
@Override
public void finalize(){
System.out.println("Bye: " +
this); //this.toString()
}
@Override
public int hashCode(){
final int prime = 31;
int result = 1;
result = prime * result + idade;
result = prime * result +
((nome == null) ?
0 : nome.hashCode());
return result;
}
Exemplo
Usando java.lang.Object
@Override
public boolean equals( Object o ){
if ( o != null && o instanceof Pessoa ){
Pessoa p = (Pessoa) o;
return p.nome.equals( this.nome )
&& p.idade == this.idade;
}
return false;
}
}
Leitura Recomendada
Referncias