153
Programação Orientada a Objetos JAVA - NETBEANS

Programação Orientada a Objetos

  • Upload
    tokala

  • View
    79

  • Download
    0

Embed Size (px)

DESCRIPTION

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). - PowerPoint PPT Presentation

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

Atividades1. 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 uma mensagem para definir um atributo e outra para recuperar a placa do carro.

Em Java, a troca de mensagem representa: A mudança ou leitura do estado interno do objeto através

da alteração de um de seus atributos; ou A chamada a um dos métodos do objeto que

representam seu comportamento e as tarefas que são capazes de desempenhar.

Troca de Mensagens Bem, quando relacionamos coisas no mundo real

fazemos isso de 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 seu condutor. Mas uma pessoa pode estar em quantos automóveis ao mesmo tempo? Até onde as leis da física permitem, só em um, de cada vez!

Chamamos esse relacionamento de um-para-muitos, um (automóvel) para muitos (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 exemplo computador e impressora, o computador pode imprimir em várias impressoras e cada uma dessas podem receber documentos dos outros computadores 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 de Folhas. 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 o

empré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 Mensagens2. 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 Mensagens3. Colocar uma referência do automóvel dentro da

classe Pessoa.

Troca de Mensagens4. Adicione outros métodos à classe Pessoa

para interagir (trocar mensagens) com seu carro.

Troca de Mensagens5) 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().

Encapsulamento1. 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:publicprivatepackage

5. 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 de votos. 3. Implemente o métodos gets e sets.4. Inclua o encapsulamento de tal forma que a votação só será realizada por

meio do mé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 ou várias classes para compor outra classe.

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

Composição: é possível também aumentar a qualidade dos sistemas gerados, porque há a possibilidade de reutilizar classes que já foram usadas em outros sistemas, e, portanto, já foram testadas e têm chances de conter menos 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 Composicao2. 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. Automovel1. Atributos: motor e direcao de acordo com seus respectivos tipo;2. Métodos: get’s, set’s; 3. Construtores;4. Implemente o encapsulamento.

4. Main5. Objetos: Automovel6. Setar os valores dos atributos7. 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.

Atividades1. 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 classe possui 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);

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

da classe 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 como parâmetro a capacidade exigida no construtor da classe Transporte. 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 como parâmetros a capacidade e o numRodas exigidos pelo construtor da classe Terrestre.

Herança II No programa principal você pode chamar pelo

método construtor das duas formas. 1. Como feito anteriormente2. 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.

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

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

instancia um objeto controleRemoto e um objeto carro para ser controlado automaticamente.

Foi criado um brinquedo do tipo Carro, e o ControleRemoto. Foi enviado o objeto carro para o objeto controleRemoto

através da chamada 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 a objetos usando Java. São Paulo: Editora Campus, 2003.

SINTES, Anthony. Aprenda a programar orientada a objeto em 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 maio 2010.

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: 13 maio 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>. Acesso em: 13 maio 2010.

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

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