04 - Aula - Orientação A Objetos

Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1de 148

Linguagem de Programação

Orientada a Objetos

Profa. Joyce Miranda


Introdução
 Paradigma Orientado a Objetos (OO)
 Análise, Projeto e Programação
 Baseado na composição e interação entre diversas unidades de
software chamadas de objetos.
 Propõe a redução da distância entre a modelagem
computacional e o mundo real.
 O ser humano se relaciona com o mundo através de conceitos de
objetos.
 Identificação dos objetos;
 Classificamos de acordo com suas características.

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

INDIVÍDUO REALIDADE ESTRUTURA

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.

Domínio Acadêmico Domínio Locadora

9
Conceitos - Objetos
 Os objetos podem ser agrupados de acordo com as suas
semelhanças.

Domínio Acadêmico

Professor Fulano Curso Informática


Professor Ciclano Curso Edificações
Professor Beltrano Curso Turismo

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.

 Entidade Fundamental: CONTA

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

 Utiliza-se o ponto (.) para acessar os atributos e métodos de


um objeto.
27
Pratique!
 Implemente a classe Pessoa.
 Crie uma classe de execução onde deverá ser criado um objeto
do tipo Pessoa.
 Defina valores paras os atributos do objeto criado.
 Imprima uma mensagem com os valores dos atributos.

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

Declaração implícita do Construtor

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.

 A lista de atributos não precisa ser informada se não há


passagem de argumentos.
 Caso haja, os argumentos devem ser informados com seu tipo e
nome, separados por vírgula se houver mais de um.

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

//recuperando ano atual

Calendar c = Calendar.getInstance();

int anoAtual = c.get(Calendar.YEAR);

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

Tem acesso a membros “public” da Classe Z

Não tem acesso a membros “public” da Classe Z

68
Classes na Prática
 Modificadores de Acesso
 Private
Pacote A Pacote B

Classe X Classe Z

Classe Z2
Classe Z1
Classe Y

Tem acesso a membros “private” da Classe Z

Não tem acesso a membros “private” da Classe Z

69
Classes na Prática
 Modificadores de Acesso
 Package
Pacote A Pacote B

Classe X Classe Z

Classe Z2
Classe Z1
Classe Y

Tem acesso a membros “package” da Classe Z

Não tem acesso a membros “package” da Classe Z

70
Classes na Prática
 Modificadores de Acesso
 Protected
Pacote A Pacote B

Classe X Classe Z

Classe Z2
Classe Z1
Classe Y

Tem acesso a membros “protected” da Classe Z

Não tem acesso a membros “protected” da Classe Z

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)

Não deve ter setter

 Gerar setters indevidos:


 Quebra o encapsulamento
 Vai permitir que outras classes definam regras de negócio a partir dos setters
 A mesma regra de negócio pode ficar espalhada em diversas classes do projeto
 As classes devem ser auto-contidas
 Regras de negócio devem se restringir a própria classe
81
Exemplo de
Classes na Prática encapsulamento mal feito

O atributo valorTotal depende de uma regra de negócio associada.


Classe de execução:

Regra de negócio definida


durante a atribuição de valores

82
Exemplo de
Classes na Prática encapsulamento mal feito

 Mudanças nas regras de negócios causam alteração por todo o


projeto dificultando a manutenção.

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

 Crie o código para ler, percorrer e exibir um array de objetos


do tipo Conta

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

 Retornando o tamanho da lista

94
Collections API
 Listas:
 import java.util.List;
 import java.util.ArrayList;
 Verificando se valor existe

 Recuperando o valor de uma posição

 Atualizando valor de uma posição

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

 Exemplo de chamada na classe de execução

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

 Crie uma lista de usuários


 Adicionar valores à lista
 Verificar se um usuário foi adicionado à lista
 Ordene a coleção pelo nome do usuário e imprima o resultado
107
Exercício 10

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.

O que guarda a variável


do tipo Funcionário?

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.

 Princípio a partir do qual objetos derivados de uma mesma classe


são capazes de invocar métodos que, embora apresentem a mesma
assinatura, se comportam de maneira diferente.

124
Polimorfismo Dinâmico
 Se dá pela redefinição/sobrescrita (mesma assinatura) de métodos
herdados

 O comportamento executado pelo método será definido em tempo


de execução...
125
Polimorfismo Dinâmico
 A invocação de um método é decidida em tempo de execução
 Primeiro procura-se pelo objeto em memória, depois é decidido qual
método será executado.
 Sempre relaciona o objeto com a sua classe original e não a que está
sendo usada para referenciá-la.

126
Polimorfismo Dinâmico
 Qual a utilidade disso?

 não importa como nos referenciamos a um objeto, o método que será


invocado é sempre o que é dele.
127
Exercício 13
 HERANÇA + Polimorfismo
Funcionario
calcSalarioLiquido =
salarioBruto – desconto

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

abstract O elemento é virtual e deve ser X X ----- ------


redefinido em sub-classes.

Se uma classe possuir um método


declarado como “abstract”, ela deve ser
declarada como “abstract”.

Você não pode implementar o método


abstract em uma classe abstrata, mas
deve implementá-lo em qualquer sub-
classe.

A classe abstrata não pode ser


instanciada

139
Modificadores
Tipo Finalidade Classe Método Atributo Trecho
Código

Final Significa que o elemento não pode ser X X X ______


alterado.

Uma classe “final” não pode ter sub-


classes (não pode ser herdada).

Um método “final” não pode ser


redefinido (sobrescrito) e uma variável
“final” não pode ser alterada.

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.

Se aplicado a um método, este


passa a ser também da Classe e
somente pode acessar suas
variáveis Estáticas.

Se aplicado a um trecho de código,


este será executado no momento
em que a Classe for carregada pelo
JVM.

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

Você também pode gostar