View
1.646
Download
0
Embed Size (px)
Citation preview
Prática de Implementação
Programação Orientada a Objetos
Ludimila Monjardim Casagrande 2012
Encapsulamento e Modificadores de Acesso
Aula Prática ©2012 Ludimila Monjardim Casagrande 2
Exercício
public class Data {
public int dia;
public int mes;
public int ano;
public Data () {
}
public Data (int dia, int mes, int ano) {
this.dia = dia;
this.mes = mes;
this.ano = ano; }
public String toString() {
String data = dia + "/" + mes + "/" + ano;
return data; } }
Atributos declarados como
públicos
Falha nos construtores!
Ambos permitem a criação de
datas inválidas.
Aula Prática ©2012 Ludimila Monjardim Casagrande 3
Exercício
public class Principal {
public static void main (String[] args) {
Data d = new Data();
d.dia = 40;
d.mes = 40;
d.ano = -40;
System.out.println(d);
}
}
Resultado: 40/40/-40 Não é uma data válida!
Como os atributos são públicos, eles
podem ser acessados e alterados
diretamente em outra classe
Aula Prática ©2012 Ludimila Monjardim Casagrande 4
Exercício
public void setDia (int dia) { if(dia >= 1 && dia <= 31) { this.dia = dia; } } public void setMes (int mes) { if(mes >= 1 && mes <= 12) { this.mes = mes; } } public void setAno (int ano) { if(ano >= 1800 && ano <= 2100) { this.ano = ano; } } … }
public class Data {
private int dia; private int mes; private int ano;
public Data () {
this.dia = 1;
this.mes = 1;
this.ano = 1800;
}
public Data (int d, int m, int a) {
this();
if((d >= 1 && d <= 31) &&
(m >= 1 && m <= 12) &&
(a >= 1800 && a <= 2100)) {
this.dia = d;
this.mes = m;
this.ano = a; } } …
Aula Prática ©2012 Ludimila Monjardim Casagrande 5
Exercício
public class Principal {
public static void main (String[] args) {
Data d = new Data();
d.setDia(40);
d.setMes(40);
d.setAno(-40);
System.out.println(d);
}
}
Resultado: 1/1/1800 Tentativas de alterações inválidas
não são aceitas.
Aula Prática ©2012 Ludimila Monjardim Casagrande 6
Solução Alternativa
public void setDia (int dia) { if(dia >= 1 && dia <= 31) { this.dia = dia; } } public void setMes (int mes) { if(mes >= 1 && mes <= 12) { this.mes = mes; } } public void setAno (int ano) { if(ano >= 1800 && ano <= 2100) { this.ano = ano; } } … }
public class Data {
private int dia = 1; private int mes = 1; private int ano = 1800;
public Data () {
}
public Data (int d, int m, int a) {
if((d >= 1 && d <= 31) &&
(m >= 1 && m <= 12) &&
(a >= 1800 && a <= 2100)) {
this.dia = d;
this.mes = m;
this.ano = a; } } …
Definição de
valores default
Exercício
Implemente as classes Hora e Data (cada uma em um
arquivo separado, porém no mesmo projeto).
Crie duas pastas, chamadas hora e data, ambas na raiz
(src) e coloque as respectivas classes nas pastas.
Declare as packages das classes corretamente.
Implemente uma classe Principal com o método main e
salve-a na raiz do projeto.
Na classe Principal crie e altere objetos das classes
Hora e Data, explorando o uso dos vários construtores
disponíveis.
A cada alteração do objeto, imprima-o na tela e observe
os resultados.
Aula Prática ©2012 Ludimila Monjardim Casagrande 7
Atenção
Ao fazer seu exercício, explore o uso das
packages criando novas packages, movendo as
classes de lugar e observando os efeitos
provocados.
Explore também o uso dos diferentes
modificadores de acesso nas classes Hora e
Data e observe os efeitos colaterais na classe
Principal.
Não espere a professora pedir, aprimore você
mesmo o seu estudo.
Aula Prática ©2012 Ludimila Monjardim Casagrande 8