Exercício Prático 3 – Reutilizando Objetos Nome: Com base no

Propaganda
Universidade Estadual da Paraíba
Campus VII – Gov. Antônio Mariz
CCEA – Centro de Ciências Exatas e Sociais Aplicadas
Licenciatura em Computação
Java - Noturno
Exercício Prático 3 – Reutilizando Objetos
Nome:______________________________________________
Com base no modelo de Orientação à Objetos nós podemos formar classes que possuem
atributos de tipos primitivos(int, char, float), porém outro fator importante é a possibilidade de
termos classes que possuem atributos desenvolvidos de forma customizada por nós programadores.
Ou seja, uma classe contém um atributo que pode ser outra classe.
Observe a classe “Endereco.java”
/**
@author professor_Hugo_Barros
@version 1.0
Representa endereco de uma Pessoa.
*/
public class Endereco{
private String cidade;
private String rua;
private int num;
public Endereco(String cidade, String rua, int num){
this.cidade = cidade;
this.rua = rua;
this.num = num;
}
/**
Altera o valor da Cidade
@param cidade Cidade da pessoa referenciada.
*/
public void setCidade(String cidade){
this.cidade = cidade;
}
/**
Altera o valor da Rua
@param rua Rua onde a pessoa reside.
*/
public void setRua(String rua){
this.rua = rua;
}
/**
Altera o numero da residencia
@param num Numero da residencia da Pessoa.
*/
public void setNum(int num){
this.num = num;
}
/**
Resgata a Cidade onde a pessoa reside
@return Cidade no formato String.
*/
public String getCidade(){
return this.cidade;
}
/**
Resgata a Rua onde a pessoa reside
@return Rua no formato String.
*/
public String getRua(){
return this.rua;
}
/**
Resgata o numero da residencia onde a pessoa reside
@return numero no formato de inteiro.
*/
public int getNum(){
return this.num;
}
}
Agora, voltemos à Classe Pessoa.java vista no exercício anterior, a qual todos modificaram, criaram
novos construtores adicionando atributos e etc. Será que é possível adicionar um objeto do tipo
Endereco ? Vamos fazer um teste adicionando um atributo na classe Pessoa.java do tipo Endereco.
Exemplo:
public class Pessoa{
private int idade;
private String nome;
private Endereco endereco;
//construtor
public Pessoa(){
}
...
Se foi adicionado um atributo na classe Pessoa.java o que é preciso fazer ? Adicionar o get e o set
do atributo adicionado, então faça-o:
…
public void setEndereco(Endereco endereco)
…
E quanto ao construtor da classe Pessoa ? Já que temos mais um atributo, seria interessante deixar a
possibilidade de passá-lo como parâmetro no construtor, porém sabemos que na classe pessoa não
temos os métodos get e set da classe Endereco.java, mas na classe Endereco temos um construtor
que recebe todos os seus atributos como parâmetro, então porque não chamar esse construtor na
inicialização da classe Pessoa.java. Fazendo isso, com certeza estará diminuindo consideravelmente
o número de linhas do meu código. Exemplo:
…
public Pessoa(){
}
public Pessoa(int idade, String nome, String cidade, String rua, int num){
this.idade = idade;
this.nome = nome;
this.endereco = new Endereco(cidade,rua,num);
}
//construtor
public Pessoa(int idade, String nome, Endereco endereco){
this.idade = idade;
this.nome = nome;
this.endereco = endereco;
}
...
E o método Main ? Crie uma classe que contenha um método Main e faça seus testes com todos os
construtores criados. Exemplo:
...
public static void main(String args[]){
Pessoa p = new Pessoa(21,"Hugo","Patos","Av. Teste",500);
System.out.println("Nome: "+p.getNome()+"\n"+
"Idade: "+p.getIdade()+"\n"+
"Cidade: "+p.getEndereco().getCidade()+"\n"+
"Rua: "+p.getEndereco().getRua()+"\n"+
"Número: "+p.getEndereco().getNum()+"\n");
}
...
Outro exemplo seria:
...
public static void main(String args[]){
Endereco e = new Endereco(“Patos”,”Av.teste”,500);
Pessoa p = new Pessoa(21,"Hugo", e);
}
System.out.println("Nome: "+p.getNome()+"\n"+
"Idade: "+p.getIdade()+"\n"+
"Cidade: "+p.getEndereco().getCidade()+"\n"+
"Rua: "+p.getEndereco().getRua()+"\n"+
"Número: "+p.getEndereco().getNum()+"\n");
…
Porque separar em classes, atributos que poderíamos colocar em apenas uma classe. Essa é uma
pergunta que nós programadores sempre fazemos quando estamos desenvolvendo a capacidade de
“quebrar” o nosso código em “pedacinhos” cada vez menores. A resposta mais simples para essa
pergunta é que em um desenvolvimento de um sistema pouco mais complexo, a classe Endereco
pode ser utilizada não apenas pela classe Pessoa.java mas sim, por diversas outras classes. Pois não
só um objeto do tipo Pessoa pode ter um Endereco, mas sim a necessidade de representar a
residencia de entrega de um cliente e entre outros motivos. O ideal é sempre: “Dividir para
Conquistar!”
A metodologia que criamos acima é uma maneira de atribuir vários atributos de classes diferentes,
onde o construtor identifica e coloca cada valor de atributo no lugar correto, inclusive passando por
parâmetros atributos da classe Endereco.java
Crie outra classe que não seja a Classe Endereco.java e adicione-a como atributo e inclusive no seu
construtor, criando gets e set's para o atributo adicionado.
Agora que somos capazes de colocar na memória RAM dos nossos computadores – de uma forma
organizada – informações de pessoas e seus respectivos endereços, vamos resolver o problema de
João Carteiro:
João é um carteiro que percorre a cidade de Patos inteira, portanto conhece muitas pessoas pelo
nome e algumas ele sabe até a idade, mas o problema de João é que ele não consegue decorar as
ruas e seus respectivos números de seus conhecidos. Pensando em facilitar a vida de João, crie um
programa em java que leia do teclado quantas pessoas joão deseja cadastrar e depois seja capaz de
inserir, alterar, excluir e a opção de “mostrar todos”(pode ser feito com menu) os dados dessas
pessoas(nome, idade, cidade, rua, número). Considere importante ainda adicionar os dados da classe
criada por você na questão anterior.
Dica:
Para facilitar e organizar o seu trabalho utilize métodos que diminuam as linhas de código e o uso
de arrays não é uma má ideia.
Comandos importantes:
Comando
Execução
ls
lista os arquivos de um determinado diretório
pwd
mostra o diretório atual
mkdir <nome>
cria um diretório com o <nome> passado como parâmetros
cd <nome>
direciona o terminal para o diretório com o <nome>
javac <nome>.java
compila um arquivo com o nome passado e gera o bytecode
java <nome>
executa o bytecode gerado pelo processo de compilação
javadoc <nome>.java
gera o javadoc do arquivo <nome>.java
OBS.:
– É importante saber que as “...” (reticências) indicam a existência de um código implícito.
– O código deve obedecer as regras de identação, pois nas avaliações futuras será um
quesito de pontuação.
– Deve-se colocar comentários javadoc em todas as classes criadas nesse exercício.
– Para todo programa criado deve-se gerar o seu javadoc respectivo.
– O Exercício completo vale 2,00 Pontos;
– O prolema não deve ser feito em dupla;
– Deverá ser entregue até o dia 20/09/2011 até as 23:59(sem adiamentos);
– A entrega deverá ser feita via e-mail;
– O assunto do e-mail deverá ser como segue: “Entrega trabalho01 JAVA noturno”
– O arquivos(compilados e fonte) deverão estar em uma pasta e zipados como mostra o
exemplo: uepb_java_noturno_201102_trab01_meunome.zip
– Existem infinitas formas de resolver o exercício, portanto a coincidente duplicidade será
considerada cópia!
– Dúvidas poderão ser retiradas por e-mail e presencialmente na sala de aula no dia
15/09/2011
Boa sorte !!!
Download