Programação Orientada a Objetos JAVA - NETBEANS. Agenda Programação Orientada a Objeto (POO) ...

153
Programação Orientada a Objetos JAVA - NETBEANS

Transcript of Programação Orientada a Objetos JAVA - NETBEANS. Agenda Programação Orientada a Objeto (POO) ...

Page 1: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Programação Orientada a Objetos

JAVA - NETBEANS

Page 2: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Agenda Programação Orientada a Objeto (POO) Conceitos sobre POO

Pilares da POO Objeto Classe Construtores Troca de Mensagens Encapsulamento

Page 3: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

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

um paradigma de programação de computadores que usa os conceitos de Objetos e Classes como elementos centrais para representar e processar dados usados nos programas.

Você sabe o que um Paradigma? Segundo o dicionário Houaiss, paradigma significa

modelo, padrão, exemplo.  

Page 4: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Programação Orientada a Objetos (POO) Os conceitos da programação orientada a

objetos (POO) surgiram no final da década de 1960, com a linguagem Simula-68.

Posteriormente amadurecidos e aprimorados durante a década de 1970 pela linguagem de programação Smalltalk.

A popularização da POO só se deu ao longo da década de 80 e 90, com as linguagens C++ e Java.

Page 5: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Programação Orientada a Objetos (POO) Um dos principais pesquisadores que

introduziu os conceitos de POO, foi o cientista Alan Kay da Xerox, um dos criadores da linguagem Smalltalk.

Durante suas pesquisas, Alan desenvolveu a ideia de que poderíamos construir um programa usando conceitos e abstrações do mundo real, como objetos, troca de mensagens.

Page 6: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Agenda Programação Orientada a Objeto (POO) Conceitos sobre POO

Pilares da POO Objeto Classe Construtores Troca de Mensagens Encapsulamento

Page 7: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Conceitos da Programação Orientada a Objetos A Programação Orientada a Objetos está

sedimentada sobre quatro pilares derivados do princípio da abstração, são eles: Encapsulamento, Herança, Composição e Polimorfismo.

Page 8: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Conceitos da Programação Orientada a Objetos O princípio da abstração é a capacidade de

abstrair a complexidade de um sistema e se concentrar em apenas partes desse sistema. Exemplo: um médico torna-se um especialista em

algum órgão do corpo (exemplo, o coração). Ele abstrai sem desconsiderar as influências dos outros órgãos e foca apenas sua atenção nesse órgão.

Page 9: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

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

representar entidades do mundo real ou computacional.

Se observarmos ao nosso redor, veremos várias entidades ou abstrações as quais podem ser representadas como objetos no nosso programa.

As pessoas e seus carros podem ser vistas como objetos. 

Page 10: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Objetos Os objetos possuem:

Características pelas quais os identificamos e Finalidades para as quais os utilizamos.

Page 11: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Objetos: Atributos Características são tipicamente chamadas de

atributos. O objeto Pessoa possui RG, nome, data de

nascimento, etc. O objeto Carro possui tipo, cor, quantidade de

portas.

Page 12: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Objetos: Métodos Objetos podem também ter comportamentos

associados. Um objeto do tipo Pessoa pode andar, correr ou

dirigir carros. Um objeto do tipo Carro pode ligar, desligar,

acelerar, frear.

Page 13: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Objetos Na POO os objetos possuem características e

comportamentos.

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

Enquanto os comportamentos também podem ser chamados de operações ou métodos.

Page 14: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Objetos

Page 15: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Classes Carros sempre possuirão os atributos tipo, cor

e número de portas.

Pessoas sempre possuirão nome, data de nascimento e, possivelmente, um RG.

Page 16: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Classes A modelagem e programação de um conjunto

de objetos que possuem características (atributos) e comportamentos (métodos) comuns é feita na POO usando o conceito de Classe. Cada classe funciona no fundo como um molde

para a criação de um dado objeto. Os objetos são vistos como representações

concretas (instâncias) das classes. 

Page 17: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Classes A classe define que objetos devem ter tipo,

cor, placa e número de portas, mas não indica explicitamente quais são seus valores.

Page 18: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Classes Dois diferentes carros foram criados tomando

como base a estrutura da classe.

Page 19: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  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.

Page 20: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Criação de Classes Vamos criar a classe Carro em Java.1. Crie um nome Projeto chamado de POO.2. Adicione uma nova classe java denominada

Carro, clicando com o botão direito do mouse em cima do pacote poo.

Palavra obrigatória

para indicar a criação

