Boa Noite, pessoal estou iniciando em java e estou estudando
a apostila da Caelum (FJ11), estou procurando entender e fixar bem
os conceitos de OO. Estou na parte de encapsulamento, e me
surgiu uma dúvida:
Supondo que eu queira montar um Sistema Comercial (Estoque,
Emissão de nfs, Receber, etc),umas das classes necessarias
ao meu ver seria a de Clientes:
Por exemplo, essa classe eu usaria somente como “modelo” vamos
dizer assim…, seria a classe que eu iria instanciar ?
E por exemplo um método de validar o cpf deveria ser definido
nesta classe mesmo?, e depois utilizá-lo na instância?, assim
como também colocar nesta instância (UsaClientes) os JTextFields??
Comprei o livro do Deitel Java como programar, mas achei muito
cansativo, preferia que ele fosse mais direto ao assunto.
Obrigado… são dúvidas de um iniciante… mas são dúvidas rss
Muito obrigado David por sua atenção, será que existe alguma publicação que seja mais voltada para um aplicativo comercial, ou seja, uma situação real, o que mais se encontra são exemplos do tipo: Animal gato = new Animal(), ou
Carro fusca = new Carro()., não sei se vcs me compreendem…
Quanto a verificação citada, sim, é recomendável fazer essa verificação no método setCpf, para que ao chamá-lo, possamos ter certeza que somente CPFs válidos serão aceitos.
Talvez um construtor caisse bem, uma vez que todo cliente deve ter um nome e um CPF (requerindo esses argumentos pelo construtor, obrigatóriamente estes terão algum valor).
Ah… outra coisa: eu acho que o nome da classe faz mais sentido no singular (Cliente), uma vez que cada instância se refere a um único cliente.
Resumindo, seria algo como:
class Cliente {
private String cpf;
private String nome;
public Cliente(String nome, String cpf) {
setNome(nome);
setCpf(cpf);
}
public String getNome() {
return nome;
}
public String setNome(String nome) {
this.nome = nome;
}
public String getCpf() {
return cpf;
}
public String setCpf(String cpf) {
if (isValidCpf(cpf)) { // fazendo a verificação
this.cpf = cpf;
}
}
private static boolean isValidCpf(String s) {
return true; // TODO fazer a verificação verdadeira
}
}
E considere como bastante importante o que Lavieri disse (só não coloquei no exemplo porque estava editando quando ele postou), mas sugiro que implemente essa classe CPF (até porque a validação de CPF é algo chato de se fazer, mas existem vários exemplos e algoritmos prontos aqui no fórum).
[quote=ggero]Muito obrigado David por sua atenção, será que existe alguma publicação que seja mais voltada para um aplicativo comercial, ou seja, uma situação real, o que mais se encontra são exemplos do tipo: Animal gato = new Animal(), ou
Carro fusca = new Carro()., não sei se vcs me compreendem…[/quote]
vc ve isso em apostilas, pq é mais facil de entender conceitos OO com objetos reais… e não com coisas já viciadas vindo de outras linguagem… quase todo programador, tem certos vicios com relações a coisas comerciais, por isso os exemplos são bem mais reais… o ideal é vc abstrair… tentar enchergar as coisas com um objeto…
Por exemplo…
Cliente é um “objeto” ou seja… é uma pessoa… pessoa tem as caracteristicas principais que te interessam… ai vc modela especificando estas caracteristicas… ai vc pensa… Cpf é um objeto, com carcteristicas proprias… então se para o nivel de modelo que vc esta fazenod, é relevante… vc modela o objeto Cpf tb… caso contrario, vc abstrai um pouco…
…
Tudo depende do seu foco… quanto + dentro do seu problema vc estiver, melhor vc precisa modelar… por exemplo… c vc estiver fazendo um pequeno sistema de cadastro de estoque… onde exista um fornecedor, e que tenha um contato… vc não precisa da data de nascimento do contato… pq isso não interessa pro foco da tua modelagem ^^…
Situações reais você pode encontrar em vídeo aulas, sobre materiais as explicações são bem didáticas mesmo.
Mas antes o ideal mesmo é você fixar os conceitos, principalmente o que o Lavieri disse…meu trecho de código funciona mas leve em consideração o que o Lavieri mencionou.
Fala ae cara…blz ??
então…como o sábio jack o stripador disse…“vamos por partes” hehehehe
[quote=ggero]E por exemplo um método de validar o cpf deveria ser definido
nesta classe mesmo?, e depois utilizá-lo na instância?, assim
como também colocar nesta instância (UsaClientes) os JTextFields??[/quote]
Yes !! Porém um pequeno há detalhe que costumo seguir. Você concorda comigo que um método de validação de cpf dentro de clientes seria algo específico para clientes ? Tipo, só uma pessoa tem cpf, mais ninguem…então não existe uma necessidade clara para deixar esse método acessível. Por fim, acredito que o ideal seria que esse método de validação fosse private e o mesmo fosse chamado no momento em que o atributo está sendo setado. Assim não há necessidade de invocar esse método. Ele já seria invocado no momento que você fosse preencher o atributo com algum valor. blz !?
[quote=ggero]Comprei o livro do Deitel Java como programar, mas achei muito
cansativo, preferia que ele fosse mais direto ao assunto.[/quote]
Além de não ter dinheiro pra comprar muitos livros, esse seu motivo é mais um pelo qual eu baixo livros para ler…se o livro me agrada eu compro, se não eu nem continuo lendo. Afinal, dinheiro não é pra ser jogado fora e sim investido !!
Eu aconselho o core java - Fundamentos (Volume I) … é um livro muito bom … repleto de exemplos e que o autor gosta muito de explicar detalhadamente o que está acontecendo, muito bom para entender a linguagem. Eu achei legal !!
Mas dê um olhadinha no thinking Java (Tradução: Use a cabeça JAVA) … não tenho certeza se a versão brasileira tem esse título…Enfim, dizem que é muito bom !