programação orientada a objetos de... · a programação orientada a objetos (poo) é um...

153
Programação Orientada a Objetos JAVA - NETBEANS

Upload: phungthuy

Post on 10-Nov-2018

246 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Programação Orientada a Objetos

JAVA - NETBEANS

Page 2: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Agenda

Programação Orientada a Objeto (POO)

Conceitos sobre POO

Pilares da POO

Objeto

Classe

Construtores

Troca de Mensagens

Encapsulamento

Page 3: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Programação Orientada a Objetos (POO)

A Programação Orientada a Objetos (POO) é um

paradigma de programação de computadores que usa os

conceitos de Objetos e Classes como elementos

centrais para representar e processar dados usados nos

programas.

Você sabe o que um Paradigma?

Segundo o dicionário Houaiss, paradigma significa modelo,

padrão, exemplo.

Page 4: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Programação Orientada a Objetos (POO)

Os conceitos da programação orientada a objetos (POO)

surgiram no final da década de 1960, com a linguagem

Simula-68.

Posteriormente amadurecidos e aprimorados durante a

década de 1970 pela linguagem de programação Smalltalk.

A popularização da POO só se deu ao longo da década

de 80 e 90, com as linguagens C++ e Java.

Page 5: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Programação Orientada a Objetos (POO)

Um dos principais pesquisadores que introduziu os

conceitos de POO, foi o cientista Alan Kay da Xerox, um

dos criadores da linguagem Smalltalk.

Durante suas pesquisas, Alan desenvolveu a ideia de que

poderíamos construir um programa usando conceitos e

abstrações do mundo real, como objetos, troca de

mensagens.

Page 6: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Agenda

Programação Orientada a Objeto (POO)

Conceitos sobre POO

Pilares da POO

Objeto

Classe

Construtores

Troca de Mensagens

Encapsulamento

Page 7: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Conceitos da Programação Orientada a

Objetos

A Programação Orientada a Objetos está sedimentada

sobre quatro pilares derivados do princípio da abstração,

são eles:

Encapsulamento,

Herança,

Composição e

Polimorfismo.

Page 8: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Conceitos da Programação Orientada a

Objetos

O princípio da abstração é a capacidade de abstrair a

complexidade de um sistema e se concentrar em apenas

partes desse sistema.

Exemplo: um médico torna-se um especialista em algum órgão

do corpo (exemplo, o coração). Ele abstrai sem desconsiderar

as influências dos outros órgãos e foca apenas sua atenção

nesse órgão.

Page 9: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Objetos

Na programação OO, objetos são usados para

representar entidades do mundo real ou computacional.

Se observarmos ao nosso redor, veremos várias entidades

ou abstrações as quais podem ser representadas como

objetos no nosso programa.

As pessoas e seus carros podem ser vistas como objetos.

Page 10: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Objetos

Os objetos possuem:

Características pelas quais os identificamos e

Finalidades para as quais os utilizamos.

Page 11: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Objetos: Atributos

Características são tipicamente chamadas de atributos.

O objeto Pessoa possui RG, nome, data de nascimento, etc.

O objeto Carro possui tipo, cor, quantidade de portas.

Page 12: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Objetos: Métodos

Objetos podem também ter comportamentos associados.

Um objeto do tipo Pessoa pode andar, correr ou dirigir carros.

Um objeto do tipo Carro pode ligar, desligar, acelerar, frear.

Page 13: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Objetos

Na POO os objetos possuem características e

comportamentos.

As características também podem ser chamadas de dados ou

atributos.

Enquanto os comportamentos também podem ser chamados

de operações ou métodos.

Page 14: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Objetos

Page 15: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Classes

Carros sempre possuirão os atributos tipo, cor e número

de portas.

Pessoas sempre possuirão nome, data de nascimento e,

possivelmente, um RG.

Page 16: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Classes

A modelagem e programação de um conjunto de objetos

que possuem características (atributos) e

comportamentos (métodos) comuns é feita na POO

usando o conceito de Classe.

Cada classe funciona no fundo como um molde para a criação

de um dado objeto.

Os objetos são vistos como representações concretas

(instâncias) das classes.

Page 17: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Classes

A classe define que objetos devem ter tipo, cor, placa e

número de portas, mas não indica explicitamente quais

são seus valores.

Page 18: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Classes

Dois diferentes carros foram criados tomando como base

a estrutura da classe.

Page 19: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

A classe é o modelo ou molde de construção de objetos.

O modelo define as características e comportamentos que

os objetos irão possuir.

A classe é abstrata (não existe concretamente).

Criação de Classes

A classe não serve para organizar no sentido de guardar

os objetos, ela serve de modelo de construção.

Page 20: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Criação de Classes

Vamos criar a classe Carro em Java.

1. Crie um nome Projeto chamado de POO.

2. Adicione uma nova classe java denominada Carro,

clicando com o botão direito do mouse em cima do

pacote poo.

Palavra obrigatória

para indicar a criação

de uma classe.

Nome da classe escolhido pelo programador.