de uma classe.

Nome da classe escolhido pelo programador. Por padrão, utiliza-se sempre a primeira letra maiúscula.

Conjunto de características dos objetos da Classe Carro.

Page 21: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Criação de Classes Perceba que não inserimos no código nada

sobre o comportamento dos carros, como andar para frente ou para trás, virar a esquerda/direita, frear etc.

Vamos criar a classe Pessoa em Java.1. Adicione uma nova classe java denominada

Pessoa, clicando com o botão direito do mouse em cima do pacote poo.

Page 22: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Adicionando Comportamento Os objetos das classes Carro e Pessoa,

precisam não só de suas características, mas também de ações possíveis de serem executadas.

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

E pessoas, por sua vez, precisam desempenhar suas atividades, como andar, correr, estudar etc.

Page 23: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Adicionando Comportamento Observe que adicionamos novas linhas ao

código, agora com dois métodos setCor(String cor) e getCor().

Esses métodos servem, respectivamente, para alterar o valor do atributo “cor” e retornar o valor desse atributo.

Page 24: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Adicionando Comportamento

Page 25: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Adicionando Comportamento

Page 26: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Atividade Faça o mesmo para a classe Pessoa.

Page 27: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Criando um Objeto Vá para o programa principal, onde existe o

método main.

Page 28: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Criando um Objeto Vamos criar um objeto da classe Carro, no

mundo da programação orientada a objetos chamamos isso de instanciação, ou seja, criaremos uma instância da classe Carro.

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

Page 29: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Criando um Objeto Toda a manipulação e consulta dos atributos

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

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

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

Page 30: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Criando um Objeto Exibindo cada atributo com seu respectivo

método getAtributo().

Page 31: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Criando um Objeto - MAIN

Page 32: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

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.

Page 33: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Métodos Construtores E se eu quiser, no momento da criação do

objeto, passar valores para alguns de seus atributos, como placa e cor, por exemplo? É possível? É sim!! Para isso, define-se um tipo especial de método

chamado construtor. E como seu próprio nome diz, ele constrói e objeto

e nesse instante pode definir quaisquer atributos que desejarmos.

Page 34: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Métodos Construtores O método construtor é aquele chamado em

um objeto, quando ele é criado. new Carro(); Se a classe não tiver método construtor? O objeto

ainda pode ser criado usando a instrução new. Definindo os construtores, pode-se

estabelecer valores iniciais para os atributos do objeto.

Page 35: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Métodos Construtores Após os atributos da classe Carro, adicione o

construtor abaixo.

Observe que esse método possui o mesmo nome da Classe Carro e não possui tipo de retorno.

Page 36: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Métodos Construtores Existem duas maneiras de se construir um

objeto derivado da classe Carro, ou do tipo Carro: Com ou Sem inicialização dos valores dos

atributos.

Page 37: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Métodos Construtores Observe na classe Main.java as duas formas

de construir objetos:

As formas de acessos são as mesmas usando os métodos get’s. Os métodos set’s também funcionam para alterar os atributos em qualquer um dos casos.

Page 38: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Atividades Crie os construtores da classe Pessoa. Instancie dois objetos, cada um com um

construtor diferente. Acesse os dois objetos, imprimindo seus

valores.

Page 39: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Troca de Mensagens Os objetos estão relacionados a outros, pois

nenhum faz tudo sozinho, nem mesmo meu computador de última geração, pois sem a tomada na parede ele não é nada.

Os objetos precisam se “comunicar”, ou seja, um objeto aciona um método de outro.

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

Page 40: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

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.

Page 41: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

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.

Page 42: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Troca de Mensagens Vamos ligar a classe Carro à classe Pessoa,

fazendo com que uma pessoa possua um carro e esse carro só possa pertencer a uma única pessoa. É o que chamados de relação um-para-um.

A classe Carro precisa “saber que pertence” a alguém. Iremos adicionar um atributo chamado dono, que

é do tipo Pessoa.

Page 43: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Troca de Mensagens E os respectivos métodos get e set:

Page 44: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Troca de Mensagens Vamos utilizar esse relacionamento no

exemplo seguinte:

Page 45: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

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.

Page 46: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Troca de Mensagens Os sistemas OO precisam de métodos mais

complexos, que verifiquem a validade dos dados, realizem atualizações em outras entidades, pesquisem em banco de dados, escrevam em arquivos de log, atualizem objetos da interface etc.

1. Colocando um pouco de complexidade do mundo real no programa?!

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

