Programação Orientada a Objetosmichelle.nery/Linguagem... · Programação Orientada a Objetos...

Preview:

Citation preview

Programação Orientada a Objetos

JAVA - NETBEANS

Agenda

Programação Orientada a Objeto (POO)

Conceitos sobre POO

Pilares da POO

Objeto

Classe

Construtores

Troca de Mensagens

Encapsulamento

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.

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.

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.

Agenda

Programação Orientada a Objeto (POO)

Conceitos sobre POO

Pilares da POO

Objeto

Classe

Construtores

Troca de Mensagens

Encapsulamento

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.

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.

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.

Objetos

Os objetos possuem:

Características pelas quais os identificamos e

Finalidades para as quais os utilizamos.

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.

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.

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.

Objetos

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.

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.

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.

Classes

Dois diferentes carros foram criados tomando como base

a estrutura da classe.

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.

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.

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.

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.

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.

Adicionando Comportamento

Adicionando Comportamento

Atividade

Faça o mesmo para a classe Pessoa.

Criando um Objeto

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

main.

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.

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).

Criando um Objeto

Exibindo cada atributo com seu respectivo método

getAtributo().

Criando um Objeto - MAIN

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.

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.

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.

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.

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.

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.

Atividades

Crie os construtores da classe Pessoa.

Instancie dois objetos, cada um com um construtor

diferente.

Acesse os dois objetos, imprimindo seus valores.

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.

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.

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.

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.

Troca de Mensagens

E os respectivos métodos get e set:

Troca de Mensagens

Vamos utilizar esse relacionamento no exemplo seguinte:

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.

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.

Troca de Mensagens

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

Troca de Mensagens

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

Pessoa.

Troca de Mensagens

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

(trocar mensagens) com seu carro.

Troca de Mensagens

5) Vamos ao Main! Nosso programa precisa:

Troca de Mensagens

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.

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.

Continuação do Trabalho

Saída

Agenda

Programação Orientada a Objeto (POO)

Conceitos sobre POO

Pilares da POO

Objeto

Classe

Construtores

Troca de Mensagens

Pilares da POO

Encapsulamento

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.

Encapsulamento

Encapsulamento é a característica da OO capaz

de ocultar partes (dados e detalhes) de

implementação interna de classes do mundo

exterior.

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.

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.

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.

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.

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.

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:

Encapsulamento

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

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

Encapsulamento

Onde está o encapsulamento?

Calma! O objetivo desse exemplo é mostrar a fragilidade do

código que não usa o encapsulamento.

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().

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:

Encapsulamento

Adicione o código abaixo para testarmos a fragilidade do

código que não usa o encapsulamento.

Resultado:

Encapsulamento

Veja o que acontece se fizéssemos uma pequena

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

Resultado:

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.

Encapsulamento

Codificar em OO usando o encapsulamento nada mais é

que aplicar os modificadores de acesso às classes.

Encapsulamento

Sem

Modificadores

de Acesso

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.

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.

Encapsulamento

Aplicando o encapsulamento:

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

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

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.

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.

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.

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

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.

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.

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.

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.

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.

Composição ou Agregação

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

composta pelas classes Direção e Motor.

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

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.

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.

Atividades

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

Herança

Herança

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

todos os atributos e métodos de outra classe.

Herança

Como exemplo, observe a Figura a seguir.

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.

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.

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.

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.

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.

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).

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.

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.

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.

Herança em Java

Herança em Java

Herança em Java

Herança em Java

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);

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.

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.

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.

Herança II

Veja o exemplo abaixo:

Substituição do private pelo

pretected

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().

Herança II

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().

Herança II

Calma! Se não deu

erro, tente colocar

em pacotes

diferentes.

Veja os próximos

slides.

Herança II

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

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.

Herança II

Herança II

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.

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.

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.

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.

Atividades

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().

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.

Polimorfismo

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.

Polimorfismo

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.

Polimorfismo

O Polimorfismo permite que diferentes objetos (avião,

barco, automóvel) respondam uma mesma mensagem

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

Polimorfismo

Tipos de polimorfismo

O Polimorfismo pode ser classificado de três maneiras:

Polimorfismo de Sobrecarga

Polimorfismo de Sobreposição

Polimorfismo de Inclusão

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.

Polimorfismo

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

polimorfismo de sobrecarga.

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.

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.

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.

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.

Polimorfismo

Vejamos então como

ficam essas classes

codificadas em Java.

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)?

Polimorfismo

Vamos ver inicialmente como fica a implementação do

Controle Remoto.

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.

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().

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.

Polimorfismo

Veja a Figura.

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.

Trabalho

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

conceitos em Java.

Static

Interface, Implements e Abstract

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/

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.

Recommended