Por padrão, utiliza-se sempre a primeira

letra maiúscula.

Conjunto de características dos objetos da Classe Carro.

Page 21: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Criação de Classes

Perceba que não inserimos no código nada sobre o

comportamento dos carros, como andar para frente ou

para trás, virar a esquerda/direita, frear etc.

Vamos criar a classe Pessoa em Java.

1. Adicione uma nova classe java denominada Pessoa,

clicando com o botão direito do mouse em cima do

pacote poo.

Page 22: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Adicionando Comportamento

Os objetos das classes Carro e Pessoa, precisam não só

de suas características, mas também de ações possíveis de

serem executadas.

Um carro precisa oferecer funções para que as pessoas

os manobrem.

E pessoas, por sua vez, precisam desempenhar suas

atividades, como andar, correr, estudar etc.

Page 23: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Adicionando Comportamento

Observe que adicionamos novas linhas ao código, agora

com dois métodos setCor(String cor) e getCor().

Esses métodos servem, respectivamente, para alterar o

valor do atributo “cor” e retornar o valor desse atributo.

Page 24: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Adicionando Comportamento

Page 25: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Adicionando Comportamento

Page 26: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Atividade

Faça o mesmo para a classe Pessoa.

Page 27: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Criando um Objeto

Vá para o programa principal, onde existe o método

main.

Page 28: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Criando um Objeto

Vamos criar um objeto da classe Carro, no mundo da

programação orientada a objetos chamamos isso de

instanciação, ou seja, criaremos uma instância da classe

Carro.

Um objeto ou instância é criado através do operador

new.

Page 29: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Criando um Objeto

Toda a manipulação e consulta dos atributos do objeto

serão feitas através de sua referência, ou seja, da variável.

Define-se os atributos do carro utilizando os métodos da

classe Carro.

Utiliza-se o conjunto de métodos setAtributo(valor).

Page 30: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Criando um Objeto

Exibindo cada atributo com seu respectivo método

getAtributo().

Page 31: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Criando um Objeto - MAIN

Page 32: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Atividades

1. Instancie um objeto da classe Pessoa.

2. Atribuia aos métodos set’s seus valores.

3. Imprima os valores através dos métodos get’s.

Page 33: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Métodos Construtores

E se eu quiser, no momento da criação do objeto, passar

valores para alguns de seus atributos, como placa e cor,

por exemplo? É possível?

É sim!!

Para isso, define-se um tipo especial de método chamado

construtor.

E como seu próprio nome diz, ele constrói e objeto e nesse

instante pode definir quaisquer atributos que desejarmos.

Page 34: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Métodos Construtores

O método construtor é aquele chamado em um objeto,

quando ele é criado. new Carro();

Se a classe não tiver método construtor? O objeto ainda pode

ser criado usando a instrução new.

Definindo os construtores, pode-se estabelecer valores

iniciais para os atributos do objeto.

Page 35: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Métodos Construtores

Após os atributos da classe Carro, adicione o construtor

abaixo.

Observe que esse método possui o mesmo nome da

Classe Carro e não possui tipo de retorno.

Page 36: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Métodos Construtores

Existem duas maneiras de se construir um objeto

derivado da classe Carro, ou do tipo Carro:

Com ou Sem inicialização dos valores dos atributos.

Page 37: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Métodos Construtores

Observe na classe Main.java as duas formas de construir

objetos:

As formas de acessos são as mesmas usando os métodos

get’s. Os métodos set’s também funcionam para alterar os

atributos em qualquer um dos casos.

Page 38: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Atividades

Crie os construtores da classe Pessoa.

Instancie dois objetos, cada um com um construtor

diferente.

Acesse os dois objetos, imprimindo seus valores.

Page 39: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Troca de Mensagens

Os objetos estão relacionados a outros, pois nenhum faz

tudo sozinho, nem mesmo meu computador de última

geração, pois sem a tomada na parede ele não é nada.

Os objetos precisam se “comunicar”, ou seja, um objeto

aciona um método de outro.

Essa comunicação é realizada através do mecanismo de

troca de mensagem.

Page 40: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Troca de Mensagens

Vejamos outro exemplo:

Esse código escrito dentro da classe Main envia umamensagem para definir um atributo e outra pararecuperar a placa do carro.

Em Java, a troca de mensagem representa:

A mudança ou leitura do estado interno do objeto através daalteração de um de seus atributos; ou

A chamada a um dos métodos do objeto que representam seucomportamento e as tarefas que são capazes de desempenhar.

Page 41: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Troca de Mensagens

Bem, quando relacionamos coisas no mundo real fazemos issode forma natural e espontânea.

Vejamos, quantas pessoas cabem em um automóvel?

Na maioria deles, a lotação é de no máximo 5 pessoas, incluindo seucondutor. Mas uma pessoa pode estar em quantos automóveis aomesmo tempo? Até onde as leis da física permitem, só em um, decada vez!

Chamamos esse relacionamento de um-para-muitos, um (automóvel) paramuitos (pessoas).