Page 47: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Troca de Mensagens

Page 48: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

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

Page 49: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Troca de Mensagens3. Colocar uma referência do automóvel dentro da

classe Pessoa.

Page 50: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

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

para interagir (trocar mensagens) com seu carro.

Page 51: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Troca de Mensagens5) Vamos ao Main! Nosso programa precisa:

Page 52: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Troca de Mensagens

Page 53: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Troca de Mensagens O que podemos ver é que o método Main envia uma mensagem

para o objeto Pessoa, que, por sua vez, manda ou repassa essa mensagem para seu objeto da classe Carro, que executa a ação final desejada, que consiste em guiá-lo.

Page 54: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Continuação do Trabalho Adicione na classe Livro:

Um atributo booleano denominado emprestimo. Crie os métodos is e set para este atributo. No construtor da classe, atribua o valor false para o atributo acima. Crie os métodos abrir e fechar livro, escrevendo uma mensagem

que o livro está aberto ou fechado para leitura. Adicione na classe Usuário:

Um método lerLivro(), do qual enviará uma mensagem na tela dizendo o usuário está lendo o livro.

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

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

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

através da classe Empréstimo.

Page 55: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Continuação do Trabalho Saída

Page 56: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Agenda Programação Orientada a Objeto (POO) Conceitos sobre POO

Pilares da POO Objeto Classe Construtores Troca de Mensagens

Pilares da POO Encapsulamento

Page 57: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Encapsulamento Encapsulamento se deriva de cápsula que nos

lembra qualquer forma pequena que protege algo em seu interior, como um medicamento,.

O encapsulamento, ajuda a desenvolver programas com maior qualidade e flexibilidade para mudanças futuras.

Page 58: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Encapsulamento

Encapsulamento é a característica da OO capaz de ocultar partes (dados e detalhes) de implementação interna de classes do mundo exterior.

Page 59: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Encapsulamento Graças ao encapsulamento, podemos ver as

classes apenas pelos serviços (métodos) que elas devem oferecer para quem as utiliza.

Não visualizamos, nesse caso, de que forma (como) o serviço (método) está implementado internamente na classe.

No fundo, o encapsulamento da classe acaba definindo um contrato que determina o que o mundo exterior pode fazer com objetos daquela classe.

Page 60: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  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.

Page 61: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Encapsulamento Exemplo:

Objeto Automóvel disponibiliza para um objeto Pessoa a direção como parte da sua interface.

Através da direção, a Pessoa solicita ao Automóvel esse serviço, sem saber COMO serão feitos ou estão implementados.

Apenas o Automóvel sabe que mecanismos serão acionados para atender a solicitação da Pessoa.

Page 62: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Encapsulamento Nesse caso, aplica-se a característica de

encapsulamento ao objeto Automóvel, pois oculta-se do objeto Pessoa os detalhes da implementação dos serviços oferecidos pelo Automóvel.

Como isso acontece na prática? Por meio dos Modificadores de Acesso da

linguagem Java.  

Page 63: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Encapsulamento Modificadores de Acesso:

Os Modificadores de Acesso são palavras chave ou reservadas da linguagem Java cuja utilidade é permitir ou proibir o acesso aos atributos e/ou métodos das classes. public: o atributo ou método pode ser acessado por

qualquer outra classe.private: o atributo ou método pode ser acessado apenas por métodos da mesma classe.protected : funciona como o private exceto que as classes filhas ou derivadas também terão acesso ao atributo ou método. Package ou Friendly: Os atributos e métodos são chamados de Package ou Friendly, quando não possuem modificadores, ou seja, são os atributos e métodos declarados sem modificadores. Isso significa que podem ser acessados por todas as classes pertencentes a um mesmo pacote.

Page 64: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Encapsulamento Exemplo:

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

1. Crie um novo projeto denominado Agenda.1. Não crie a classe principal

2. Clique com o botão direito do mouse em cima do Pacote Padrão e adicione um nova classe Java denominada Agenda.

3. Adicione o código:

Page 65: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Encapsulamento Crie um método “anote” que anotará a

descrição do dia.

Page 66: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Encapsulamento É importante também verificar se a data da

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

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

Page 67: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.
Page 68: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Encapsulamento Onde está o encapsulamento?

Calma! O objetivo desse exemplo é mostrar a fragilidade do código que não usa o encapsulamento.

Page 69: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Encapsulamento Para isso, criaremos dois objetos com a classe

Agenda: agenda1 e agenda2. agenda1 – uma anotação com uma data válida, e agenda2 – uma data inválida.

