aula 3.ppt

36
Instrutor Daniel Bernardo Programação Orientada a Objetos com Java

Upload: daniel-gustavo-bernardo

Post on 18-Aug-2015

35 views

Category:

Software


2 download

TRANSCRIPT

Page 1: Aula 3.ppt

Instrutor Daniel Bernardo

Programação Orientada a Objetos com Java

Page 2: Aula 3.ppt

Instrutor Daniel Bernardo

Princípios de Orientação a Objetos

• Construímos Software para resolver problemas

• Pessoas tem problemas

• Logo, construímos Software para pessoas

Page 3: Aula 3.ppt

Instrutor Daniel Bernardo

Princípios de Orientação a Objetos

Um bom Software não apenas resolve

um problema imediatamente, como

também está projetado para suportar

as inevitáveis mudanças solicitadas

pelas pessoas.

Page 4: Aula 3.ppt

Instrutor Daniel Bernardo

Princípios de Orientação a Objetos

• Validação de CPF

– Espalhado por várias partes do sistema;

• Adição de novas funcionalidades

– Validar maior idade;

Page 5: Aula 3.ppt

Instrutor Daniel Bernardo

Princípios de Orientação a Objetos

• Sistema para banco

– A classe Conta

Page 6: Aula 3.ppt

Instrutor Daniel Bernardo

Princípios de Orientação a Objetos

• Sistema para banco

– A classe Cliente

Page 7: Aula 3.ppt

Instrutor Daniel Bernardo

Princípios de Orientação a Objetos

• Usando nossa Classe

– Devemos utilizar nossa classe em forma de Objeto;

– Um objeto é uma instância de uma classe;

– Para instanciar um objeto de uma classe, usa-se a palavra new;

– Se você tentar utilizar uma variável do tipo da nossa classe, sem

utilizar o new, obterá um NullPointerException;

Page 8: Aula 3.ppt

Instrutor Daniel Bernardo

Princípios de Orientação a Objetos

• Métodos:

Page 9: Aula 3.ppt

Instrutor Daniel Bernardo

Pacotes

• Quando um programador utiliza as classes feitas por outro surge um problema clássico: como escrever duas classes com o mesmo nome?

• Por exemplo, pode ser que a minha classe de Data funcione de um certo jeito e a classe de Data de um colega de outro jeito. Pode ser que a classe de Data de uma biblioteca funcione ainda de terceira maneira.

• Os diretórios estão diretamente relacionados aos chamados pacotes e costumam agrupar classes de funcionalidade parecida.

• Um pacote pode conter nenhum, um ou mais subpacotes e/ou nenhuma,uma ou mais classes dentro dele

Page 10: Aula 3.ppt

Instrutor Daniel Bernardo

Pacotes

• Em Suma:

– Um pacote ou package na tecnologia Java nada mais é do que

um conjunto de classes localizadas na mesma estrutura

hierárquica de diretórios.

– Usualmente, são colocadas em um pacote classes

relacionadas, construídas com um propósito comum para

promover a reutilização de código:

• validação de CPF e CNPJ, operações com data,

manipulação de vetores, cálculos matemáticos como

médias e percentuais, etc;

Page 11: Aula 3.ppt

Instrutor Daniel Bernardo

API Java

Page 12: Aula 3.ppt

Instrutor Daniel Bernardo

Padrão de nomenclatura

• br.com.nomedaempresa.nomedoprojeto.subpacote

• br.com.nomedaempresa.nomedoprojeto.subpacote2

• br.com.nomedaempresa.nomedoprojeto.subpacote2.subpacote3

• Os pacotes só possuem letras minúsculas, não importa quantas palavras estejam contidas nele.

• Esse padrão existe para evitar ao máximo o conflito de pacotes de empresas diferentes.

Page 13: Aula 3.ppt

Instrutor Daniel Bernardo

Import

Full Qualified Name

Esse é o verdadeiro nome de uma classe, por isso que duas classes X em pacotes diferentes não conflitam:

br.com.empresa.pacote.Classe

Utiliza-se o import para declaração de classes que são referenciadas no arquivo fonte mas que não pertencem ao pacote onde este arquivo se encontra.

Podem referenciar:

Outras classes no mesmo projeto

Classes da API Java, como por exemplo java.util.List

Classes contidas nas bibliotecas utilizada pelo projeto, ou seja, nos arquivos *.jar referenciados no classpath do projeto

Page 14: Aula 3.ppt

Instrutor Daniel Bernardo

Import

• Classes essencias para o funcionamento de qualquer projeto Java, são implicitamente importadas na Classe.

• Por isso que não é necessário fazer o import das classes System e String por exemplo.

Page 15: Aula 3.ppt

Instrutor Daniel Bernardo

Modificadores de Acesso

• private: A única classe capaz de acessar os atributos, construtores e

métodos privados é a própria classe. Classes não podem ser private, mas

atributos, construtores e métodos sim.

• protected: Aquilo que é protected pode ser acessado por todas as classes

do mesmo pacote e por todas as classes que a estendam. Somente

atributos, construtores e métodos podem ser protected.

• default: (sem nenhum modificador) – Se nenhum modificador for utilizado,

todas as classes do mesmo pacote têm acesso ao atributo, construtor,

método ou classe.

• public: Todas as classes podem acessar aquilo que for definido como

public. Classes, atributos, construtores e métodos podem ser public.

Page 16: Aula 3.ppt

Instrutor Daniel Bernardo

Herança

Page 17: Aula 3.ppt

Instrutor Daniel Bernardo

