8
Prática de Implementação Programação Orientada a Objetos Ludimila Monjardim Casagrande 2012 Encapsulamento e Modificadores de Acesso

POO - 08 - Prática de Encapsulamento

Embed Size (px)

Citation preview

Page 1: POO - 08 - Prática de Encapsulamento

Prática de Implementação

Programação Orientada a Objetos

Ludimila Monjardim Casagrande 2012

Encapsulamento e Modificadores de Acesso

Page 2: POO - 08 - Prática de Encapsulamento

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.

Page 3: POO - 08 - Prática de Encapsulamento

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

Page 4: POO - 08 - Prática de Encapsulamento

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; } } …

Page 5: POO - 08 - Prática de Encapsulamento

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.

Page 6: POO - 08 - Prática de Encapsulamento

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

Page 7: POO - 08 - Prática de Encapsulamento

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

Page 8: POO - 08 - Prática de Encapsulamento

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