Finalmente, consultaremos os dados dos atributos de cada objeto, em especial a anotação que foi registrada, utilizando o método mostraAnotacao().

Page 70: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

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:

Page 71: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Encapsulamento Adicione o código abaixo para testarmos a

fragilidade do código que não usa o encapsulamento.

Resultado:

Page 72: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Encapsulamento Veja o que acontece se fizéssemos uma

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

Resultado:

Page 73: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Encapsulamento Veja que sua Agenda permitiu que você

inserisse uma data inválida para uma anotação. Isso significa que seu código está susceptível a falhas.

Qual é a solução? Encapsulamento.

Page 74: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Encapsulamento Codificar em OO usando o encapsulamento

nada mais é que aplicar os modificadores de acesso às classes.

Page 75: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Encapsulamento

Sem Modificadores de Acesso

Page 76: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Encapsulamento A classe Agenda não usa nenhum dos

modificadores de acesso de forma explícita. Implicitamente ela é Package ou Friendly.

O modificador de acesso Package permite que classes do mesmo pacote acessem atributos ou métodos que estejam com tal modificador. Considerando que a classe Principal está no

mesmo pacote (veja sobre pacotes na classificação de Package), então, ele tem acesso aos atributos e métodos da classe Agenda.

Page 77: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Encapsulamento Quando a classe Principal teve acesso aos

atributos da classe Agenda?

O método main da classe principal está acessando os atributos, dia, mes, ano e anotacao da classe Agenda. E está modificando informações sem passar pelo teste de validade da data.

Page 78: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Encapsulamento Aplicando o encapsulamento:

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

mostraAnotacao().

Page 79: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.
Page 80: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

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

comandos abaixo. Isso causaria erro! Ou seja, os atributos da classe Agenda agora são privados apenas para a uso da própria classe Agenda.

Page 81: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

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

uma anotação na classe Agenda usando o método anote().

O método anote() garante que a data inserida para a anotação será validada com o método validaData(), que também é privado ao uso apenas da classe Agenda.

Page 82: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

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.

Page 83: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Agenda Programação Orientada a Objeto (POO) Conceitos sobre POO

Pilares da POO Objeto Classe Construtores Troca de Mensagens

Pilares da POO Encapsulamento Composição

Page 84: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Composição ou Agregação Compor, juntar, reunir, formar, constituir...

Essas ações é chamada Composição. Possibilita a reutilização de código e Um objeto mais complexo pode ser composto de

partes mais simples.

Page 85: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Composição ou Agregação

Composição ou Agregação é um mecanismo de reaproveitamento (reutilização) de classes utilizado pela POO para aumentar a produtividade e a qualidade no desenvolvimento de software.

Page 86: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

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.

Page 87: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Composição ou Agregação Vejamos um exemplo: um carro é um objeto

COMPOSTO por vários outros objetos. Ele é composto pelos objetos motor, pneus, direção, faróis etc.

Page 88: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Composição ou Agregação Você pode criar um objeto a partir de vários

outros objetos.

Veja o computador que você está usando, ele é um objeto composto por outros objetos: teclado, monitor, placa mãe, memória, mouse etc.

Page 89: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Composição ou Agregação Exemplo Prático: Dado uma classe Automóvel

que é composta pelas classes Direção e Motor.

Page 90: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

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

Page 91: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Observação Construtor

Atribuir valores constantes aos atributos nos construtores das classes Motor e Direcao.

Imprimir os valores do atributos após a instaciação do objeto automovel no método main.

Modificadores de Acesso Alterar o modificar de acesso dos atributos das

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

Page 92: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

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.

Page 93: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Atividades

Page 94: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Agenda Programação Orientada a Objeto (POO) Conceitos sobre POO

Pilares da POO Objeto Classe Construtores Troca de Mensagens

Pilares da POO Encapsulamento Composição Herança

Page 95: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Herança

Page 96: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

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

classe herdar todos os atributos e métodos de outra classe.

Page 97: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Herança Como exemplo, observe a Figura a seguir.

Page 98: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Herança Considere capacidade como um atributo da classe

Transporte, que indica a quantidade de pessoas que o transporte em questão pode transportar.

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

cor, número de portas e placa como atributos da classe Automóvel.

A Figura apresenta um exemplo de Herança, onde: As classes Aquático, Terrestre e Aéreo herdam da

classe Transporte. A classe Barco herda da classe Aquático. A classe Automóvel herda de Terrestre. E, finalmente, Avião de Aéreo.

