orientada a objetos programação orientada a o que sistema ...acmo/grad/lp2/poo_especial_02.pdf ·...
TRANSCRIPT
1
ProgramaProgramaççãoão OrientadaOrientada a a ObjetosObjetos: : HeranHeranççaa
Alexandre César Muniz de Oliveira
2
Análise e Projeto Orientados a Objetos
w A análise orientada a objetos– Determina o que o sistema deve fazer: Quais os atores
envolvidos? Quais as atividades a serem realizadas?– Decompõe o sistema em objetos: Quais são? Que
tarefas cada objeto terá que fazer?
w O projeto orientado a objetos– Define como o sistema será implementado– Modela os relacionamentos entre os objetos e atores– Utiliza e reutiliza abstrações como classes, objetos,
funções, frameworks, APIs, padrões de projeto
3
Análise e Projeto Orientados a Objetos
4
Relacionamento entre classes
w Objetos podem compartilhar atributos e comportamentos comunsw Compartilhamento define:
– Relacionamentos entre entidades– Código que pode ser reutilizado (projeto)
w Um sistema é formado por classes e objetos que se relacionam
2
5
Relacionamento entre classes
6
Relacionamento entre classes
w Tipos básicos:– Composição: a “é
parte essencial de” b– Agregação: a “é parte
de” b– Associação: a “é
usado” por b– Herança: b “é” a – Herança: b “é um tipo
de” a
w UML:
– The Unified ModelingLanguage (UML)
7
Relacionamento entre classes
8
Relacionamento entre classes
w Associação: relação estática que pode existir entre dois conceitos complexos,– complementa a informação que se tem sobre
dois objetos/classes em um determinado instante,
– referencia informação associativa nova– pode ser fruto de uma operação/transação
ocorrida que envolva duas ou mais classes– uma associação complementa a informação
necessária para que dois ou mais conceitos façam sentido
3
9
Relacionamento entre classes
10
Relacionamento entre classes
11
Relacionamento entre classes
12
Relacionamento entre classes
4
13
Herança
w Herança é bem mais que apenas uma forma de relacionamento entre classes– Permite reutilização de software
w Também conhecida como “especialização” ou “generalização”w Define um relacionamento entre CLASSES e
não entre OBJETOS– Representa um relacionamento do tipo É-UM,
estático, definido em tempo de desenvolvimento;
14
Herança
w A classe que herda outra absorve seus atributos e métodos– O que é absorvido não precisa ser reescrito
w Tipos de herança:– Herança simples – classe deriva de
somente uma superclasse– Herança múltipla – classe deriva de duas
ou mais superclasses
15
Herança
w Na linguagem Java é utilizada a palavra reservada extends para definir uma herança– Ex: public class Aluno extends Pessoa { ...
w Herança é definida em termos de duas classes: a superclasse e a subclassew Visibilidade:
– Uma subclasse somente tem acesso a atributos e métodos protected e public de sua superclasse
– Atributos e métodos protected exibem comportamento semelhante aos private, com a diferença de serem compartilhados pelas subclasses
16
Super e this
w Para invocar uma construtora de uma superclasse deve-se usar super() – similar ao this()w Também é utilizado para acessar um atributo ou
método da superclassew É sempre a primeira instrução do código da
construtora de subclassesw A invocação da construtora padrão da superclasse
pode ser substituída pela invocação explícita de uma construtora qualquer– Ex: super(argumentos);
5
17
Super e this
18
Exercícios
public class Pessoa {String nome;public Pessoa (String nome) {
this.nome = nome;}
}public class Aluno extends Pessoa {
String curso;public Aluno (String nome, String curso) {
super (nome); // deve ser a primeira instruçãothis.curso = curso;
}}
19
Exercícios
20
Exercícios
w Crie, e compile as seguintes classes– Uma Pessoa tem um nome (String)– Uma Porta tem um estado aberto, que pode ser true
ou false, e pode ser aberta ou fechada– Uma Construcao tem uma finalidade– Uma Casa é uma Construcao com finalidade
residencial que tem um proprietário Pessoa, um número e um conjunto (vetor) de Portas
w Crie as seguintes classes– Um Ponto tem coordenadas x e y inteiras– Um Circulo tem um Ponto e um raio inteiro– Um Pixel é um tipo de Ponto que possui uma cor
6
21
Exercíciosclass Bateria {
public Bateria() {System. out. println(" Bateria()");
}}class Tela {
public Tela() {System. out. println(" Tela()");
}}class Teclado {
public Teclado() {System. out. println(" Teclado()");
}}
22
Exercíciosclass Maquina {
public Maquina() {System. out. println(" Maquina()");this. ligar();
}public void ligar() {
System. out. println(" Maquina. ligar()");}
}class Computador extends Maquina {
public Tela tela = new Tela();public Teclado teclado = new Teclado();public Computador() {
System. out. println(" Computador()");}
}
23
Exercíciosclass Notebook extends Computador {
int codigo = 12345;public Bateria bateria = new Bateria();public Notebook() {
System. out. print(" Notebook(); " +"codigo = "+ codigo);
}public void ligar() {
System. out. println(" Notebook. ligar();" +" codigo = "+ codigo);
}}public class Run {
public static void main (String[] args) {new Notebook();
}} 24
Exercícios
7
25
Exercícios
26
Recomendações
w Evite chamar métodos locais dentro de construtores– Construtor (qualquer um da hierarquia) sempre usa
versão sobreposta do métodow Problemas se alguém estender a sua classe com
uma nova implementação do método que – Dependa de variáveis da classe estendida– Chame métodos em objetos que ainda serão criados:
provoca NullPointerException– Dependa de outros métodos sobrepostos
w Use apenas métodos finais em construtores– Métodos declarados com modificador final não podem
ser sobrepostos em subclasses
27
Recomendaçõesw Para inicializar valores estáticos, é preciso atuar
logo após a carga da classe– O bloco 'static ' tem essa finalidade– Pode estar em qualquer lugar da classe, mas será
chamado antes de qualquer outro método ou atribuição de variável
class UmaClasse {private static Point[] p = new Point[10];static {
for (int i =0;i <10;i++){p[i]=new Point(i,i);
}}}
w Não é possível prever em que ordem os blocos static serão executados, portanto: só tenha um!
28
Sobreposição de métodos
w Também chamado de redefinição ou anulação de métodos (overriding)w Muito confundido com a sobrecarga de métodos
(overload)w Uma subclasse “substitui” um método de sua
superclasse com uma assinatura exatamente igualw Necessário quando se precisa que a subclasse
exiba comportamentos específicos w Não é possível substituir um método private ou
marcado com o modificador final
8
29
Sobreposição de métodos
30
Exercícios
class ContaEspecial extends Conta {private double bonus;ContaEspecial (String num) {
super(num);bonus = 0;
}// Método redefinidovoid depositar(double valor) {
bonus += (valor * 0.01);super.depositar(valor);
}
void renderBonus() {super.depositar(bonus);bonus = 0;
}double getBonus() {
return bonus;}
}
31
Exercíciospublic class Funcionario {
private String nome;private int salario;public Funcionario(String nome, int salario) {
this.nome = nome;this.salario = salario ;
}
public String getDetalhes() {return "Nome: " + nome + "\n" + "Salário: " +
salario;}
}
32
Exercíciospublic class Gerente extends Funcionario {
String departamento;public Gerente(String nome, int salario , String departamento) {
super(nome, salario);this.departamento = departamento;
}
// Método redefinidopublic String getDetalhes() {
return super.getDetalhes() + "Gerente de: " + departamento;}
}
9
33
Exercícios
w Às vezes um método é sobrecarregado e substituído
public class Animal {public void comer( ) { System.out.println(“Animal genérico”); }
}public class Cavalo extends Animal {
public void comer( ) {System.out.println(“Cavalo comendo capim”);
}public void comer(String s) {
System.out.println(“Cavalo comendo ” + s);}}
34
Ligação Dinâmica
w Também chamado de dynamic bindingw Caso um método substituído seja invocado em
um objeto o código a ser executado é escolhido pela máquina virtual em tempo de execução
Funcionario f = new Gerente();f.getDetalhes()
– O método getDetalhes invocado será o de Gerente
w O comportamento é associado ao tipo real do objeto em tempo de execução – reforça o polimorfismo
35
Ligação Dinâmica
w Todas as classes em Java são derivadas de uma superclasse chamada Object. w Com Object, por exemplo, pode-se simular
polimorfismo universal paramétrico, não suportado explicitamente por Java.w Pode-se definir um atributo como Object e
fazê-lo instanciar um objeto de qualquer outra classe
36
Ligação Dinâmicapublic class Banco {
public static void main(String [ ] args) {Conta conta;conta = new ContaEspecial(“21.342-7”);conta.depositar(200.00);conta.sacar(100.00);((ContaEspecial) conta).renderBonus();System.out.print(conta.consultaSaldo());...
}}
10
37
Ligação Dinâmica
wOperador instanceof– Utilizado para determinar em tempo de
execução a classe a qual o objeto pertencepublic class Funcionariopublic class Gerente extends Funcionariopublic class Contador extends Funcionario
38
Ligação Dinâmica
public class Empresa {public void verificaStatus(Funcionario f) {
if(f instanceof Gerente){ // chame-o de Sr. }else if (f instanceof Contador) { // Guarda os segredos da empresa }else { // funcionario comum
}}}
ExercExercíícioscios