A prática tem por objetivo exercitar os conceitos de programação orientada a objetos fixando os conteúdo de Abstração e Encapsulamento permitindo domínio da linguagem de programação.
-
Para começar, baixe a classe Data.java que contém uma estrutura minimalista de uma classe para representar uma data usando orientação a objetos.
-
Crie um novo arquivo chamado AppData.java dentro da pasta onde o arquivo anterior foi baixado. Este arquivo deve conter o método
public static void main(String args[])
. -
Dentro do método principal, crie um objeto chamado dataNascimento da classe Data passando como parâmetro 3 inteiros que represtam respectivamente o dia, mes e ano de uma determinada data.
Tente compilar esse código. Qual foi o motivo deste erro?
Corrija o método construtor para que ele receba os parâmetros passados na criação do objeto. Acrescente os atributos mes e ano do tipo int seguindo à estrutura existente na classe Data e ajuste o método construtor para ele inicialize os atributos da classe.
- Agora vamos exibir os atributos da data criada, para isso adicione o seguinte código dentro do método
main
em AppData.
System.out.println(dataNascimento.dia + "/" + dataNascimento.mes + "/" + dataNascimento.ano);
Recompile e execute novamente o arquivo AppData e veja que a saída será os valores que foram passados na criação do objeto.
- Modifique os valor dos atributos do objeto com a instrução abaixo e exiba os dados na tela depois de modificar os atributos do objeto.
dataNascimento.dia = 40;
- Isso mudou o valor do atributo permitindo inserir um valor inválido para uma data. Vamos encapsular os atributos para impedir que eles sejam acessados diretamente. Para isso acrecente a palavra reservada
private
antes do tipo do dado nos atributos da classeData.java
. Recompile o código e veja os erros de saídaAppData.java:X: error: dia has private access in Data
. Isto indica que não podemos mais acessar diretamento o atributo pois ele foi encapsulado.
Comente as linhas onde é feito o acesso direto aos atributos.
- Agora vamos criar um método chamado
setData
responsável validar e atribuir os valores a data. Sempre utilizamos o métodoset
para alterar o valor de qualquer atributo que esteja encapsulado.
public void setData(int dia, int mes, int ano){
int diasmes[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (mes > 0 && mes < 13){
this.mes = mes;
// validando o dia de acordo com o mes
if (dia > 0 && dia <= diasmes[mes+1]){
this.dia = dia;
} else {
System.out.println("Dia inválido");
this.dia = 1;
}
} else {
System.out.println("Mês inválido");
this.mes = 1;
}
if (ano > 0){
this.ano = ano;
} else {
System.out.println("Ano inválido");
this.ano = 1900;
}
}
- Vamos adicionar um método
get
para pegar o valor dos atributos. Sempre utilizamos o métodoget
para pegar o conteúdo de qualquer atributo que esteja encapsulado.
public String getData(){
return dia + "/" + mes + "/" + ano;
}
- Chame os métodos
setData
egetData
dentro do método principal de AppData
dataNascimento.setData(2, 6, 2019);
System.out.println( dataNascimento.getData() );
- Compile e execute os códigos. Tente passar valores inválidos ao método
setData
A segunda prática tem por objetivo exercitar os conceitos de Abstração, Encapsulamento e utilizar o conceitos da linguagem Java além de fazer o reaproveitamento de código (um dos objetivos da OO).
-
Implemente uma classe chamada Pessoa contendo os atributos
nome, cpf, sexo e dataNascimento
. O atributo dataNascimento deve ser do tipoData
(classe utilizada anteriormente). -
Codifique o método construtor para que ele inicialize todos os atributos da classe e também crie os métodos
get
eset
para cada atributo da classe. -
Codifique um método chamado apresentarPessoa() que escreve na tela todos os atributos da classe. Para exibir a data de nascimento, você deve usar método
getData()
da classe Data. -
Altere o método construtor da classe Data para que ele execute o método
setData
ao ser executado. -
Crie um método chamado ehBissexto do tipo
boolean
que retorna true se o ano for bissexto e depois altere o métodosetData
para validar o dia inicializado do mês de fevereiro. O método não deve receber nenhum parâmetro (utilizar o valor gravado nos aributos da classe). -
Crie um método static chamado somarDias na classe Data que recebe uma Data como parâmetro e o número de dias a somar e retorne uma nova data
return new Data(dd, mm, ano);
. A nova data deve considerar os anos bissextos.