Upload
phungthuy
View
248
Download
0
Embed Size (px)
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.