Page 99: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Herança Toda classe que herda de uma outra, acaba

herdando também os seus atributos e métodos.

Por exemplo: A classe Transporte possui um atributo chamado

capacidade.  A classe Aquático, como ela herda de

Transporte, pode-se dizer que também possui o atributo capacidade.

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

Page 100: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

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

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

Respondendo: a classe Terrestre possui dois atributos: capacidade (de Transporte) e número de rodas. A classe Automóvel possui cinco atributos: capacidade (de Transporte), número de rodas (de Terrestre), cor, número de portas e placa.

Page 101: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Herança Quanto mais alta classe na hierarquia, mais

ela tende a ser abstrata, ou menos definida, menos atributos e métodos. Isso garante que a classe tenha mais chance de ser

reusada por outras classes.

Entendeu? Não. Suponha que a classe Transporte, além do

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

Nesse caso, não seria interessante nem faria sentido para a classe Aquático herdar os atributos de Transporte.

Page 102: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

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

que mais classes mais Abstratas e Concretas.

Na Generalização, há classes mais genéricas e abstratas disponíveis, as quais podem ser usadas para outras descenderem delas.

Já a Especialização, há classes que estão numa posição inferior na hierarquia possuem estado e comportamento mais especializados.

Page 103: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

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

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

Classes em posição superior como Transporte, representam generalizações de classes em posições inferiores (Automóvel, Terrestre).

Page 104: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Herança Múltipla e Simples Herança Múltipla: é a capacidade de uma

classe possuir mais de uma superclasse e herdar os atributos e métodos de todas as superclasses. Para simular a herança múltipla em Java, usa-se

Interfaces.

Herança Simples: Cada classe pode ter apenas uma superclasse. Na linguagem Java usa-se a palavra reservada

extends para declarar que uma classe é herdeira de outra.

Page 105: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

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.

 

Page 106: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Herança em Java Em Java a palavra-chave extends é usada

para indicar que uma dada classe herda de outra.

Crie um projeto Java denominado Herança. Crie as classes abaixo.

Page 107: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Herança em Java

Page 108: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Herança em Java

Page 109: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Herança em Java

Page 110: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Herança em Java

Page 111: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Atividade Crie uma classe chamada ExercicioHeranca. Implemente as classes com os métodos

Animal CalculadoraSimples (somar, subtrair)

float somar(float a, float b); float subtrair(float a, float b);

CalculadoraComplexa (raiz) float raiz(float a);

Page 112: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

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.

Page 113: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  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.

Page 114: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Herança II A Herança e o Protected Tipos de modificadores de acesso: public,

private e protected. Esse último, ficou para explicar melhor.

O modificador protected determina que apenas as classes filhas de uma determinada classe poderão ter acesso aos atributos e métodos declarados com esse modificador.

Page 115: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Herança II Veja o exemplo

abaixo:

Substituição do private pelo pretected

Page 116: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Herança II Adicione um método na classe Automóvel.

Esse método faz acesso aos atributos protected capacidade e numRodas, definidos nas classes Transporte e Terrestre, respectivamente.

Observe que tais atributos são acessados e usados livremente no método imprimeDadosAutomovel().

Page 117: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Herança II

Page 118: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Herança II O programa abaixo mostra uma tentativa

frustrada de acesso aos atributos capacidade e numRodas herdados pela classe Automóvel, dentro de um método main().

Page 119: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Herança II

Calma! Se não deu erro, tente colocar em pacotes diferentes. Veja os próximos slides.

Page 120: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Herança II O seu não deu erro? Coloque em pacotes

diferentes.

Page 121: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Herança II A Herança e o super

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

Ela é usada nos construtores.

Page 122: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Herança II

Page 123: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Herança II

Page 124: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

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.

Page 125: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

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.

Page 126: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Herança II Um pergunta: será que a Herança também

permite o uso de outros métodos diferentes dos get e set para as classes descendentes?

A resposta é sim, como vimos anteriormente no método imprimeDadosAutomovel(). Se um método estiver com modificador private,

esse método não estará acessível para classes filhas.

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

Page 127: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

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.

Page 128: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Atividades

Page 129: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

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

Page 130: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Polimorfismo O poliformismo deriva da palavra polimorfo,

que significa multiforme, ou que pode variar a forma.

Para a POO, polimorfismo é a habilidade de objetos de classes diferentes responderem a mesma mensagem de diferentes maneiras. Ou seja, várias formas de responder à mesma mensagem.

