32
Capítulo anterior ( III ) 1) Campos estáticos em Classes 2) Métodos estáticos em Classes 3) Métodos get e set 4) Exercícios Práticos

P3-CAPÍTULO 4 – ENCAPSULAMENTO ,HERANÇA E POLIMORFISMO

Embed Size (px)

Citation preview

Page 1: P3-CAPÍTULO 4 – ENCAPSULAMENTO ,HERANÇA E POLIMORFISMO

Capítulo anterior ( III )

1) Campos estáticos em Classes

2) Métodos estáticos em Classes

3) Métodos get e set

4) Exercícios Práticos

Page 2: P3-CAPÍTULO 4 – ENCAPSULAMENTO ,HERANÇA E POLIMORFISMO

CAPÍTULO IV – ENCAPSULAMENTO, HERANÇA E POLIMORFISMO

1) Encapsulamento

2) Herança

3) Polimorfismo

4) Exercícios Práticos

Page 3: P3-CAPÍTULO 4 – ENCAPSULAMENTO ,HERANÇA E POLIMORFISMO

Encapsulamento

17 de abril de 2023 Programação Orientada por Objectos 3

Como já foi visto no capítulo 1, que

encapsulamento é a capacidade de

ocultar dados dentro de classes, permitindo

que somente operações especializadas ou

dedicadas manipulem estes dados ocultos.

Page 4: P3-CAPÍTULO 4 – ENCAPSULAMENTO ,HERANÇA E POLIMORFISMO

Estrutura geral

17 de abril de 2023 Programação Orientada por Objectos 4

Métodos públicos

Métodos privados

Atributos públicos

Atributos privados

O encapsulamento leva a observar um objecto como uma caixa preta

Page 5: P3-CAPÍTULO 4 – ENCAPSULAMENTO ,HERANÇA E POLIMORFISMO

Encapsulamento em Java

17 de abril de 2023 Programação Orientada por Objectos 5

O Encapsulamento numa classe é feita pelo uso de palavras

reservadas que estão associadas aos atributos e métodos da

classe.

Estes são designados por modificadores de visibilidade.

Modificadores de visibilidade são:

◦ public - permite acesso a partir de qualquer classe

◦ private - permite acesso apenas na própria classe

◦ protected - permite acesso apenas na própria classe e nas

subclasses (associado a herança!)

◦ nada

Nota: Um atributo ou método sem modificador de acesso é acessível a qualquer classe do mesmo package(pacote).

Page 6: P3-CAPÍTULO 4 – ENCAPSULAMENTO ,HERANÇA E POLIMORFISMO

Uso dos modificadores nos Atributos

17 de abril de 2023 Programação Orientada por Objectos 6

Consequências de tornar um atributo privado

◦ Tentar aceder a um atributo privado (i.e. fora da classe) resulta

em um erro de compilação!

◦ Mas como torná-lo acessível apenas para consulta

(leitura)?

Isto é possível definindo-se um método que retorna o

atributo (na própria classe onde o atributo se encontra)

Consequências de tornar um atributo publico

◦ É possível, mas viola o encapsulamento, é aceitável no caso

dos atributos constantes (i.e. Com o modificador final)!

Page 7: P3-CAPÍTULO 4 – ENCAPSULAMENTO ,HERANÇA E POLIMORFISMO

Modificadores de visibilidade

17 de abril de 2023 Programação Orientada por Objectos 7

public private

Atributos

Métodos

Violaencapsulamento

Reforçaencapsulamento

Proporciona Serviçosaos clientes

Suporta outrosmetodos na

classe

Page 8: P3-CAPÍTULO 4 – ENCAPSULAMENTO ,HERANÇA E POLIMORFISMO

Herança

17 de abril de 2023 Programação Orientada por Objectos 8

Mecanismo simples e poderoso do

paradigma OO que permite que uma

nova classe seja descrita a partir de

uma classe já existente.

Herança é um mecanismo que permite

a uma classe herdar todo o

comportamento e os atributos de outra

classe.

Page 9: P3-CAPÍTULO 4 – ENCAPSULAMENTO ,HERANÇA E POLIMORFISMO

Conceitos importantes

17 de abril de 2023 Programação Orientada por Objectos 9

Classe mãe: superclasse, classe base;

Classe filha/filho: subclasse, classe derivada;

Classe filha (mais específica) herda atributos e