Em outras situações, vemos que um marido é para uma, e somente uma,esposa, e a recíproca é verdadeira, temos então um relacionamento um-para-um.

A outra combinação possível seria muitos-para-muitos, no exemplocomputador e impressora, o computador pode imprimir em váriasimpressoras e cada uma dessas podem receber documentos dos outroscomputadores do escritório.

Page 42: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Troca de Mensagens

Vamos ligar a classe Carro à classe Pessoa, fazendo com

que uma pessoa possua um carro e esse carro só possa

pertencer a uma única pessoa.

É o que chamados de relação um-para-um.

A classe Carro precisa “saber que pertence” a alguém.

Iremos adicionar um atributo chamado dono, que é do tipo

Pessoa.

Page 43: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Troca de Mensagens

E os respectivos métodos get e set:

Page 44: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Troca de Mensagens

Vamos utilizar esse relacionamento no exemplo seguinte:

Page 45: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Trabalho

Faça um sistema de Biblioteca

Livros

Atributos: Título, Autores, Área, Editora, Ano, Edição, Número deFolhas.

Métodos: set’s e get’s

Usuários:

Atributos: Nome, Idade, Sexo,Telefone.

Métodos: set’s e get’s

Empréstimos:

Atributos: Data do Empréstimo, Hora do Empréstimo,Livro(Relacionamento) e Usuário (relacionamento)

Insira os objetos do programa principal e imprima oempréstimo.

Não se esquece do construtor.

Page 46: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Troca de Mensagens

Os sistemas OO precisam de métodos mais complexos,

que verifiquem a validade dos dados, realizem atualizações

em outras entidades, pesquisem em banco de dados,

escrevam em arquivos de log, atualizem objetos da

interface etc.

1. Colocando um pouco de complexidade do mundo real

no programa?!

1. Adicionar os métodos ligar(), desligar(), acelerar(), frear() à

classe Carro.

Page 47: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Troca de Mensagens

Page 48: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Troca de Mensagens

2. Adicione à classe Carro, ainda, um atributo câmbio que

indicará qual a “marcha” que o carro está em um dado

momento, para tanto, tal atributo irá guardar um valor

inteiro de 0 (zero) a 5 (cinco).

0 – neutro (ponto morto)

1 a 5 – marchas

Page 49: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Troca de Mensagens

3. Colocar uma referência do automóvel dentro da classe

Pessoa.

Page 50: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Troca de Mensagens

4. Adicione outros métodos à classe Pessoa para interagir

(trocar mensagens) com seu carro.

Page 51: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Troca de Mensagens

5) Vamos ao Main! Nosso programa precisa:

Page 52: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Troca de Mensagens

Page 53: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Troca de Mensagens

O que podemos ver é que o método Main envia uma mensagem para o objeto

Pessoa, que, por sua vez, manda ou repassa essa mensagem para seu objeto da

classe Carro, que executa a ação final desejada, que consiste em guiá-lo.

Page 54: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Continuação do Trabalho Adicione na classe Livro:

Um atributo booleano denominado emprestimo.

Crie os métodos is e set para este atributo.

No construtor da classe, atribua o valor false para o atributo acima.

Crie os métodos abrir e fechar livro, escrevendo uma mensagem que o livro está aberto ou fechado para leitura.

Adicione na classe Usuário: Um método lerLivro(), do qual enviará uma mensagem na tela dizendo o

usuário está lendo o livro.

Adicione na classe Emprestimo: Um método denominado devolverLivro, do qual fará com que o atributo

emprestimo da classe livro seja true, e escreva uma mensagem na tela de livro devolvido.

Adicione na classe principal: Acesse os métodos criados acima (abrir, ler, fechar e devolverLivro)

através da classe Empréstimo.

Page 55: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Continuação do Trabalho

Saída

Page 56: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Agenda

Programação Orientada a Objeto (POO)

Conceitos sobre POO

Pilares da POO

Objeto

Classe

Construtores

Troca de Mensagens

Pilares da POO

Encapsulamento

Page 57: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Encapsulamento

Encapsulamento se deriva de cápsula que nos lembra

qualquer forma pequena que protege algo em seu interior,

como um medicamento,.

O encapsulamento, ajuda a desenvolver programas com

maior qualidade e flexibilidade para mudanças futuras.

Page 58: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Encapsulamento

Encapsulamento é a característica da OO capaz

de ocultar partes (dados e detalhes) de

implementação interna de classes do mundo

exterior.

Page 59: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Encapsulamento

Graças ao encapsulamento, podemos ver as classes

apenas pelos serviços (métodos) que elas devem oferecer

para quem as utiliza.

Não visualizamos, nesse caso, de que forma (como) o

serviço (método) está implementado internamente na

classe.

No fundo, o encapsulamento da classe acaba definindo um

contrato que determina o que o mundo exterior pode

fazer com objetos daquela classe.

Page 60: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Encapsulamento

Na Figura, podemos ver que um objeto que possui a

característica de encapsulamento fica protegido por

uma cápsula.

