insert_drive_fileAtributos e métodos

Propaganda
Programação Orientada a Objetos
Classes e Objetos: atributos e métodos
Prof. Emerson Ribeiro de Mello
Instituto Federal de Santa Catarina – IFSC
campus São José
[email protected]
http://docente.ifsc.edu.br/mello/poo
02 de março de 2017
1/16
Modificadores de acesso: public e private
Paradigma da programação orientada a objetos
Objetos interagem com objetos através da troca mensagens
A troca de mensagens ocorre através da invocação de métodos de
objetos
2/16
Modificadores de acesso: public e private
Paradigma da programação orientada a objetos
Objetos interagem com objetos através da troca mensagens
A troca de mensagens ocorre através da invocação de métodos de
objetos
Encapsulamento
Emissor da mensagem não precisa saber como o resultado foi
obtido, para este só importa o resultado
O emissor precisa conhecer quais operações o receptor sabe realizar
ou quais informações o receptor pode fornecer
2/16
Modificadores de acesso: public e private
Paradigma da programação orientada a objetos
Objetos interagem com objetos através da troca mensagens
A troca de mensagens ocorre através da invocação de métodos de
objetos
Encapsulamento
Emissor da mensagem não precisa saber como o resultado foi
obtido, para este só importa o resultado
O emissor precisa conhecer quais operações o receptor sabe realizar
ou quais informações o receptor pode fornecer
Modificadores de acesso
Indicam quais atributos e métodos de um objeto estarão visı́veis aos
demais objetos do sistema
2/16
Modificadores de acesso: public e private
private Os membros de uma classe (atributos e métodos) definidos
como privados só poderão ser acessados pelos demais métodos
da própria classe
public Os membros de uma classe definidos como públicos poderão ser
invocados por métodos de qualquer classe
3/16
Modificadores de acesso: public e private
private Os membros de uma classe (atributos e métodos) definidos
como privados só poderão ser acessados pelos demais métodos
da própria classe
public Os membros de uma classe definidos como públicos poderão ser
invocados por métodos de qualquer classe
Princı́pios da POO
Geralmente atributos de uma classe devem ser declarados como
privados
Métodos geralmente devem ser públicos, porém há casos que um
método só interessa a própria classe e assim este deve ser privado
Isto garante a integridade do estado do objeto, pois somente
métodos da própria classe poderão alterá-lo
3/16
Modificadores de acesso: exemplo não ideal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class CarroNaoIdeal{
// atributos
public float velocidade;
// metodos
public void definirVelocidade(float v){
if (v <= 200){
velocidade = v;
} else velocidade = 0;
}
public void acelerar(float v){
// o carro so' pode atingir 200km/h
if ((velocidade + v) <= 200){
velocidade += v;
}else{
velocidade = 200;
}
}
}
4/16
Modificadores de acesso: exemplo não ideal
19
20
public static void main(String args[]){
CarroNaoIdeal fusca = new CarroNaoIdeal();
21
// alterando a velocidade atraves dos metodos do objeto
fusca.definirVelocidade(150);
fusca.acelerar(400);
22
23
24
25
// alterando diretamente o valor do atributo
fusca.velocidade = 400;
26
27
28
}
5/16
Modificadores de acesso: exemplo não ideal
19
20
public static void main(String args[]){
CarroNaoIdeal fusca = new CarroNaoIdeal();
21
// alterando a velocidade atraves dos metodos do objeto
fusca.definirVelocidade(150);// velocidade = 150
fusca.acelerar(400); // velocidade = 200
22
23
24
25
// alterando diretamente o valor do atributo
fusca.velocidade = 400;
26
27
28
}
5/16
Modificadores de acesso: exemplo ideal
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
public class CarroIdeal{
// atributos
private float velocidade;
// metodos
public void definirVelocidade(float v){
if (v <= 200){
velocidade = v;
} else velocidade = 0;
}
public void acelerar(float v){
// o carro so' pode atingir 200km/h
if ((velocidade + v) <= 200){
velocidade += v;
}else{
velocidade = 200;
}
}
}
6/16
Modificadores de acesso: exemplo ideal
47
48
public static void main(String args[]){
CarroIdeal fusca = new CarroIdeal();
49
// alterando a velocidade atraves dos metodos do objeto
fusca.definirVelocidade(150);
fusca.acelerar(400);
50
51
52
53
// alterando diretamente o valor do atributo
fusca.velocidade = 400;
54
55
56
}
7/16
Modificadores de acesso: exemplo ideal
47
48
public static void main(String args[]){
CarroIdeal fusca = new CarroIdeal();
49
// alterando a velocidade atraves dos metodos do objeto
fusca.definirVelocidade(150);// velocidade = 150
fusca.acelerar(400); // velocidade = 200
50
51
52
53
// alterando diretamente o valor do atributo
fusca.velocidade = 400; // ERRO ! nao ira' compilar
54
55
56
}
7/16
Valores iniciais de atributos
1
2
3
4
public class Pessoa{
private String nome;
private String cpf;
private int anoNasc;
5
6
7
8
9
10
11
public void imprimirDados(){
System.out.println("Nome: " +
nome);
System.out.println("CPF: " +
cpf);
System.out.println("Ano: " +
anoNasc);
}
}// fim da classe
12
13
14
Pessoa p = new Pessoa();
p.imprimirDados();
8/16
Valores iniciais de atributos
1
2
3
4
public class Pessoa{
private String nome;
private String cpf;
private int anoNasc;
5
6
7
8
9
10
11
public void imprimirDados(){
System.out.println("Nome: " +
nome);
System.out.println("CPF: " +
cpf);
System.out.println("Ano: " +
anoNasc);
}
}// fim da classe
O que será impresso?
12
13
14
Pessoa p = new Pessoa();
p.imprimirDados();
8/16
Valores iniciais de atributos
1
2
3
4
public class Pessoa{
private String nome;
private String cpf;
private int anoNasc;
5
6
7
8
9
10
11
public void imprimirDados(){
System.out.println("Nome: " +
nome);
System.out.println("CPF: " +
cpf);
System.out.println("Ano: " +
anoNasc);
}
}// fim da classe
O que será impresso?
15
16
17
Nome:
CPF:
Ano: 0
12
13
14
Pessoa p = new Pessoa();
p.imprimirDados();
8/16
Valores iniciais de atributos
Em Java atributos de um objeto que não forem iniciados na criação
deste objeto, receberão valores padrões
números ficam 0, boolean com false e referências de objetos com null
9/16
Valores iniciais de atributos
Em Java atributos de um objeto que não forem iniciados na criação
deste objeto, receberão valores padrões
números ficam 0, boolean com false e referências de objetos com null
Uma boa prática de programação
Sempre inicie os atributos de forma explı́cita
18
Pessoa p = new Pessoa();
19
20
21
22
p.definirNome("Joao");
p.definirCPF("123.456.789-00");
p.definirAno(1950);
9/16
Método construtor
Trata-se de um método especial cujo objetivo é iniciar com valores os
atributos de um objeto
O método possui o mesmo nome da classe e não possui tipo de retorno
Uma classe pode conter métodos construtores sobrecarregados
Sobrecarga de métodos consiste em declarar métodos com o mesmo
nome, porém com assinaturas diferentes.
A assinatura de um método é dada pelo tipo de retorno e pela lista de
parâmetros
Ao criar um objeto o desenvolvedor indica qual construtor irá chamar
Nota
Método construtor padrão é aquele cuja de lista de parâmetros está vazia.
Toda classe Java possui um construtor padrão vazio implı́cito.
10/16
Método construtor: exemplo
23
24
25
public class Pessoa{
private String nome, cpf;
private int anoNasc;
26
27
28
29
30
// metodo construtor padrao
public Pessoa(){
nome = ""; cpf = ""; anoNasc = 0;
}
31
32
33
34
35
// metodo construtor com 1 parametro
public Pessoa(String no){
nome = no; cpf = ""; anoNasc = 0;
}
36
37
38
39
40
41
// metodo construtor com 3 parametros
public Pessoa(String no, String c, int a){
nome = no; cpf = c; anoNasc = a;
}
}// fim da classe
11/16
Invocando métodos construtores
42
43
44
Pessoa a = new Pessoa();
Pessoa b = new Pessoa("Maria");
Pessoa c = new Pessoa("Maria","123.456.789-00",1959);
12/16
Invocando métodos construtores
42
43
44
Pessoa a = new Pessoa();
Pessoa b = new Pessoa("Maria");
Pessoa c = new Pessoa("Maria","123.456.789-00",1959);
Questionamentos
1
Você já fez uso de algum método construtor em Java? De quais classes?
2
Invocou construtores padrões ou outros construtores?
12/16
Exercı́cios - Lab 02
Lista de exercı́cios individual
Crie um único projeto Netbeans e crie um pacote para cada exercı́cio,
hospedando dentro de cada pacote as respectivas classes
Entrega via Git Classroom até dia 08/03/2017
https://classroom.github.com/assignment-invitations/
9d019dc872eede7baeaa00522b744d7b
13/16
Exercı́cio 1 – Classe para representar um número complexo
x = (a, b)
Classe Complexo
1
2
Crie métodos construtores que permitam iniciar os atributos dessa
classe.
Crie os métodos soma e subtração. Estes devem receber um número
Complexo como parâmetro e somá-lo ou subtraı́-lo com o objeto em
questão.
Soma: x + y = (a + c, b + d)
Subtração: x − y = (a − c, b − d)
3
Crie um método para imprimir o número complexo na forma (a, b),
sendo a a parte real e b a parte imaginária
Escreva um programa Java, instancie dois objetos da classe Complexo e
invoque alguns de seus métodos.
Faça uso dos modificadores private e public, respeitando o princı́pio da
POO
14/16
Exercı́cio 2 – Classe Data para representar uma data
(dia, mês e ano)
Crie uma classe em Java para representar uma data
Escreva um programa Java, instancie um objeto da classe Data e
invoque alguns de seus métodos
A classe deverá prover os seguintes métodos
Construtor padrão
Construtor para iniciar todos os atributos da classe
imprimir – Deverá imprimir o valor no dispositivo de saı́da padrão. Ex:
02/09/2013
imprimirPorExtenso – Deverá imprimir o valor por extenso. Ex: dois de
setembro de 2013.
definirDia – recebe um valor com parâmetro e armazena na classe
definirMes – recebe um valor com parâmetro e armazena na classe
definirAno – recebe um valor com parâmetro e armazena na classe
15/16
Exercı́cio 3 – Classe para representar valores em Reais
Crie uma classe em Java para representar um valor em Reais (moeda
brasileira). Escreva um programa Java, instancie um objeto da classe
Moeda e invoque alguns de seus métodos.
O maior valor permitido é R$ 1.000, 00 e o menor é R$ −1.000, 00
A classe deverá prover os seguintes métodos
Construtor padrão
Construtor para iniciar todos os atributos da classe
imprimir – Deverá imprimir o valor no dispositivo de saı́da padrão. Ex: R$
123,45
imprimirPorExtenso – Deverá imprimir o valor por extenso. Ex: Cento e
vinte e três reais e quarenta e cinco centavos
obterValor – retorna o valor armazenado
definirValor – recebe um valor com parâmetro e armazena na classe
16/16
Download