Herança

Page 18: Aula 3.ppt

Instrutor Daniel Bernardo

Herança

• Regras para Herança no Java:

– Uma classe pode ser Herdada por várias outras

classes;

– Uma classe só pode Herdar uma única classe;

– Membros protected são acessíveis;

– Toda classe herda de Object;

Page 19: Aula 3.ppt

Instrutor Daniel Bernardo

Herança

• Problema 1:

– No fim de ano, todos funcionários recebem uma

bonificação no valor de 10% do salário;

– Exceto os Gerentes, que recebem uma bonificação

de 15%;

Page 20: Aula 3.ppt

Instrutor Daniel Bernardo

Herança

• Problema 2:

– A regra para cálculo da bonificação de gerentes

mudou, agora ela será no mesmo valor percentual

da bonificação dos funcionários mais R$ 1.000,00;

Page 21: Aula 3.ppt

Instrutor Daniel Bernardo

Exercícios

Faça os exercícios 1, 2 e 3 da página 68.

Page 22: Aula 3.ppt

Instrutor Daniel Bernardo

Polimorfismo

• Traduzindo, do grego, ao pé da letra, polimorfismo significa

"muitas formas".

• Essas formas, em nosso contexto de programação, são as

subclasses/objetos criados a partir de uma classe maior,

mais geral, ou abstrata.

• Polimorfismo é a capacidade que o Java nos dá de controlar

todas as formas de uma maneira mais simples e geral, sem

ter que se preocupar com cada objeto especificamente

Page 23: Aula 3.ppt

Instrutor Daniel Bernardo

Polimorfismo

• Uma variável do tipo Funcionario, pode armazenar um

objeto do tipo Funcionario;

• Se gerente é um Funcionario, então uma variável do

tipo Funcionário pode armazenar um objeto do tipo

Gerente;

Page 24: Aula 3.ppt

Instrutor Daniel Bernardo

Polimorfismo

• Qual método o Java invocará?

– De Funcionário?

– De Gerente?

A escolha de qual implementação

será chamada é feita em Tempo

de Execução

Page 25: Aula 3.ppt

Instrutor Daniel Bernardo

Polimorfismo

• O benefício do Polimorfismo é observado quando

utilizamos os tipos como parâmetros dos métodos:

• Problema 3: Criar uma funcionalidade que calcule o

total gasto em bonificações. Considerando todos

funcionarios da empresa. (Funcionario, Gerente e

qualquer outro que houver)

Page 26: Aula 3.ppt

Instrutor Daniel Bernardo

Polimorfismo

• Sistema para faculdade que controle o gasto com

funcionários;

• Relatório que imprima informações do funcionário e

quanto a faculdade gasta com ele;

• Funcionario recebe salário;

• Professor recebe salário + 10,00 hora / aula;

Page 27: Aula 3.ppt

Instrutor Daniel Bernardo

Polimorfismo

Page 28: Aula 3.ppt

Instrutor Daniel Bernardo

Exercícios

• Exercícios 4 e 5 da página 68

Page 29: Aula 3.ppt

Instrutor Daniel Bernardo

Classes Abstratas

Faz sentido existir um objeto Funcionario?

No mundo real, funcionário idealiza um

segmento.

Nós temos Secretárias, Diretores, Gerentes…

Não designamos niguém como Funcionário.

Page 30: Aula 3.ppt

Instrutor Daniel Bernardo

Classes Abstratas

• Quando não queremos receber uma instância desta classe, mas

queremos obter a vantagem do polimorfismo e da herança, utilizamos

classe Abstrata.

• Métodos abstratos:

• Não faz sentido o método getBonificacao() ter uma implementação na

classe Funcionario, já que em nosso sistema, queremos que cada

funcionário específico tenha uma regra de bonificação diferente.

• Deixamos abstrato para utilizar na classe controladora de bonificação.

• Qualquer classe que estender Funcionário, será obrigada a implementar o

método abstrato

Page 31: Aula 3.ppt

Instrutor Daniel Bernardo

Classes Abstratas

• Classe Diretor estende Gerente: não precisa

implementar o método, pos gerente já implementa

• Classe Secretária e Classe SecretariaAdministrativa

que estende Secretária. Classe Secretaria não precisa

implementar o método, já que é uma classe abstrata.

Page 32: Aula 3.ppt

Instrutor Daniel Bernardo

Exercícios

• Página 79.

Page 33: Aula 3.ppt

Instrutor Daniel Bernardo

Interfaces

• Problema: Em um sistema de banco, podem acessar Gerentes e

Diretores;

• Nem todo funcionário tem o método autentica e nem deve ter;

• Uma classe Abstrata FuncionarioAutenticavel resolveria o

problema em partes;

• Surge outro problema: Agora os clientes podem acessar o sistema.

• Jamais faça Herança sem Sentido.

Page 34: Aula 3.ppt

Instrutor Daniel Bernardo

Interfaces

• Interfaces fazem com que classes garantam sempre um

comportamento;

• Cria um contrato que define o que uma classe deve fazer;

• A classe que quiser, pode assinar este contrato e fica obrigada a

implementar o que a Interface define;

• Interfaces expõem o que deve ser feito, e não como deve ser

feito;

• Interfaces deixam o código mais flexível a mudanças;

• Métodos public e abstract;

• Uma classe pode implementar mais que uma Interface;

Page 35: Aula 3.ppt

Instrutor Daniel Bernardo

Exercicio página 89

Page 36: Aula 3.ppt

Instrutor Daniel Bernardo

Exceptions