métodos da classe mãe (generalizada);

Classe filha possui atributos e métodos próprios.

Page 10: P3-CAPÍTULO 4 – ENCAPSULAMENTO ,HERANÇA E POLIMORFISMO

17 de abril de 2023 Programação Orientada por Objectos 10

Vantagens da herança

◦ Modificação de uma classe (inserção de novos

métodos e variáveis) sem mudanças na classe

original.

◦ Reutilização do código.

◦ Alteração do comportamento de uma classe.

Page 11: P3-CAPÍTULO 4 – ENCAPSULAMENTO ,HERANÇA E POLIMORFISMO

17 de abril de 2023 Programação Orientada por Objectos 11

A partilha de recursos leva as ferramentas

melhores e produtos mais lucrativos

◦ não é necessário reinventar a roda a cada

nova aplicação.

É possível modificar uma classe para criar uma

nova classe com uma personalidade ligeiramente

diferente.

◦ diversos objectos que executam acções

diferentes, mesmo possuindo a mesma origem.

Page 12: P3-CAPÍTULO 4 – ENCAPSULAMENTO ,HERANÇA E POLIMORFISMO

Mecanismo de Herança

17 de abril de 2023 Programação Orientada por Objectos 12

Entre uma classe e a sua superclasse, é estabelecida uma relação de especialização que

é automaticamente implementada através de um mecanismo de herança.

Este mecanismo automático de herança estabelece as seguintes propriedades entre uma

subclasse B e a sua superclasse A:

1. B herda de A todas as variáveis e métodos de instância (os atributos da classe B,

declarados como private em A , só podem ter acesso pelos métodos public de A, e não

directamente)

2. B pode definir novas variáveis e novos métodos próprios.

3. B pode redefinir variáveis e métodos herdados.

Importante:

A herança não se aplica a variáveis e métodos de classe!

.

Classe A

Classe B

Page 13: P3-CAPÍTULO 4 – ENCAPSULAMENTO ,HERANÇA E POLIMORFISMO

Exemplo

17 de abril de 2023 Programação Orientada por Objectos 13

Pessoanomesexocomerdormir

EstudanteanoEscolar

matricularestudar

Trabalhadorcategoriafunçãotrabalharpicar cartão

superclasse(mais genérica)

subclasse(mais específica)

subclasse(mais específica)

generalização

especialização

2 Atributos2 Operações

3 Atributos4 Operações

4 Atributos4 Operações

Page 14: P3-CAPÍTULO 4 – ENCAPSULAMENTO ,HERANÇA E POLIMORFISMO

Hierarquia de Classes

17 de abril de 2023 Programação Orientada por Objectos 14

Animal pesomover()

Avemover()

voar()

Mamífero comer()

Réptilmover()

nadar()

Object

peso é uma variável de instância que está presente em todos os objectos criadas para as classes Animal, Mamífero, Ave e Réptil.

Ave pardal = new Ave();pardal.setPeso(700);

Mamifero boi = new Mamifero();boi.setPeso(30000);boi.mover();boi.voar(); //Erro! não existe

Page 15: P3-CAPÍTULO 4 – ENCAPSULAMENTO ,HERANÇA E POLIMORFISMO

Definir a Subclasse

17 de abril de 2023 Programação Orientada por Objectos 15

Forma geral:

◦ class <nome-da-classe> extends SuperClass

é permitido apenas uma superclasse

não há herança múltipla em Java

cada classe possui exactamente uma superclasse

excepção: java.lang.Object

caso não exista a cláusula extends, então, assume-

se que a superclasse é Object.

Page 16: P3-CAPÍTULO 4 – ENCAPSULAMENTO ,HERANÇA E POLIMORFISMO

Classe Object

17 de abril de 2023 Programação Orientada por Objectos 16

A classe Object é uma classe que serve de

superclasse para todas as classes existentes em

Java.

Ao criar uma classe, se não for especificada

nenhuma superclasse após a palavra extends,

então a classe Object será assumida

automaticamente como superclasse.

Page 17: P3-CAPÍTULO 4 – ENCAPSULAMENTO ,HERANÇA E POLIMORFISMO

17 de abril de 2023 Programação Orientada por Objectos 17

A classe Object define o método equals,

que serve para testar se dois objectos contém a

mesma informação (diferente do operador ==).

