classTrem{//declaraçoes de variaveisprivateStringnome,cidadeAtual,cidadeDestino;privatedoublecargaAtual,cargaMaxima;privatestaticinttotalTrem;//setter and gettersTrem(){this.totalTrem=this.totalTrem+1;}publicstaticintgetTotalDeTrens(){returnTrem.totalTrem;}//setters da classe TrempublicvoidsetNome(Stringnome){this.nome=nome;}publicStringgetNome(){returnthis.nome;}publicvoidsetLocal(StringcidadeAtual){this.cidadeAtual=cidadeAtual;}publicStringgetLocal(){returnthis.cidadeAtual;}publicvoidsetDestino(StringcidadeDestino){this.cidadeDestino=cidadeDestino;}publicStringgetDestino(){returnthis.cidadeDestino;}}
eh normal essa grande quantidade de metodos...1 pra cada coisa q estou fazendo , ou ha uma outra maneira de fazer essa combinação de atribuiçoes e retornos
classTrem{//declaraçoes de variaveisprivateStringnome,cidadeAtual,cidadeDestino;privatedoublecargaAtual,cargaMaxima;privatestaticinttotalTrem;//setter and gettersTrem(){this.totalTrem=this.totalTrem+1;}publicstaticintgetTotalDeTrens(){returnTrem.totalTrem;}//setters da classe TrempublicvoidsetNome(Stringnome){this.nome=nome;}publicStringgetNome(){returnthis.nome;}publicvoidsetLocal(StringcidadeAtual){this.cidadeAtual=cidadeAtual;}publicStringgetLocal(){returnthis.cidadeAtual;}publicvoidsetDestino(StringcidadeDestino){this.cidadeDestino=cidadeDestino;}publicStringgetDestino(){returnthis.cidadeDestino;}}
eh normal essa grande quantidade de metodos...1 pra cada coisa q estou fazendo , ou ha uma outra maneira de fazer essa combinação de atribuiçoes e retornos
Sim isso é normal... essa é a forma que eu conheço.
:wink:
J
jaireltonPJ
Ainda está ate pequeno…
A
adnegreirosPJ
É normal, pois você está trabalhando com uma classe básica. Se os atributos da sua classe são declarados como privados, as informações não serão acessadas por nenhuma outra classe. Esse conceito é chamado de encapsulamento. A informação é guardada de maneira segura. Se é do seu interesse que essas informações sejam visíveis para outras classes. Utilize métodos get(). Se você deseja que alterar o valor dessas informações utilize métodos set().
Entaõ para sua classe ficar perfeita, para cada atributo que você criar, haverá pelo menos 2 métodos, um get() e um set(). Por isso para classes com muitos atributos aparentam ter código muito longo.
Abraço
FieroddPJ
Aproveitando os setter e getters…
É possivel guardar todos os trens q eu criar num array estatico?
exemplo:
eucriotrem1etrem2array[1]=trem1;array[2]=trem2;
e depois acessar seus atributos num loop
for(i=1;i<array.lenght;i++){imprimeTrens();
}
tipo no metodo usar
array[ i ].getNome();
ou - isso?
P
pcalcadoPJ
Eh normal mais ou menos.
Nao tem muita diferença entre fazer isso e declarar todos os membros publicos, nao eh? Da uma olhada aqui.
Shoes
M
matheusPJ
acentuando o comentario do pcalcado, se forem ler livros como o dos Deitel, verão q ele deixa bem claro pra q server um getter/setter… o certo é ter código de validação em um setter, e em um getter talvez um código q configure um valor da maneira q o cliente da interface pública da classe espere ler… por ex:
ou então, o certo seria salvar a data de nascimento do cara em um objeto Date da vida…
FieroddPJ
pcalcado…o q vc fez aqui foi usar os sets e gets de uma maneira conjunta pra maior consistência…dei uma olhada rapida soh , mas me pareceu parecido (a estrutura do codigo)
se puder me explicar melhor o sentido real daquela materia agradeço!!!
P
pcalcadoPJ
Basicamente: Quando você precisar [color=“red”] e tiver um bom motivo[/color] (ou seja: quase nunca exceto nas trocas entre camadas - da camada de negócios para apresentação, etc.) use get para expôr seus atributos e set para definir valores.
Não crie objetos que só tem get/set e não exponham todos os atributos com get/set. Não deixe que objetos externos mudem o estado, isso é o princípio básico de encapsulamento.
Shoes
FieroddPJ
hmmmm…vc quer dizer entao q devo fazer as classes se comunicarem somente o necessario, sem ter q criar gets and set pra tudo…mas se por acaso tenho uma classe onde preciso alterar todos (ou muitos) de seus atributos durante a execução, seria entao melhor colocar as execuçõesde alteração direto no main?
sabe onde acho material proprio sobre encapsulamento assim consigo visualizar ao invés de ficar supondo
Obrigado!!!
P
pcalcadoPJ
Qualquer bom livro de OOP te da o caminho das pedras.
Existe apenas um tipo de lugar onde voce rpecisa fazer isso: bordas entre paradigmas. Quando voce passa de uma interface para objetos ou para/de um SGBD, voce rpecisa deste tipo de coisa. Neste caso voce deve prover os metodos, porem com muito cuidado para nao usar estes metodos em processamento de regra de negocios.
Shoes
FieroddPJ
Ae pessoal vlw pelos helps…to aproveitando o msm topico pq no final acaba sendo o msm assunto
quando uso herança em classes java pq eu preciso criar um metodo na classe pai (msm q esse nao faça nada) pra poder reescrevê-lo nas classes filhas???
P
pcalcadoPJ
Nao entendi…
Se voce nao definir um metodo, ia sobrescrever o que?
FieroddPJ
Essa eh a duvida…
pq eu preciso criar o metodo na classe pai
pq nao posso simplesmente escreve-lo na filha e usa-lo?
isso eh parte da herança?
P
pcalcadoPJ
Procure por polimorfismo
J
jaireltonPJ
Você não precisa necessariamente cria-lo na classe pai, pode simplesmente criar na filha, a diferença é que não é possivel acessa-lo atraves da classe pai, só da filha, pois ele só existe nela, assim:
publicclassPai{publicStringmetodo1(){return"abc";}}publicclassFilhoextendsPai{publicStringmetodo2(){return"1234";}}publicclassTeste{//polimorfismoprivatePaip=newFilho();privateFilhof=newFilho();publicTeste(){//possivel pois metodo1() foi declarado na classe Paip.metodo1();//impossivel pois mesmo o objeto de p sendo Filho, está em uma variavel do tipo Pai, e Pai não tem o metodo2()p.metodo2();//possivel pois metodo1() foi herdado de Paif.metodo1();//possivel pois metodo2() foi declarado na classe Filhof.metodo2();}}
FieroddPJ
Ae pessoal vlw por todo o help…to apanhando mas blz…
entendi herança e polimorfismo (entendi nao significa q eu esteja bom no assunto ainda…hehehhe)
mas estudando herança eu fiquei em duvida de qdo devo usá-la ao inves de usar interface…não eh a msm coisa?