Page 131: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Polimorfismo

Page 132: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Polimorfismo Vejamos o seguinte exemplo:

um dono de uma fábrica de brinquedos solicitou que seus engenheiros criassem um mesmo controle remoto para todos os brinquedos de sua fábrica.

A única restrição era que cada brinquedo atendesse aos comandos específicos definidos pelo controle.

Page 133: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Polimorfismo

Page 134: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Polimorfismo Assim quando o brinquedo recebe o sinal

MOVER, ele se move de acordo com a sua função. Para o avião, mover significa VOAR; Para o barco significa NAVEGAR, e Para o automóvel CORRER.

Observe que os brinquedos respondem ao mesmo sinal de formas diferentes.

Page 135: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Polimorfismo

O Polimorfismo permite que diferentes objetos (avião, barco, automóvel) respondam uma mesma mensagem (mover) de formas diferentes (voar, navegar e correr).

Page 136: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Polimorfismo Tipos de polimorfismo O Polimorfismo pode ser classificado de três

maneiras: Polimorfismo de Sobrecarga Polimorfismo de Sobreposição Polimorfismo de Inclusão

Page 137: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Polimorfismo Polimorfismo de Sobrecarga

Permite que um método de determinado nome tenha comportamentos distintos, em função de diferentes parâmetros que ele recebe. Cada método difere no número e no tipo de parâmetros.

Page 138: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

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

do polimorfismo de sobrecarga.

Page 139: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Polimorfismo A sobrecarga e os construtores

O polimorfismo de sobrecarga normalmente acontece sobre os métodos construtores, pois é comum para uma classe ter várias maneiras de instanciá-la.

O programa abaixo ilustra um exemplo de polimorfismo de sobrecarga nos construtores da classe Pessoa.

Page 140: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

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

o mesmo nome da classe. Entretanto, cada um deles recebe um número diferente de parâmetros.

Page 141: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Polimorfismo Polimorfismo de Sobreposição

É a redefinição de métodos em classes descendentes. Ou seja, um método de uma classe filha com o mesmo nome de um método de uma classe mãe irá sobrepor esse último.

Vejamos o exemplo.

Page 142: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Polimorfismo O polimorfismo de sobreposição em Java

Considere que a classe Brinquedo possui como descendentes as classes Carro, Avião e Barco, conforme ilustra a Figura.

Observe que as classes filhas sobrepõem o método mover() da classe Brinquedo.

Page 143: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Polimorfismo Vejamos então

como ficam essas classes codificadas em Java.

Page 144: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Polimorfismo Considerando o método mover() de cada

classe filha, como poderíamos chamar o método mover() do brinquedo (classe) correto? Ou seja, como o ControleRemoto saberá que método mover ele deve chamar se ele tem disponível três tipos de mover diferentes (um para cada brinquedo)?

Page 145: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Polimorfismo Vamos ver inicialmente como fica a

implementação do Controle Remoto.

Page 146: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

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.

Page 147: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Atividade Implemente as classes da hierarquia da classe

Figura Geometrica mostrada na Figura abaixo em Java, aplicando o polimorfismo de sobreposição para o método desenha().

Em seguida, crie uma classe Principal com um método main que cria um objeto de cada uma das classes e chama seus respectivos métodos desenha().

Page 148: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Polimorfismo Polimorfismo de Inclusão

No exemplo visto anteriormente, em que na classe Principal, foi criado um objeto do tipo Carro e outro do tipo ControleRemoto, utilizou-se o polimorfismo de inclusão.

Isso foi feito substituindo a classe Brinquedo pela classe Carro dentro da classe ControleRemoto.

Page 149: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Polimorfismo Veja a Figura.

Page 150: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

Polimorfismo Observe que a classe ControleRemoto está

relacionada com a classe Brinquedo, pois possui um atributo do tipo Brinquedo.

Mas, como as classes Carro, Avião e Barco são do tipo Brinquedo, elas podem substituir a classe Brinquedo em qualquer método que a utilize.

A capacidade do objeto (brinquedo) do tipo Brinquedo da classe ControleRemoto de receber qualquer um objeto de subclasses da classe Brinquedo é que caracteriza o polimorfismo de inclusão.  

Page 151: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

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

seguintes conceitos em Java. Static Interface, Implements e Abstract

Page 152: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

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/

Page 153: Programação Orientada a Objetos JAVA - NETBEANS. Agenda  Programação Orientada a Objeto (POO)  Conceitos sobre POO  Pilares da POO  Objeto  Classe.

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.