Como todas as classes são subclasses de

Object, eles herdam o método equals.

Page 18: P3-CAPÍTULO 4 – ENCAPSULAMENTO ,HERANÇA E POLIMORFISMO

Construtores de Subclasses

17 de abril de 2023 Programação Orientada por Objectos 18

class Animal { double velocidade;

Animal() { velocidade = 0.0; }

void mover(double vel) { velocidade = vel; }}

class Ave extends Animal { int altura; Ave() { super(); // velocidade = 0.0 altura = 0; }

void mover (double vel) { if(altura >0) velocidade = vel; }

void voar (int alt) { altura = alt; }}

Page 19: P3-CAPÍTULO 4 – ENCAPSULAMENTO ,HERANÇA E POLIMORFISMO

Polimorfismo

É o princípio pelo qual duas ou mais classes

derivadas de uma mesma superclasse podem

invocar métodos que têm a mesma identificação

(assinatura) mas comportamentos distintos.

A decisão sobre qual o método que deve

ser selecionado, de acordo com o tipo da classe

derivada, é tomada em tempo de execução,

através do mecanismo de late binding*.

17 de abril de 2023 Programação Orientada por Objectos 19

* Também conhecido pelos termos: dynamic binding ou run-time binding.

Onde a definição do método que será efectivamente invocado só ocorre durante a

execução do programa

Page 20: P3-CAPÍTULO 4 – ENCAPSULAMENTO ,HERANÇA E POLIMORFISMO

No caso de polimorfismo, é necessário que os

métodos tenham exactamente a mesma identificação, sendo

utilizado o mecanismo de overriding *. Esse mecanismo de

redefinição não deve ser confundido com o mecanismo de

sobrecarga de métodos.

Importante:

- O mecanismo de late binding(ligação tardia) e o overriding

(Redefinição de métodos) constituem a chave para a

utilização do Polimorfismo.

17 de abril de 2023 Programação Orientada por Objectos 20

* Ocorre quando um método cuja assinatura já tenha sido especificada, recebe uma nova

definição (ou seja, um novo corpo) em uma classe derivada.

Page 21: P3-CAPÍTULO 4 – ENCAPSULAMENTO ,HERANÇA E POLIMORFISMO

Exemplo:Considere uma classe Veículo com duas classes derivadas, Automóvel

e Bicicleta:

17 de abril de 2023 Programação Orientada por Objectos 21

import java.util.*;

class Veiculo {

public Veiculo() {

System.out.print("Veiculo ");

}

public void manutencao() {

System.out.println("Veiculo.manutencao ");

}

public void limpeza() {

System.out.println("Veiculo.limpeza ");

}

}

Page 22: P3-CAPÍTULO 4 – ENCAPSULAMENTO ,HERANÇA E POLIMORFISMO

17 de abril de 2023 Programação Orientada por Objectos 22

import java.util.*;

class Automovel extends Veiculo {

public Automovel () {

System.out.print(" Automovel ");

}

public void manutencao() {

System.out.println(" Automovel.manutencao ");

}

public void limpeza() {

System.out.println(" Automovel.limpeza ");

}

}

Page 23: P3-CAPÍTULO 4 – ENCAPSULAMENTO ,HERANÇA E POLIMORFISMO

17 de abril de 2023 Programação Orientada por Objectos 23

import java.util.*;

class Bicicleta extends Veiculo {

public Bicicleta () {

System.out.print(" Bicicleta ");

}

public void manutencao() {

System.out.println(" Bicicleta.manutencao ");

}

public void limpeza() {

System.out.println(" Bicicleta.limpeza ");

}

}

Page 24: P3-CAPÍTULO 4 – ENCAPSULAMENTO ,HERANÇA E POLIMORFISMO

17 de abril de 2023 Programação Orientada por Objectos 24

public class Oficina {

Random r = new Random();

public Veiculo proximo() { Veiculo v;

int num= r.nextInt();

System.out.println("Valor = "+num);

if (num== 0) v = new Automovel();

else v = new Bicicleta();

return v;

}

Page 25: P3-CAPÍTULO 4 – ENCAPSULAMENTO ,HERANÇA E POLIMORFISMO

17 de abril de 2023 Programação Orientada por Objectos 25

public void manter(Veiculo v) {

v.manutencao();

v.limpeza();

}

public static void main(String[] args) {

Oficina ofic = new Oficina();

Veiculo v;

for (int i=0; i<4; ++i) {

v = ofic .proximo();

ofic.manter(v); }

} }

Page 26: P3-CAPÍTULO 4 – ENCAPSULAMENTO ,HERANÇA E POLIMORFISMO

Resultado Aleatório

17 de abril de 2023 Programação Orientada por Objectos 26

Valor = 1193310524

Veiculo Automovel Automovel.manutencao

Automovel.limpeza

Valor = 1087258313

Veiculo Bicicleta Bicicleta.manutencao

Bicicleta.limpeza

Valor = 1857219931

Veiculo Bicicleta Bicicleta.manutencao

Bicicleta.limpeza

Valor = 938060274

Veiculo Automovel Automovel.manutencao

Automovel.limpeza

Page 27: P3-CAPÍTULO 4 – ENCAPSULAMENTO ,HERANÇA E POLIMORFISMO

Exercício Prático1. Criar uma estrutura hierárquica que contenha as

seguintes classes:

Veiculo (classe abstracta), Bicicleta e Automóvel.

Os métodos da classe Veiculo são todos abstractos e

possuem a seguinte assinatura:

listarVerificacoes()

ajustar()

limpar()

Estes métodos são implementados nas subclasses

Automóvel e Bicicleta. Acrescentar na classe Automóvel o

método mudarOleo()17 de abril de 2023 Programação Orientada por Objectos 27

Page 28: P3-CAPÍTULO 4 – ENCAPSULAMENTO ,HERANÇA E POLIMORFISMO

2. Crie uma classe em Java para representar Empregados com

as propriedades mat, nome, funcao, salario e data_adm.

Todas as propriedades devem estar encapsuladas. Nenhum

objecto desta classe poderá ser criado sem matrícula. A

matrícula será fornecida sequencialmente a cada empregado

criado a partir de zero. Deverão constar também métodos de

acesso para cada uma das propriedades definidas.

Crie um método para aumentar salário a partir de um

valor percentual recebido e um método chamado toString

que retorne uma String com todas as propriedades

existentes na classe com seus respectivos valores.

17 de abril de 2023 Programação Orientada por Objectos 28

Page 29: P3-CAPÍTULO 4 – ENCAPSULAMENTO ,HERANÇA E POLIMORFISMO

3. Faça um programa em Java para estender a classe

Empregado para Gerente. A classe Gerente deverá conter

as propriedades secretária (do tipo Empregado) e Automóvel

(String), com seus respectivos métodos de acesso. Criar

também um método para aumentar o salário do Gerente

onde o percentual incidirá sobre o salário + 0,5 * cada ano na

empresa. Criar um construtor para a classe Gerente que

acrescente as novas propriedades recebidas como

parâmetro. Ainda deverá permanecer o construtor default.

Criar também um método toString para que esta classe que

retorne uma String com todos os dados.

17 de abril de 2023 Programação Orientada por Objectos 29

Page 30: P3-CAPÍTULO 4 – ENCAPSULAMENTO ,HERANÇA E POLIMORFISMO

4. Faça uma classe ManipulaEmpregado que tenha os

seguintes métodos: 

criarEmpregados que cria um vetor com 6 Empregados,

sendo 3 deles Gerentes, com seus respectivos atributos a

partir de dados fornecidos por usuários;

listarEmpregados que liste os Empregados no array com

seus dados;

aumentarEmpregados que receba um valor percentual e

aumente o salário de todos os empregados;

localizarEmpregado que receba um empregado como

argumento e localize-o pela matricula retornando o nome

caso encontre ou a string “Empregado não localizado” caso

contrário.17 de abril de 2023 Programação Orientada por Objectos 30

Page 31: P3-CAPÍTULO 4 – ENCAPSULAMENTO ,HERANÇA E POLIMORFISMO

5. Faça um programa que exiba um menu com as

seguintes opções: 

1 – Criar Vetor de Empregados

2 – Aumentar Empregados

3 – Listar Empregados

4 – Localizar Empregado

5 - Sair

17 de abril de 2023 Programação Orientada por Objectos 31

Page 32: P3-CAPÍTULO 4 – ENCAPSULAMENTO ,HERANÇA E POLIMORFISMO

Próximo capítulo

Java e UML

17 de abril de 2023 Programação Orientada por Objectos 32