Essa cápsula, que chamamos de interface, serve para

ocultar e proteger de outros objetos, os detalhes de

implementação daquele objeto.

Dessa maneira, o objeto só disponibiliza, através da

interface, as funcionalidades que ele deseja receber

através de solicitações de outros objetos.

Page 61: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Encapsulamento

Exemplo:

Objeto Automóvel disponibiliza para um objeto Pessoa a

direção como parte da sua interface.

Através da direção, a Pessoa solicita ao Automóvel esse

serviço, sem saber COMO serão feitos ou estão

implementados.

Apenas o Automóvel sabe que mecanismos serão acionados

para atender a solicitação da Pessoa.

Page 62: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Encapsulamento

Nesse caso, aplica-se a característica de

encapsulamento ao objeto Automóvel, pois oculta-se

do objeto Pessoa os detalhes da implementação dos

serviços oferecidos pelo Automóvel.

Como isso acontece na prática?

Por meio dos Modificadores de Acesso da linguagem Java.

Page 63: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Encapsulamento

Modificadores de Acesso:

Os Modificadores de Acesso são palavras chave ou

reservadas da linguagem Java cuja utilidade é permitir ou

proibir o acesso aos atributos e/ou métodos das classes.

public: o atributo ou método pode ser acessado por qualquer outra

classe.

private: o atributo ou método pode ser acessado apenas por métodos da

mesma classe.

protected : funciona como o private exceto que as classes filhas ou

derivadas também terão acesso ao atributo ou método.

Package ou Friendly: Os atributos e métodos são chamados de Package

ou Friendly, quando não possuem modificadores, ou seja, são os atributos e

métodos declarados sem modificadores. Isso significa que podem ser

acessados por todas as classes pertencentes a um mesmo pacote.

Page 64: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Encapsulamento

Exemplo:

Agenda: guardar uma data e uma anotação importante a ser

lembrada.

1. Crie um novo projeto denominado Agenda.

1. Não crie a classe principal

2. Clique com o botão direito do mouse em cima do

Pacote Padrão e adicione um nova classe Java

denominada Agenda.

3. Adicione o código:

Page 65: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Encapsulamento

Crie um método “anote” que anotará a descrição do dia.

Page 66: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Encapsulamento

É importante também verificar se a data da anotação é

uma data válida.

Se for uma data válida registra-se a anotação, caso

contrário a anotação recebe uma informação de data

inválida

Page 67: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas
Page 68: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Encapsulamento

Onde está o encapsulamento?

Calma! O objetivo desse exemplo é mostrar a fragilidade do

código que não usa o encapsulamento.

Page 69: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Encapsulamento

Para isso, criaremos dois objetos com a classe Agenda:

agenda1 e agenda2.

agenda1 – uma anotação com uma data válida, e

agenda2 – uma data inválida.

Finalmente, consultaremos os dados dos atributos de

cada objeto, em especial a anotação que foi registrada,

utilizando o método mostraAnotacao().

Page 70: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Encapsulamento

1. Clique com o botão direito do mouse em cima do

Pacote Padrão e adicione um nova classe Java

denominada Main.

2. Adicione o método main para que possamos executar a

aplicação:

Page 71: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Encapsulamento

Adicione o código abaixo para testarmos a fragilidade do

código que não usa o encapsulamento.

Resultado:

Page 72: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Encapsulamento

Veja o que acontece se fizéssemos uma pequena

modificação no método main(). Adicione o código:

Resultado:

Page 73: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Encapsulamento

Veja que sua Agenda permitiu que você inserisse uma data

inválida para uma anotação. Isso significa que seu código

está susceptível a falhas.

Qual é a solução?

Encapsulamento.

Page 74: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Encapsulamento

Codificar em OO usando o encapsulamento nada mais é

que aplicar os modificadores de acesso às classes.

Page 75: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Encapsulamento

Sem

Modificadores

de Acesso

Page 76: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Encapsulamento

A classe Agenda não usa nenhum dos modificadores de

acesso de forma explícita.

Implicitamente ela é Package ou Friendly.

O modificador de acesso Package permite que classes do

mesmo pacote acessem atributos ou métodos que

estejam com tal modificador.

Considerando que a classe Principal está no mesmo pacote

(veja sobre pacotes na classificação de Package), então, ele tem

acesso aos atributos e métodos da classe Agenda.

Page 77: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Encapsulamento

Quando a classe Principal teve acesso aos atributos da

classe Agenda?

O método main da

classe principal está

acessando os

atributos, dia, mes, ano

e anotacao da classe

Agenda. E está

modificando

informações sem

passar pelo teste de

validade da data.

Page 78: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Encapsulamento

Aplicando o encapsulamento:

Private para os atributos e o método validaData(),

Public para os métodos anote() e mostraAnotacao().

Page 79: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas
Page 80: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Encapsulamento

Agora, o compilador já não aceita usar os comandos

abaixo. Isso causaria erro! Ou seja, os atributos da classe

Agenda agora são privados apenas para a uso da própria

classe Agenda.

