orientada a objetos Programação Orientada a o que sistema ...acmo/grad/lp2/POO_Especial_02.pdf ·...

10
1 Programa Programaç ão ão Orientada Orientada a a Objetos Objetos: : Heran Herança 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 comuns w Compartilhamento define: Relacionamentos entre entidades Código que pode ser reutilizado (projeto) w Um sistema é formado por classes e objetos que se relacionam

Transcript of orientada a objetos Programação Orientada a o que sistema ...acmo/grad/lp2/POO_Especial_02.pdf ·...

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