04 - Aula - Orientação A Objetos
04 - Aula - Orientação A Objetos
04 - Aula - Orientação A Objetos
Orientada a Objetos
2
Introdução
Paradigma Orientado a Objetos (OO)
Identificação e Classificação dos Objetos
Dogs Cats
3
Introdução
Programação Orientada a Objetos (POO)
Organização do código sob a ótica de classes que definem
atributos (dados) e métodos (comportamento) que são
comuns a objetos de um mesmo tipo.
Classes
Atributos (Dados)
Métodos (Funções)
4
Introdução
Programação Programação
Estruturada Orientada a Objetos
Módulos/Funções
Classes
elementos ativos
Atributos (Dados)
Dados
Métodos (Funções)
repositórios passivos
5
Introdução
Programação Orientada a Objetos (POO)
Vantagens
Organização do código;
Reutilização de código;
Redução do tempo de manutenção de código;
Redução de complexidade através da melhoria do grau de abstração;
Ampla utilização comercial.
6
Introdução
Programação Orientada a Objetos (POO)
Está sedimentada sobre quatro pilares derivados do
princípio da abstração.
7
Introdução
Programação Orientado a Objetos (OO)
Baseia-se na abstração.
Observação da realidade (domínio) e identificação das
estruturas consideradas relevantes para a descrição de
um domínio.
CARRO
COR: VERDE
QTDE RODAS: 4
QTDE PASSAGEIROS: 1
NUMERO: 1
AÇÃO: CORRE, ACELERA
8
Conceitos - Objetos
Um objeto é um conceito, uma abstração, algo com limites e
significados nítidos em relação ao domínio de uma aplicação.
Para cada sistema devem ser identificados objetos de acordo
com o contexto no qual está inserido e de acordo com as
funcionalidades desejadas.
9
Conceitos - Objetos
Os objetos podem ser agrupados de acordo com as suas
semelhanças.
Domínio Acadêmico
Aluno Alfa
Aluno Beta
Aluno Gama
10
Conceitos - Classes
Objetos podem ser agrupados em classes
Uma classe é um modelo que define os atributos e os
métodos comuns a todos os objetos do mesmo tipo.
11
Conceitos - Classes
Exemplos de classes por domínio
Domínio Acadêmico
12
Conceitos - Classes
Exemplos de classes por domínio
Domínio Locadora
13
Conceitos - Classes
Uma classe é a descrição de um grupo de objetos com
propriedades semelhantes (atributos), mesmos
comportamentos (métodos) e mesmos relacionamentos com
outros objetos de outras classes.
14
Conceitos - Classes
Atributos
São as características que vão ajudar a representar um objeto.
Definem a estrutura de dados que vai representar a classe.
Quais atributos poderiam ser definidos para as classes abaixo?
15
Conceitos - Classes
Métodos
São as tarefas/ações que o objeto pode realizar.
Quais métodos poderiam ser definidos para as classes abaixo?
16
Conceitos - Classes
Praticando
Proponha pelo menos três classes, com seus
respectivos atributos, métodos e relacionamentos
para uma aplicação que esteja inserida no
domínio de Gerenciamento Bancário.
Domínio Bancário
17
Conceitos - Objetos
Instância
Um sistema pode conter um ou mais objetos ativos.
Cada objeto ativo no sistema em particular é chamado de
instância.
As diferentes instâncias possuem seu próprio estado.
18
Objetos na Prática
Um objeto, nada mais é do que uma instância de um
tipo de dado específico (classe).
19
Objetos na Prática
As variáveis não guardam os objetos, mas sim uma
referência para a área de memória onde os objetos
estão alocados.
20
Objetos na Prática
Imagine, agora, duas variáveis diferentes, c1 e c2,
ambas referenciando o mesmo objeto. Teríamos,
agora, um cenário assim:
21
Conceitos - Classes
Considere um sistema para gerenciar um banco.
22
Conceitos - Classes
O que toda conta deve possuir?
Número da conta
Nome do titular da conta
Saldo
23
Conceitos - Classes
Projeto de Conta
Definição da Classe
Identificação dos Atributos
24
Conceitos - Classes
Classes na Prática
25
Conceitos - Classes
Usando a Classe
Criar uma classe de execução que implemente o método main
Instanciar -> criar objeto
26
Conceitos - Classes
28
Pratique!
Implemente a classe Retangulo.
Crie uma classe de execução para criar o objeto do tipo
Retangulo.
Defina valores paras os atributos do objeto criado.
Os valores dos atributos do objeto deverão ser definidos
dinamicamente por meio da interação com o usuário.
29
Pratique!
Para o contexto de Gestão Escolar, seguindo o padrão da UML,
modele duas classes, com pelo menos três atributos cada.
Implemente as classes.
Crie uma única classe de execução onde deverão ser criados objetos
dos tipos das classes criadas.
Defina valores paras os atributos dos objetos.
Os valores dos atributos do objeto deverão ser definidos dinamicamente
por meio da interação com o usuário.
Imprima uma mensagem com os valores dos atributos.
30
Classes na Prática
Relacionamento entre classes
Associação
Descreve um vínculo entre duas classes.
Determina que a instância de uma classe está de alguma
forma ligada a instâncias da outra classe.
31
Classes na Prática
Relacionamento entre classes
Associação
Multiplicidade
32
Classes na Prática
Relacionamento entre classes
Associação
Multiplicidade
33
Pratique!
Implemente as classes Produto e Categoria.
Crie uma única classe de execução onde deverão ser criados
objetos dos tipos das classes criadas.
Defina valores paras os atributos dos objetos criados.
Os valores dos atributos do objeto deverão ser definidos
dinamicamente por meio da interação com o usuário.
34
Classes na Prática
Relacionamento entre classes
Agregação
Associação Todo-Parte
O objeto-parte pode existir sem o objeto-todo
O objeto-parte tem um relacionamento não exclusivo
(compartilhado) com o objeto-todo.
objeto-todo objeto-parte
35
Pratique!
Implemente as classes Equipe e
Aluno.
Crie uma única classe de execução
onde deverão ser criados objetos dos
tipos das classes criadas.
Defina valores paras os atributos dos
objetos criados.
Os valores dos atributos do objeto
deverão ser definidos
dinamicamente por meio da
interação com o usuário.
36
Classes na Prática
Relacionamento entre classes
Composição
Associação Todo-Parte
O objeto-parte não pode existir sem o objeto-todo.
O objeto-parte tem um relacionamento exclusivo com o
objeto-todo.
objeto-todo objeto-parte
37
Pratique!
Implemente as classes Compra e
ItemCompra.
Crie uma única classe de execução
onde deverão ser criados objetos dos
tipos das classes criadas.
Defina valores paras os atributos dos
objetos criados.
Os valores dos atributos do objeto
deverão ser definidos
dinamicamente por meio da
interação com o usuário.
38
Tarefa de Implementação 1!
Para o contexto de Gestão Escolar, seguindo o padrão da UML,
modele pelo menos três classes que se relacionem entre si,
com pelo menos três atributos cada. Modele pelo menos um
relacionamento de agregação e um relacionamento de
composição.
Implemente as classes.
Crie uma única classe de execução onde deverão ser criados objetos
dos tipos das classes criadas.
Defina valores paras os atributos dos objetos.
Os valores dos atributos do objeto deverão ser definidos dinamicamente
por meio da interação com o usuário.
Imprima uma mensagem com os valores dos atributos.
39
Classes na Prática
Construtores
Quando usamos a palavra chave new, estamos
construindo um objeto.
Sempre quando o new é chamado, ele executa o
construtor da classe.
Fazem a função de iniciação do objeto criado.
Chamada do Construtor
40
Classes na Prática
Construtores
O construtor da classe é um bloco declarado com o
mesmo nome que a classe.
Se nenhum construtor for declarado, um construtor
default será criado.
Chamada do Construtor
41
Contrutores
42
Contrutores
Alteração do Construtor
43
Classes na Prática
Construtores
44
Pratique!
Construtor
Classe Modelo + Classe de Execução
45
Classes na Prática
Métodos
A utilidade dos métodos é a de separar uma determinada função
em pedaços menores.
tipo de retorno
Pode ser um tipo primitivo ou um tipo de um classe.
Caso o método não retorne nada, ele deve ser void.
46
Classes na Prática
Métodos
47
Classes na Prática
Métodos
Retorno dos Métodos
A palavra reservada return causa o retorno do método.
Quando os métodos são declarados com o tipo de retorno void, então o
método não pode e nem deve retornar nada.
Os métodos que retornam algum valor, devem retornar dados do tipo de
retorno declarado, ou de tipos compatíveis.
48
Classes na Prática
Métodos
Retorno dos Métodos
49
Conceitos - Classes
Que ações podem ser feitas sobre a Conta?
Realizar o saque de um valor
Depositar um valor
50
Conceitos - Classes
Projeto de Conta
Identificação dos Métodos
51
Conceitos - Classes
Métodos
52
Conceitos - Classes
Chamando Métodos
53
Pratique!
Método
Classe Modelo e Classe de Execução
Implemente o método “Depositar”
54
Pratique!
Método
Classe Modelo e Classe de Execução
Calendar c = Calendar.getInstance();
55
Pratique!
Método
Classe Modelo e Classe de Execução
56
Pratique!
Método
Classe Modelo e Classe de Execução
57
Classes na Prática
Sobrecarga – Overload
Ocorre quando a classe possui diferentes métodos com o
mesmo objetivo final, mantendo o mesmo nome, se
diferenciando pela quantidade ou tipo de parâmetros
recebidos.
58
Classes na Prática
Sobrecarga
de métodos
59
Classes na Prática
Sobrecarga de Construtores
60
Pratique!
Método + Sobrecarga
Classe Modelo e Classe de Execução
61
Classes na Prática
Visões de um objeto
Interna
Atributos e métodos da classe que o define
Externa
Serviços que o objeto proporciona e como ele interage com outros
objetos
62
Classes na Prática
Visões de um objeto
Externamente, um objeto deve ser visto como uma entidade
encapsulada.
Os objetos devem expor os serviços oferecidos, sem expor como esses foram
implementados.
63
Classes na Prática
Encapsulamento
Objetivos
Garantir que detalhes internos de implementação de uma classe
permaneçam ocultos aos objetos.
Evitar que dados referentes a um objeto tenham acesso externo
indevido.
Garantir que a definição das regras de negócio se restrinjam à
própria classe.
64
Classes na Prática
Encapsulamento
Segundo o encapsulamento, os atributos não
podem ser acessados/alterados diretamente.
Aqui entra a importância dos modificadores de
acesso.
65
Classes na Prática
Modificadores de Acesso
Determinam a visibilidade da classe e de seus membros
(atributos e métodos).
Ao todo são quatro modificadores principais
Public
Private
Protected
Default/Package – (não é atribuído modificador)
66
Classes na Prática
Modificadores de Acesso
67
Classes na Prática
Modificadores de Acesso
Public
Pacote A Pacote B
Classe X Classe Z
Classe Z2
Classe Z1
Classe Y
68
Classes na Prática
Modificadores de Acesso
Private
Pacote A Pacote B
Classe X Classe Z
Classe Z2
Classe Z1
Classe Y
69
Classes na Prática
Modificadores de Acesso
Package
Pacote A Pacote B
Classe X Classe Z
Classe Z2
Classe Z1
Classe Y
70
Classes na Prática
Modificadores de Acesso
Protected
Pacote A Pacote B
Classe X Classe Z
Classe Z2
Classe Z1
Classe Y
71
Classes na Prática
Encapsulamento
Passos para criar
Modificar o acesso aos atributos para private
Criar métodos getter e setter apenas se houver
necessidade.
72
Classes na Prática
Encapsulamento
Métodos get
Responsável por retornar o valor de uma variável
tipoAtributo getAtributo(){
return this.atributo;
}
Métodos set
Responsável por atribuir o valor a uma variável
void setAtributo(tipoAtributo atributo) {
this.atributo = atributo;
}
73
Classes na Prática
Encapsulamento
Exemplo
74
Classes na Prática
Encapsulamento
Tornar atributos privados
75
Classes na Prática
Encapsulamento
Não será mais possível acessar os atributos diretamente.
!!ERRO!!
76
Classes na Prática
Encapsulamento
Gerar getter e setter apenas para os atributos necessários
77
Classes na Prática
Encapsulamento
Acesso correto
78
Exercício 01
Encapsulamento
79
Exercício 02
Encapsulamento
80
Classes na Prática
Encapsulamento
Observações
Atributos com regra de negócio associada não devem possuir métodos
setters.
q.area = lado*lado
quadrado.setArea(lado*lado)
82
Exemplo de
Classes na Prática encapsulamento mal feito
83
Exemplo de
Classes na Prática encapsulamento mal feito
Classe de execução:
84
Classes na Prática
Encapsulamento – Solução Ideal
85
Classes na Prática
Encapsulamento
Quando sabemos O QUÊ um método faz mas não sabemos
exatamente COMO ele faz, dizemos que esse
comportamento está encapsulado!
86
Classes na Prática
Encapsulamento – Solução Ideal
A partir do momento que outras classes não sabem como a
classe principal faz o seu trabalho, significa que as mudanças
ocorrerão apenas em um lugar!
87
Exercício 03
Encapsulamento
88
Exercício 04
Encapsulamento
89
Exercício 05
Encapsulamento
90
Array de Referências
91
Limitações do Array
Não podemos redimensionar um array;
Complexidade para saber quantos elementos foram inseridos?
Complexidade para saber quais posições estão livres?
92
Collections API
Conjunto de implementações que representam estruturas
de dados avançadas.
93
Collections API
Listas:
import java.util.List;
import java.util.ArrayList;
Criando
Adicionando
94
Collections API
Listas:
import java.util.List;
import java.util.ArrayList;
Verificando se valor existe
95
Collections API
Listas:
import java.util.List;
import java.util.ArrayList;
Percorrendo lista
96
Exercício 06
97
Exercício 07
Criar uma lista de números
Adicionar números à lista
Mostrar quantidade de números presentes na lista
Listar todos os números adicionados
Exibir a soma total dos números da lista
98
Collections API
Listas de Referências
99
Exercício 08
Criar uma lista de clientes
Adicionar clientes à lista
Mostrar a quantidade de clientes presentes na lista
Listar todos os clientes presentes na lista
Exibir a renda média dos clientes presentes na lista
100
Collections API
Buscando um valor na lista
Método contains()
101
Collections API
Buscando um valor na lista
Método contains()
Como verificar se um cliente já foi adicionando à lista
102
Collections API
Buscando um valor na lista
Método contains()
Incluir no corpo da classe Cliente uma sobrescrita para o método
equals()
103
Collections API
Ordenando
Método sort()
104
Collections API
Ordenando
Método sort()
Como ordenar uma lista de contas?
105
Collections API
Ordenando
Método sort()
106
Exercício 09
108
Conceitos - Herança
Permite criar novas classes a partir de classes já existentes.
Reflete um relacionamento de especialização
SuperClasse
SubClasses
109
Conceitos - Herança
Todos os métodos e atributos (public e protected) são
herdados pelas subclasses
Os construtores não são herdados.
Herança na Prática
Em Java, a herança é conseguida através da palavra extends;
111
Herança na Prática
112
Herança na Prática
Passos
113
Herança na Prática
Passos
114
Herança na Prática
Passos
115
Herança na Prática
O construtor da superclasse é chamado automaticamente, se
outra chamada não for feita.
A palavra super referencia a superclasse.
116
Herança na Prática
Modificando construtor
117
Herança na Prática
Modificando construtor
118
Herança na Prática
Modificando construtor
119
Herança na Prática
Modificando construtor
120
Exercício 11
HERANÇA
calcValorContrato() =
salario * tempoContrato
121
Exercício 12
HERANÇA
calcValorPedido() =
Soma dos valores
de todos os itens do
pedido
122
Polimorfismo Dinâmico
Definições
Capacidade de um objeto poder ser referenciado de várias formas.
123
Polimorfismo Dinâmico
Definições
Denota uma situação na qual objetos de um mesmo tipo podem se
comportar de formas distintas, dependendo do seu tipo de criação.
124
Polimorfismo Dinâmico
Se dá pela redefinição/sobrescrita (mesma assinatura) de métodos
herdados
126
Polimorfismo Dinâmico
Qual a utilidade disso?
Gerente
calcSalarioLiquido =
salarioBruto – desconto +
bonus
Funcionario
pagarSalario = monta Msg:
“Depositando {salarioLiquido}
na conta de {nomeFuncionario}”
128
Polimorfismo – Classes Abstratas
Conceito aplicado quando a classe for apenas um ponto de
referência para as subclasses.
Se a classe possuir um método abstrato ela obrigatoriamente
deverá ser definida como abstrata.
Classes abstratas não podem ser instanciadas
129
Polimorfismo – Classes Abstratas
130
Exercício 14
HERANÇA + Polimorfismo (Abstract)
131
Interface
As interfaces atuam como um contrato que define
parte do comportamento de outras classes.
Uma interface pode definir uma série de métodos,
mas nunca conter implementação deles.
Expõe o que o objeto deve fazer, e não como ele faz,
nem o que ele tem.
As classes podem implementar mais de uma
interface.
132
Interface
133
Interface
Exemplo Classe de Execução
ExecFigura
134
Interface
135
Interface
Exemplo Classe de Execução
ExecCadastroUsuario
136
Exercício 15
Herança + Interface
137
Herança x Interface
138
Polimorfismo – Classes Abstratas
Modificador: abstract
Tipo Finalidade Classe Método Atributo Trecho Código
139
Modificadores
Tipo Finalidade Classe Método Atributo Trecho
Código
140
Modificadores
Classe final
Uma classe “final” não pode possuir sub-classes. É
o contrário de uma classe Abstrata.
141
Modificadores
Método final
Um método “final” não pode ser redefinido
(override). Redefinir um método é reescrevê-lo em
sub-classes. Por exemplo:
142
Modificadores
Variáveis final
São atributos de uma classe que não mudam de valor. O
modificador final indica que o atributo é imutável
143
Modificadores
Tipo Finalidade Classe Método Atributo Trecho
Código
Static Se aplicado a uma variável, significa ______ X X X
que ela pertence à classe e não à
instância do Objeto.
144
Modificadores
Static
Atributos Estáticos
Atributos estáticos não precisam de uma instância da
classe para serem usados.
Eles podem ser acessados diretamente
Eles são compartilhados por todas as instâncias da
classe (cuidado ao usá-los)
Como se fossem variáveis globais
145
Modificadores
Static
Atributos Estáticos
146
Modificadores
Static
Métodos Estáticos
Não precisam de uma instância da classe para serem
usados .
Métodos estáticos NÃO podem chamar métodos não-
estáticos sem uma instância.
147
Modificadores
Static
148