Page 81: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Encapsulamento

Com essa modificação, só é possível inserir uma anotação

na classe Agenda usando o método anote().

O método anote() garante que a data inserida para a

anotação será validada com o método validaData(), que

também é privado ao uso apenas da classe Agenda.

Page 82: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Atividades1. Aborde encapsulamento na classe Carro e Pessoa. Tente acessar os atributos na

classe principal.

2. Aborde encapsulamento na classe Emprestimo, Livro e Usuário.

3. Sem consultar o material responda: O que você entende por encapsulamento?Para que serve? E como aplicar?

4. Antes de rever os conceitos, para que servem os modificadores de acesso:

public

private

package

1. Desenvolva um programa:

1. Cria uma classe candidato com nome e a quantidade de votos.

2. Implemente o método para acrescentar voto, onde somará 1 ao atributo quantidade devotos.

3. Implemente o métodos gets e sets.

4. Inclua o encapsulamento de tal forma que a votação só será realizada por meio dométodo acrescentar voto.

5. Teste o programa, usando o programa principal.

Page 83: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Agenda

Programação Orientada a Objeto (POO)

Conceitos sobre POO

Pilares da POO

Objeto

Classe

Construtores

Troca de Mensagens

Pilares da POO

Encapsulamento

Composição

Page 84: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Composição ou Agregação

Compor, juntar, reunir, formar, constituir... Essas ações é

chamada Composição.

Possibilita a reutilização de código e

Um objeto mais complexo pode ser composto de partes mais

simples.

Page 85: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Composição ou Agregação

Composição ou Agregação é um mecanismo de

reaproveitamento (reutilização) de classes utilizado

pela POO para aumentar a produtividade e a

qualidade no desenvolvimento de software.

Page 86: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Composição ou Agregação

Reaproveitamento ou reutilização de classes: usar uma ouvárias classes para compor outra classe.

Aumento de produtividade: não é necessário reescrevercódigo de determinadas classes, se já existe algum classecom atributos e comportamento similar.

Composição: é possível também aumentar a qualidadedos sistemas gerados, porque há a possibilidade dereutilizar classes que já foram usadas em outros sistemas,e, portanto, já foram testadas e têm chances de contermenos erros.

Page 87: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Composição ou Agregação

Vejamos um exemplo: um carro é um objeto

COMPOSTO por vários outros objetos. Ele é

composto pelos objetos motor, pneus, direção, faróis etc.

Page 88: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Composição ou Agregação

Você pode criar um objeto a partir de vários outros

objetos.

Veja o computador que você está usando, ele é um objeto

composto por outros objetos: teclado, monitor, placa

mãe, memória, mouse etc.

Page 89: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Composição ou Agregação

Exemplo Prático: Dado uma classe Automóvel que é

composta pelas classes Direção e Motor.

Page 90: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Composição ou Agregação1. Crie um novo projeto denominado Composicao

2. Crie as classes, com os respectivos atributos e métodos:

1. Direcao:

1. Atributos: cor, tamanhoRaio e kitMultimida do tipo booleano;

2. Métodos: get’s, set’s e is;

3. Construtores;

4. Implemente o encapsulamento.

2. Motor:

1. Atributos: potencia, combustivel e chassi;

2. Métodos: get’s, set’s;

3. Construtores;

4. Implemente o encapsulamento.

3. Automovel

1. Atributos: motor e direcao de acordo com seus respectivos tipo;

2. Métodos: get’s, set’s;

3. Construtores;

4. Implemente o encapsulamento.

4. Main

5. Objetos: Automovel

6. Setar os valores dos atributos

7. Imprimir os valores dos atributos

Page 91: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Observação

Construtor

Atribuir valores constantes aos atributos nos construtores das

classes Motor e Direcao.

Imprimir os valores do atributos após a instaciação do objeto

automovel no método main.

Modificadores de Acesso

Alterar o modificar de acesso dos atributos das classes

Automovel, acessá-los no método main.

Page 92: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Atividades

1. Sem consultar o material, responda:

1. O que você entendeu por Composição?

2. Quais são as vantagens de se usar a Composição?

3. Como você omitiria a presença da composição para quem

irá criar os objetos das classes que usa a composição?

4. Crie as classes apresentadas no diagrama abaixo e aplique a

Composição para a classe Pessoa, que além de possuir um

atributo Nome será composta pelas classes Data,

Endereço e Contato para os atributos dataNasc, endereco

e contato, respectivamente.

Page 93: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Atividades

Page 94: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Agenda

Programação Orientada a Objeto (POO)

Conceitos sobre POO

Pilares da POO

Objeto

Classe

Construtores

Troca de Mensagens

Pilares da POO

Encapsulamento

Composição

Herança

Page 95: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Herança

Page 96: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Herança

Herança é o mecanismo que permite a uma classe herdar

todos os atributos e métodos de outra classe.

Page 97: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Herança

Como exemplo, observe a Figura a seguir.

Page 98: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Herança

Considere capacidade como um atributo da classe

