Encapsulamento

Olá pessoal, sou novo nesse forum e tenho uma dúvida que creio que seja básica.
Primeiramente, preciso ver se entendi direito. Me corrijam se estiver errado, por favor!

Em java, a interação de valores de variáveis entre métodos só pode ser feita através
de getters e setters. Poderiamos associar essa interação com o ponteiro * usado em C.

Exemplo:
dado (na main class)
tem seu valor mudado no method x(get ou set?)
tem que voltar para main class com um valor novo(get ou set?)
e assim ter seu valor mudado no method y(get ou set?)
voltando depois para a main class (get ou set?)

Daí pra frente está tudo meio nebuloso na minha cabeça.

Onde é que eu posso mudar o valor da variável? Em um getter, ou em um setter?
E se eu quiser trocar o valor de mais uma variavel?
Nesse caso, nao faria sentido retornar dois valores. Correto?
É necessário que o method seja int, ou outra coisa? Ele não pode ser void?
E o this.? eu acho que nao entendi direto.

Tenho outras dúvidas também. Como copiar todos os valores dos elementos
de uma array para uma outra expandida (tem um número de elementos “elementos + 1”),
sendo que o último elemento será incializado em seguida?

Aqui está um pedaço do cógigo que escrevi:
Quero interagir as duas arrays de booleans.

   
    public int aaaaa = 2;
    public int[] bbbbb = new int[aaaaa]; 
    public int[] ccccc = new int[aaaaa];
      public int counter;
    public int[] ddddd = new int[aaaaa];
    public boolean[] eeeee = new boolean[aaaaa];
    
            private int[] expand(int[] array, int size) {                
                int[] auxarray = new int[size];
                    System.arraycopy(array, 0, auxarray, 0, array.length);

\ aqui! como eu posso copiar tudo que tinha na array anterior para a nova?

            return auxarray;
            }
            
            void reinicialize_array_values () {
                for (counter = 0; counter < aaaaa; counter ++) {
                    ccccc[counter] = 1;
                    ddddd[counter] = counter;
                    bbbbb[counter] = counter;
                } 
            }
            
            void create_new_aaaaa () {
               
               aaaaa = aaaaa + 1;
              
                 /* expande o numero de elementos de bbbbb && ccccc && ddddd
                  * arrays para aaaaa + 1 */
                              
               ccccc = expand(ccccc, aaaaa);
               bbbbb = expand(bbbbb, aaaaa);
               ddddd = expand(bbbbb, aaaaa);

// essa parte do codigo é a parte que eu incializo as arrays novas com um elemento a mais.

               for (counter = 0; counter < aaaaa; counter ++) {             
               ddddd[counter] = counter;
               }
               for (counter = 0; counter < aaaaa; counter ++) {             
               bbbbb[counter] = counter;
               }
               for (counter = 0; counter < aaaaa; counter ++) {
               ccccc[counter] = 1;
               }           
// aqui! eu quero saber o que eu tenho que fazer para que ddddd, bbbbb, ccccc, e aaaaa mudem
// na classe principal para que os outros metodos o vejam
            }

            boolean [] calculate_eeeee (int aaaaa) {
                
            boolean[] aux_eeeee = new boolean[aaaaa];
                
                for (counter = 0; counter < aaaaa; counter ++) {
                    if (ccccc[counter] == 0) {
                        aux_eeeee[counter] = false;
                    }
                    else {
                        aux_eeeee[counter] = true;
                    }
                }
                
                for (counter = 0; counter < aaaaa; counter ++) {
                    if (ddddd[counter] == bbbbb[counter]) {
                        aux_eeeee[counter] = false;
                    }
                    else {
                        aux_eeeee[counter] = true;
                    }
                }
                
            return aux_eeeee;    
            }

            void show_states() {
                eeeee = calculate_eeeee(2);
               
                    for (counter = 0; counter < aaaaa; counter ++) {
                        if (eeeee[counter] == true) {
                            System.out.print("aaaaa"+ counter +" is enabled\n");
                        }
                        if (eeeee[counter] == false) {
                            System.out.print("aaaaa "+ counter +" is disabled\n");
                        }
                    }                            
            }

Cara para ser sincero, não li o código inteiro, por causa de alguns motivos.
1- Use nomes de variáveis específicas como: tamanhoVetor, vetorBooleano, vetorOriginal, vetorInvertido. É bem melhor do que os nomes aaaaa, bbbbb, ccccc, etc.
2- Como assim "Quero interagir as duas arrays de booleans. ". Não entendi a pergunta. Só encontrei um array booleano, e não dois no código.

Respondendo as perguntas:

Os métodos gets e sets servem de acesso para outras classes acessarem os atributos desta. Se todo o seu progama funciona em uma única classe seus atributos não necessariamente precisariam de modificadores de acessos (public, private, protected), pois sua classe obrigatoriamente já tem acesso aos seus próprios atributos.

Resumindo, os métodos Gets e Sets servem para que outras classes acessem seus valores caso você permita isso ou não. Exemplo:

class Teste{
     private int resultado;
     
     public void setResultado(int valor){ this.resultado = valor; }
     public int getResultado(){ return this.resultado };
}

class Main{
  public void programa(){
     Teste teste = new Teste();
     teste.setResultado(10);
     System.out.println(teste.getResultado);
  }
}

Se eu quisesse poderia impedir o acesso de outras classes poderem ver o valor ou alterar o valor de minha variavel. Por exemplo uma senha ou serial de uma classe.
No exemplo abaixo eu tenho apenas como recuperar o valor da senha, e não posso altera-lá.

class Teste{
     private int senha = 900;
     public int getSenha(){ return this.senha };
}

class Main{
  public void programa(){
     Teste teste = new Teste();
     System.out.println(teste.getSenha);
     // Compilation Error na linha abaixo, pois não existe o método setSenha
    // teste.setSenha(100); 
  }
}

kra se eu entendi direito, o objetivo eh copiar ‘um’ array pro ‘otro’ de forma que o ‘otro’ tenha um tamanho maior que o anterior. Isso éh facil:


int[] vetorMenor= new int[4];
int[] vetorMaior = new int[a.length+1];

vetorMenor[0]=1;
vetorMenor[1]=434;
vetorMenor[2]=333;

for(int i=0; i<vetorMenor.length; i++)
{
     vetorMaior [i]=vetorMenor[i];
}

Pronto! O array ‘vetorMaior’ vai conter todas as informações do array ‘vetorMenor’ e vai ter mais espaços que o anterior.

Com relação à get e set, fica o que falaram ai em cima…

você ainda pode usar o método estático System.arraycopy(vetorOriginal, posicaoQueComecaACopiar, vetorDestino, posicaoQueComecaAGravar, quantosElementosCopiar)

boolean[] b = {false, false, true, false, true}; boolean[] c = new boolean[7]; // todos os 7 são false, que é a inicialização default do boolean System.arraycopy(b, 0, c, 0, 5); // agora c vale {false, false, true, false, true, false, false}