Introdução
Desde Aristóteles que o ser humano classifica os
objetos do mundo;
Nossa mente é orientada a objetos;
Para desenvolver aplicações e componentes de
qualidade em Java é preciso entender e saber
aplicar princípios de orientação a objetos
Ao programar é possível escrever programas em
Java sem saber usar os recursos da OO.
Prof. Ramiro Victor 2
Introdução
Orientação a objetos é a maneira de programar
que ajuda na organização e resolve muitos
problemas enfrentados pela programação
procedural.
Escrever programas computacionais que usem
classes e objetos é chamado de Programação
Orientada a Objetos ou POO.
Prof. Ramiro Victor 3
Dados 1
Dados 2
Dados 3
Procedimento 1
Procedimento 1
Procedimento 1
Introdução
A responsabilidade de realizar as operações nos
dados está espalhada por todo o código;
É interessante poder concentrar essas
responsabilidades em um lugar só, para não ter
chances de esquecer isso, ou de haver
inconsistência.
Prof. Ramiro Victor 4
Introdução
Para você dirigir um carro, alguém tem de projetar
o carro;
No projeto do carro inclui o projeto do pedal
acelerador para aumentar a velocidade do carro;
O pedal oculta os complexos mecanismos que
realmente fazem o carro ir mais rápido;
Isso permite que as pessoas com pouca ou nenhum
conhecimento de como os motores funcionam
dirijam um carro facilmente.
Prof. Ramiro Victor 5
Introdução
Você não pode guiar os desenhos de engenharia
de um carro.
Antes eles devem ser construídos a partir dos
desenhos de engenharia que o descrevem;
Em Java, primeiro criamos uma unidade de
programa chamado classe, e assim como não se
pode dirigir um desenho de engenharia de um
carro, não se pode usar uma classe sem antes ela
ser construída
Uma classe construída é um objeto.
Prof. Ramiro Victor 6
Introdução
Ao dirigir um carro, o ato de pressionar o acelerador
envia uma mensagem para o carro realizar uma
tarefa;
De maneira semelhante, envia-se mensagens para
um objeto.
Cada mensagem é conhecida como uma
chamada de método que instrui um objeto a
realizar uma tarefa.
Prof. Ramiro Victor 7
Introdução
Além das capacidades de um carro, ele também
tem muitos atributos, como cor, número de portas,
quantidade de gasolina, velocidade atual e total
de quilômetros percorridos.
De maneira semelhante, um objeto tem atributos
que são portados com o objeto quando ele é
utilizado em um programa.
Os atributos são especificados pelas variáveis de
instância da classe
Para melhor entendimento, vamos estudar um
sistema bancário. Uma entidade muito importante
neste sistema é a conta.
Prof. Ramiro Victor 8
Classe
Prof. Ramiro Victor 9
Quais são as informações importantes para uma
conta?
Número da conta;
Nome do dono;
Saldo;
Limite.
Quais as funcionalidades de uma conta
Sacar;
Depositar;
Imprimir o nome do dono;
Transferir uma quantidade x para outra conta.
Atributos
Prof. Ramiro Victor 10
Declarando a classe e os atributos:
public class Conta {
int num;
String nome;
double saldo;
double limite;
// Métodos
}
Métodos
Prof. Ramiro Victor 11
Declarando os métodos
public class Conta {
// atributos
void saca(double valor){}
void deposita(double valor){}
void imprime(){}
double saldo(){}
boolean transfere(Conta destino, double valor){}
String tipoConta(){}
}
Instanciando um objeto
Prof. Ramiro Victor 12
Declarando os métodos
public class Programa {
public static void main (String[] args) {
Conta minhaConta;
minhaConta = new Conta();
}
}
Referência a Memória
Prof. Ramiro Victor 13
Quando declaramos uma variável para associar a um
objeto, na verdade essa variável não guarda o objeto,
e sim uma maneira de acessá-lo, chamada de
referência;
public class Programa {
public static void main (String[] args) {
Conta minhaConta = new Conta();
Conta suaConta = new Conta();
}
}
Referência a Memória
Prof. Ramiro Victor 14
Quando instanciamos uma Conta, nessa situação
“minhaConta”, refere-se a um objeto que está na
memória;
Lembrar, uma variável nunca é um objeto.
minhaConta
suaConta
Referência a Memória
Prof. Ramiro Victor 15
public class Programa {
public static void main (String[] args) {
Conta minhaConta = new Conta();
Conta suaConta = new Conta();
minhaConta = suaConta;
}
}
minhaConta
suaConta
Conceitos Fundamentais
02/08/18Prof. Ramiro Victor 16
O que é um objeto?
“É a representação de uma coisa do mundo real.” (BARNES,2009)
Exemplos:
O carro vermelho que está ali no estacionamento.
Este lápis na minha mão.
OBJETO = DADOS + OPERAÇÕES
Objeto
• Objeto é qualquer entidade do mundo real que
apresente algum significado.
• Mesmo que tal entidade não se constitua em algo
concreto.
Prof. Ramiro Victor 17
Conceitos Fundamentais
Prof. Ramiro Victor 18
Objetos Possuem:
Estado:
Representado pelos valores dos atributos de um objeto
Comportamento:
Definido pelo conjunto de operações (métodos) do objeto;
Estado representa o resultado cumulativo de seu
comportamento;
Identidade:
Dois objetos são distintos mesmo que os valores de seus
atributos sejam exatamente iguais.
Conceitos Fundamentais
Prof. Ramiro Victor 19
O que é uma classe?
“É um projeto de um objeto. Ela informa como cria um objeto
de um tipo específico.” (SIERRA & BATES, 2007)
Classe
É onde conceituamos o objeto
É a essência do objeto
Define os atributos e métodos
Objeto
É a instância de uma classe
Objetos semelhantes pertencem a uma mesma classe
Conceitos Fundamentais
Prof. Ramiro Victor 20
Atributos
Atributos são as propriedades de um objeto
Exemplo:
Um objeto carro pode ter que propriedades?
Cor
Modelo
Marca
Potência do motor
Quantidade de portas
Velocidade atual
Etc..
Classe
• Uma classe representa um grupo de objetos com
características e comportamentos comuns e
compõem-se, basicamente, de atributos e
métodos.
• As classes de programação são receitas de um
objeto, aonde têm características e
comportamentos, permitindo assim armazenar
propriedades e métodos dentro dela.
Prof. Ramiro Victor 21
Conceitos Fundamentais
Prof. Ramiro Victor 22
Métodos
Métodos são as ações que um objeto pode realizar
Exemplo:
Um objeto carro pode realizar que ações?
Acelerar
Frear
Buzinar
Etc.
Conceitos Fundamentais
Prof. Ramiro Victor 23
Como representamos uma Classe?
Através da UML (Unified Modeling Language)
Retângulo com três divisões:
Nome da Classe
Atributos
Métodos (ações).
Modificadores de acesso
Prof. Ramiro Victor 27
Os modificadores de acesso controlam às variáveis e
métodos de uma classe;
Isto evita a inconsistência nos valores nos objetos.
Os modificadores de acesso mais usados são:
private
Public
Protect
Default
Modificadores de acesso
Prof. Ramiro Victor 28
Quando um atributo ou método é privado, fechamos
o acesso ao mesmo em relação a todas as outras
classes;
Isto é, não são diretamente acessíveis fora da classe.
Cada classe é responsável por gerenciar seus
atributos. Ela é que julga se é pertinente ou não um
determinado valor. Esta validação não deve ser
realizada por quem está usando a classe.
Já o public, permite que todas as classes do sistema
acessem determinados atributos e métodos.
Modificadores de acesso
Prof. Ramiro Victor 29
public class Empregado{
private String primeiroNome;
private String ultimoNome;
private float salario;
public float calculaPassagem(){
}
}
Modificadores de acesso
Prof. Ramiro Victor 30
Visibilidade Public Protected Package
(Default)
Private
A partir da mesma classe Sim Sim Sim Sim
A partir de qualquer classe
do mesmo pacote
Sim Sim Sim Não
A partir de uma subclasse do
mesmo pacote
Sim Sim Sim Não
A partir de uma subclasse de
fora do mesmo pacote
Sim Sim,
através da
herança
Não Não
A partir de qualquer classe
que não seja uma subclasse
e que esteja fora do pacote
Sim Não Não Não
Modificadores de acesso
Prof. Ramiro Victor 31
É muito comum que os atributos de uma classe sejam
private e os seus métodos sejam public.
Toda interação entre os objetos se dá através da
troca de mensagens através de seus métodos.
Estes são os fundamentos básicos do encapsulamento,
esconder o modo de operação de uma classe,
deixando apenas disponível os métodos que trocam
mensagens (interface da classe) com as outras
classes.
Modificadores de acesso - UML
Prof. Ramiro Victor 32
Modificador Representação
Public +
Private -
protected #
Package (defaulf) ~
Atributos e Métodos da Classe
Prof. Ramiro Victor 33
Vimos até agora que atributos e métodos
pertencem aos objetos:
Não se faz nada sem antes criar um objeto (new)!
No entanto, há situações que você quer usá-los
sem ter que criar objetos:
Deseja-se um atributo associado a uma classe como um
todo (todos os objetos compartilham a mesma variável,
similar a uma “variável global”);
Deseja-se chamar um método mesmo que não haja objetos
daquela classe criados.
Atributos e Métodos Static
Prof. Ramiro Victor 34
Usando a palavra-chave static você define um
atributo ou método de classe (“estático”):
Atributo/método pertence à classe como um todo;
Pode-se acessá-los mesmo sem ter criado um objeto;
Objetos podem acessá-los como se fosse um membro de
objeto, só que compartilhado;
O contrário não é possível: métodos static não podem acessar
atributos/métodos não-static diretamente (precisa criar um
objeto).
Construtores
Prof. Ramiro Victor 35
Quando criamos objetos, podemos querer inicializá-lo
com alguns valores;
Quando um novo objeto é criado:
1º é alocada memória para o objeto;
2º o construtor é chamado.
Você não pode criar um objeto sem chamar um
construtor.
Se definidos argumentos, devem ser passados na
criação do objeto com new.
Nossas classes podem ter quantos construtores
quisermos (com assinaturas diferentes)
Construtores
Prof. Ramiro Victor 36
O nome do construtor deve coincidir com o nome da
classe
Os construtores não devem ter um tipo de retorno
O construtor padrão será sempre um construtor sem
argumentos
Os construtores podem utilizar qualquer modificador
de acesso, inclusive private;
Se você não inserir um construtor no código de sua
classe, um construtor é utilizado.
Sobrecarga de Métodos
Prof. Ramiro Victor 39
Os métodos sobrecarregados permitirão que você reutilize o
mesmo nome de método em uma classe, mas com argumentos
diferentes (e opcionalmente, com um tipo de retorno diferente).
Os métodos sobrecarregados devem alterar a lista de
argumentos
Os métodos sobrecarregados podem alterar o tipo de retorno
Os métodos sobrecarregados podem alterar o modificador de
acesso
A decisão sobre qual dos métodos coincidentes chamar será
baseada nos argumentos
A palavra reservada this
Prof. Ramiro Victor 40
this pode ser usado para diferenciar um atributo do
objeto de um parâmetro do método:
public class Num {
private int i = 5;
public void somar(int i) {
this.i+= i;
}
}
This
• This é usado para fazer auto-referência ao próprio
contexto em que se encontra. Resumidamente, this
sempre será a própria classe ou o objeto já
instanciado.
Prof. Ramiro Victor 41
Exercício
Prof. Ramiro Victor 42
Faça uma classe Calculadora que realize as 4
operações matemáticas básicas (soma, divisão,
multiplicação e subtração)
Cada método deve receber sobre dois valores
(double) passados como parâmetros e retorne o
resultado.
Crie uma classe que instancie um objeto do tipo
calculadora e realize as 4 operações e imprima os
resultados obtidos.