Transporte, que indica a quantidade de pessoas que o

transporte em questão pode transportar.

número de rodas como um atributo da classe Terrestre.

cor, número de portas e placa como atributos da classe

Automóvel.

A Figura apresenta um exemplo de Herança, onde:

As classes Aquático, Terrestre e Aéreo herdam da classe

Transporte.

A classe Barco herda da classe Aquático.

A classe Automóvel herda de Terrestre.

E, finalmente, Avião de Aéreo.

Page 99: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Herança

Toda classe que herda de uma outra, acaba herdando

também os seus atributos e métodos.

Por exemplo:

A classe Transporte possui um atributo chamado

capacidade.

A classe Aquático, como ela herda de Transporte, pode-se

dizer que também possui o atributo capacidade.

E Barco, como herda de Aquático, também possui o atributo

capacidade.

Page 100: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Herança

Usando a mesma lógica, responda: Quantos e quais são os

atributos da classe Terrestre? E da classe Automóvel?

Respondendo: a classe Terrestre possui dois atributos: capacidade (de

Transporte) e número de rodas.

A classe Automóvel possui cinco atributos: capacidade (de Transporte), número

de rodas (de Terrestre), cor, número de portas e placa.

Page 101: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Herança

Quanto mais alta classe na hierarquia, mais ela tende a

ser abstrata, ou menos definida, menos atributos e

métodos.

Isso garante que a classe tenha mais chance de ser reusada por

outras classes.

Entendeu? Não.

Suponha que a classe Transporte, além do atributo

capacidade, possuísse também o atributo número de rodas.

Nesse caso, não seria interessante nem faria sentido para a

classe Aquático herdar os atributos de Transporte.

Page 102: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Especialização e Generalização

Especialização e Generalização: O mesmo que mais

classes mais Abstratas e Concretas.

Na Generalização, há classes mais genéricas e abstratas

disponíveis, as quais podem ser usadas para outras

descenderem delas.

Já a Especialização, há classes que estão numa posição

inferior na hierarquia possuem estado e comportamento mais

especializados.

Page 103: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Especialização e Generalização

Classes em posição inferior como Automóvel, representam

especializações de classes em posição superior (Transporte,Terrestre).

Classes em posição superior como Transporte, representam

generalizações de classes em posições inferiores (Automóvel,Terrestre).

Page 104: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Herança Múltipla e Simples

Herança Múltipla: é a capacidade de uma classe possuir

mais de uma superclasse e herdar os atributos e métodos

de todas as superclasses.

Para simular a herança múltipla em Java, usa-se Interfaces.

Herança Simples: Cada classe pode ter apenas uma

superclasse.

Na linguagem Java usa-se a palavra reservada extends para

declarar que uma classe é herdeira de outra.

Page 105: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Herança

Curiosidades:

Todas as classes em Java descende de uma classe,chamada Object.

Quando uma classe usa a relação de Herança, essa classepossui um relacionamento chamado “É um”.

Exemplo: Automóvel “é um” transporte Terrestre,assim como que Terrestre “é um” Transporte.

Page 106: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Herança em Java

Em Java a palavra-chave extends é usada para indicar que

uma dada classe herda de outra.

Crie um projeto Java denominado Herança.

Crie as classes abaixo.

Page 107: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Herança em Java

Page 108: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Herança em Java

Page 109: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Herança em Java

Page 110: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Herança em Java

Page 111: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Atividade

Crie uma classe chamada ExercicioHeranca.

Implemente as classes com os métodos

Animal

CalculadoraSimples (somar, subtrair)

float somar(float a, float b);

float subtrair(float a, float b);

CalculadoraComplexa (raiz)

float raiz(float a);

Page 112: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Atividade

1. Das opções abaixo, qual se refere ao conceito de

Herança?

a) Herança é a capacidade de reaproveitar outras classes para

compor uma nova classe.

b) Herança é a característica da OO de ocultar partes da

implementação interna de classes do mundo exterior.

c) Herança é a habilidade de objetos de classes diferentes

responderem a mesma mensagem de diferentes maneiras.

d) Herança é o mecanismo que permite a uma classe herdar

todos os atributos e métodos de outra classe.

Page 113: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Herança II

Objetivos

Ao final desta aula, você deve ser capaz de:

relacionar a herança e o modificador de acesso protected;

entender o uso da palavra-chave super no contexto de herança

entre classes;

saber como funciona a herança para os métodos, durante a

execução do programa.

Page 114: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Herança II

A Herança e o Protected

Tipos de modificadores de acesso: public, private e

protected.

Esse último, ficou para explicar melhor.

O modificador protected determina que apenas as classes

filhas de uma determinada classe poderão ter acesso aos

atributos e métodos declarados com esse modificador.

Page 115: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Herança II

Veja o exemplo abaixo:

Substituição do private pelo

pretected

Page 116: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Herança II

Adicione um método na classe Automóvel.

Esse método faz acesso aos atributos protected capacidade

e numRodas, definidos nas classes Transporte e Terrestre,

respectivamente.

Observe que tais atributos são acessados e usados

livremente no método imprimeDadosAutomovel().

Page 117: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Herança II

Page 118: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Herança II

O programa abaixo mostra uma tentativa frustrada de

acesso aos atributos capacidade e numRodas herdados

pela classe Automóvel, dentro de um método main().

Page 119: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Herança II

Calma! Se não deu

erro, tente colocar

em pacotes

diferentes.

Veja os próximos

slides.

Page 120: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Herança II

O seu não deu erro? Coloque em pacotes diferentes.

Page 121: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Herança II

A Herança e o super

A palavra super refere-se à classe classe mãe ou super-classe.

Ela é usada nos construtores.

Page 122: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Herança II

Page 123: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Herança II

Page 124: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Herança II

O super é usado para chamar o método construtor daclasse mãe.

Na classe Transporte, como a classe mãe de Transporte éObject, o super não tem parâmetro.

Já no construtor da classe Terrestre, o super tem comoparâmetro a capacidade exigida no construtor da classeTransporte. Portanto, a chamada a super na classe Terrestreé no fundo a chamada ao construtor de Transporte.

Já o construtor da classe Automóvel, o super tem comoparâmetros a capacidade e o numRodas exigidos peloconstrutor da classe Terrestre.

Page 125: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Herança II

No programa principal você pode chamar pelo método

construtor das duas formas.

1. Como feito anteriormente

2. Com os valores sendo iniciados ao intanciar o objeto

Automovel.

Page 126: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Herança II

Um pergunta: será que a Herança também permite o uso

de outros métodos diferentes dos get e set para as

classes descendentes?

A resposta é sim, como vimos anteriormente no método

imprimeDadosAutomovel().

Se um método estiver com modificador private, esse método

não estará acessível para classes filhas.

Se um método for public ou protected, estarão acessíveis

para classes filhas.

Page 127: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Atividades

1. Crie um pacote denominado Heranca2.

2. Acrescente as classes utilizando o princípio da Herança,

obedecendo à hierarquia da figura abaixo:.

1. Obs: Substitua na figura o tipo Calendar por String

3. Acrescente encapsulamento do tipo protected nos

atributos das classes mãe.

4. Acrescente os métodos gets e sets.

5. Acrescente os construtores com a palavra chave super.

Page 128: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Atividades

Page 129: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Atividades

a) Insira os seguintes métodos, para apresentar os valores

dos atributos das classes, mostrarChefe() e

mostrarAluno(), respectivamente, às classes

ChefeDepartamento e Aluno.

a) Para imprimir os atributos, use o método

System.out.println() em cada um dos métodos.

b) Crie uma classe TestaTudo com um método main(),

que instancia um objeto das classes

ChefeDepartamento e Aluno e exibe os valores dos

atributos através de chamadas aos métodos

mostrarChefe() e mostrarAluno().

Page 130: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Polimorfismo

O poliformismo deriva da palavra polimorfo, que significa

multiforme, ou que pode variar a forma.

Para a POO, polimorfismo é a habilidade de objetos de

classes diferentes responderem a mesma mensagem de

diferentes maneiras. Ou seja, várias formas de

responder à mesma mensagem.

Page 131: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Polimorfismo

Page 132: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Polimorfismo

Vejamos o seguinte exemplo:

um dono de uma fábrica de brinquedos solicitou que seus

engenheiros criassem um mesmo controle remoto para todos

os brinquedos de sua fábrica.

A única restrição era que cada brinquedo atendesse aos

comandos específicos definidos pelo controle.

Page 133: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Polimorfismo

Page 134: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Polimorfismo

Assim quando o brinquedo recebe o sinal MOVER, ele se

move de acordo com a sua função.

Para o avião, mover significa VOAR;

Para o barco significa NAVEGAR, e

Para o automóvel CORRER.

Observe que os brinquedos respondem ao mesmo sinal

de formas diferentes.

Page 135: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Polimorfismo

O Polimorfismo permite que diferentes objetos (avião,

barco, automóvel) respondam uma mesma mensagem

(mover) de formas diferentes (voar, navegar e correr).

Page 136: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Polimorfismo

Tipos de polimorfismo

O Polimorfismo pode ser classificado de três maneiras:

Polimorfismo de Sobrecarga

Polimorfismo de Sobreposição

Polimorfismo de Inclusão

Page 137: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Polimorfismo

Polimorfismo de Sobrecarga

Permite que um método de determinado nome tenha

comportamentos distintos, em função de diferentes

parâmetros que ele recebe. Cada método difere no número

e no tipo de parâmetros.

Page 138: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Polimorfismo

Veja no exemplo uma aplicação prática do uso do

polimorfismo de sobrecarga.

Page 139: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Polimorfismo

A sobrecarga e os construtores

O polimorfismo de sobrecarga normalmente acontece sobre

os métodos construtores, pois é comum para uma classe ter

várias maneiras de instanciá-la.

O programa abaixo ilustra um exemplo de polimorfismo

de sobrecarga nos construtores da classe Pessoa.

Page 140: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Polimorfismo

Observe que são declarados 3 construtores e todos eles têm o mesmo

nome da classe. Entretanto, cada um deles recebe um número diferente de

parâmetros.

Page 141: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Polimorfismo

Polimorfismo de Sobreposição

É a redefinição de métodos em classes descendentes. Ou seja,

um método de uma classe filha com o mesmo nome de um

método de uma classe mãe irá sobrepor esse último.

Vejamos o exemplo.

Page 142: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Polimorfismo

O polimorfismo de sobreposição em Java

Considere que a classe Brinquedo possui como descendentes

as classes Carro, Avião e Barco, conforme ilustra a Figura.

Observe que as classes filhas sobrepõem o método mover()

da classe Brinquedo.

Page 143: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Polimorfismo

Vejamos então como

ficam essas classes

codificadas em Java.

Page 144: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Polimorfismo

Considerando o método mover() de cada classe filha,

como poderíamos chamar o método mover() do

brinquedo (classe) correto? Ou seja, como o

ControleRemoto saberá que método mover ele deve

chamar se ele tem disponível três tipos de mover

diferentes (um para cada brinquedo)?

Page 145: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Polimorfismo

Vamos ver inicialmente como fica a implementação do

Controle Remoto.

Page 146: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Polimorfismo

O programa mostra como fica a classe Principal que instanciaum objeto controleRemoto e um objeto carro para sercontrolado automaticamente.

Foi criado um brinquedo do tipo Carro, e o ControleRemoto.

Foi enviado o objeto carro para o objeto controleRemoto através dachamada ao seu construtor.

Assim, quando acionado o comando controleRemoto.mover(), seráchamado o método mover() do carro.

Page 147: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Atividade

Implemente as classes da hierarquia da classe Figura

Geometrica mostrada na Figura abaixo em Java, aplicando

o polimorfismo de sobreposição para o método

desenha().

Em seguida, crie uma classe Principal com um método

main que cria um objeto de cada uma das classes e chama

seus respectivos métodos desenha().

Page 148: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Polimorfismo

Polimorfismo de Inclusão

No exemplo visto anteriormente, em que na classe Principal,

foi criado um objeto do tipo Carro e outro do tipo

ControleRemoto, utilizou-se o polimorfismo de inclusão.

Isso foi feito substituindo a classe Brinquedo pela classe

Carro dentro da classe ControleRemoto.

Page 149: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Polimorfismo

Veja a Figura.

Page 150: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Polimorfismo

Observe que a classe ControleRemoto está

relacionada com a classe Brinquedo, pois possui um

atributo do tipo Brinquedo.

Mas, como as classes Carro, Avião e Barco são do tipo

Brinquedo, elas podem substituir a classe Brinquedo

em qualquer método que a utilize.

A capacidade do objeto (brinquedo) do tipo Brinquedo

da classe ControleRemoto de receber qualquer um

objeto de subclasses da classe Brinquedo é que

caracteriza o polimorfismo de inclusão.

Page 151: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Trabalho

Faça um exemplo prático para apresentar os seguintes

conceitos em Java.

Static

Interface, Implements e Abstract

Page 152: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Referências BARNES, David J.; KÖLLING Michael.Programação orientada a

objetos com Java. São Paulo: Editora Pearson Prentice Hall, 2004.

DEITEL, H. M.; DEITEL, P. J. Java como programar. Porto Alegre:Bookman, 2003.

LEMAY, Laura. Aprenda Java em 21 dias. Tradução: Daniel Vieira.Rio de Janeiro: Campos, 2003.

SANTOS, Rafael. Introdução à programação orientada aobjetos usando Java. São Paulo: Editora Campus, 2003.

SINTES, Anthony. Aprenda a programar orientada a objetoem 21 dias. Tradução: João Eduardo Nóbrega Tortello. São Paulo:Pearson Education do Brasil, 2002.

THE JAVA: tutorials. [Tutorial Oficial Java]. Disponível em:<http://java.sun.com/docs/books/tutorial/>. Acesso em: 13 maio2010.

http://www.metropoledigital.ufrn.br/aulas/disciplinas/poo/

Page 153: Programação Orientada a Objetos de... · A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que ... Observe na classe Main.java as duas formas

Referências

THE JAVA: tutorials. [Tutorial Oficial Java]. Disponível em:<http://java.sun.com/docs/books/tutorial/>. Acesso em: 13maio 2010.

About the Java Technology. Disponível em:<http://java.sun.com/docs/books/tutorial/getStarted/intro/definition.html>.Acesso em: 13 maio 2010.

WIKIPÉDIA. Máquina virtual Java. Disponível em:<http://pt.wikipedia.org/wiki/Máquina_virtual_Java>. Acessoem: 13 maio 2010.

DEITEL, H. M.; DEITEL, P. J. Java como programar. PortoAlegre: Bookman, 2003.

SANTOS, Rafael. Introdução à programação orientada aobjetos usando Java. Rio de Janeiro: Editora Campus, 2003.