Mensagens entre objetos?

7 respostas
thinet

Olá amigos, gostaria de tirar a seguinte dúvida (que está me deixando muito confuso por sinal) sobre POO:

Na aula na faculdade, meu professor exemplificou a orientação a objetos com o seguinte:

  • Uma cadeira é um objeto, têm atributos e um comportamento (métodos).
  • Pessoas também podem ser objetos com características (atributos) e comportamentos(métodos);
  • Os dois objetos (pessoa e cadeira) podem se relacionar entre si, provocando reações dos seus comportamentos;

Ai que reside a minha dúvida, tentei modelar uma pessoa e uma cadeira, de forma que conforme o peso da pessoa a cadeira teria um comportamento apropriado, mais não sei “relacionar” os dois objetos, segue o código:

///+++++++++++++++ Classe Cadeira+++++++++++++++++
      public Class Cadeira {

        
              private string modelo;
  
              private string material;
             

              public Cadeira(string modelo, string material){ //construtor

                      this.modelo=modelo;

                      this.material=material;

                      }

                     

                      public void Resistencia (string modelo, string material){ // método de comportamento
 
                             if(????????){ //Essa é a condicional correta?

                                      System.out.println("Cadeira"+modelo+"irah quebrar");

                                     

                                      else {

                                              System.out.println("Cadeira"+modelo+"suporta pessoa");
 
                                      }
  
                              }
  
                      }
  
                     
  
              }
  
       
 
       // +++++++++++++ Classe Pessoa +++++++++++++++++++++++++++++
  
       
        public class Pessoa {
    
              private int peso;            
  
              class Pessoa (int peso){
  
                      this.peso = peso;
  
                      }
  
              }

A dúvida afinal é, como fazer os objetos “se relacionarem”?
Obs.: Isso não é um exercício de faculdade

7 Respostas

M

Não entendi muito bem o que você quer fazer, mas…
a grosso modo pode-se pressupor que o método Resistencia deve receber como parâmetro o peso da pessoa que ira “sentar na cadeira”, consequentemente vc usa o parâmetro ‘peso’ na condicional if()…

se puder explicar melhor o código e seu objetivo com certeza fica melhor pragente…

ps.: Encapsulamento (getters e setters) ajudariam muito ai…

flw

thinet

É exatamente isso, quero acessar o método ‘resistência’ da classe(objeto) cadeira e testa-la com o peso do objeto(classe) pessoa.

Mais eu não sei como implementar, talvez pelo main, mais ainda estou perdido!

israel.fonseca

Acho que intendi o que tu quer… vamos ver, vou fazer aqui na mesma logica soh que mais simples (creio. xD).

public class Pessoa{

private double peso;

public Pessoa(double peso){
this.peso = peso;
}

public boolean sentar(Cadeira cadeira){
return cadeira.seraQueAguenta(this) //Aqui seria a pessoa sentando na cadeira (pessoa manda msg pra cadeira)
}

}

public class Cadeira{

private double resistencia;

public Cadeira(double resistencia){
resistencia = this.resistencia;
}

public boolean seraQueAguenta(Pessoa p){ //cadeira devolve a resposta agora
if(p.getPeso > resistencia)
return false;
else
return true;
}

}

Então pelo main vc faria…

public static void main(String args[]){

Cadeira cadeira = new Cadeira(100);
Pessoa pessoa = new Pessoa(60);

System.out.println(Pessoa.sentar(cadeira)); //E vuala.

}

nao sei se intendi, muito menos se fui claro, mas espero ter ajudado. xD

thinet

Israel, gostei da resposta, tenho apenas duas dúvidas:

Para “trocar mensagens entre objetos”, eu devo incorporar um comportamento (método será que aguenta) da classe cadeira na classe pessoa?

Isso é um exemplo de “comunicação entre objetos”? Faço essa pergunta pois estou com receio de estar programando de forma procedural em java, ao contrário de OO.

Grato pela ajuda dos amigos!!!

israel.fonseca

Não tenho plena certeza do que vou dizer agora, absorva por sua conta e risco, xD (essa parte filosofica da POO sempre me pega pelo pé).

Bom, a sacada da POO é: Vc cria classes para abstrair coisas do mundo real, e cada uma dessas classes fica responsavel por fazer apenas coisas que a dizem respeito.

Nosso cenario do mundo real é uma Pessoa e uma Cadeira, então abstraimos isso na nossas classes Pessoa/Cadeira, sabemos que uma pessoa tem um peso e pode sentar em uma cadeira(como representamos na classe), a cadeira por sua vez “sabe se vai quebrar”. Em fim, agora um ponto:

De forma curta e grossa, toda vez que uma classe em seu escopo usa um método de outra classe, consideramos q essa classe mandou uma mensagem para a outra.

Quando vc diz “incorporar comportamento”, acredito que vc tenha se referido a esse pedaço:

public boolean sentar(Cadeira cadeira){ return cadeira.seraQueAguenta(this) //Aqui seria a pessoa sentando na cadeira (pessoa manda msg pra cadeira) }

“incorporar” me parece um termo não mt adequado, eu preferiria um “usar”, “faz uso”, porque a nossa classe pessoa não “sabe” se a cadeira aguenta(quem “incorpora” essa funcionalidade é a cadeira afinal), por isso ela faz uso da cadeira(mandando uma msg pra ela), e é lá na cadeira que descobrimos se se ela vai aguentar ou não.

Ahhhh. Isso é confuso. Em fim, espero ter ajudado, e não se preocupe que o começo pode parecer sinistro, e depois quando vc estudar associações/dependencias/composições ai vai ficar pior, mas depois(se vc sobreviver) vc vai começar a perceber que até da para entender numa boa. xD

Bom qualquer coisa só perguntar q eu “tento” responder. o>

thinet

Valeu cara, eu só lancei esse "incorporar " pra saber se isso era realmente uma regra, mais valeu a ajuda!!!

Allan_BSO

Suegestão.

Meu camarada,
Quando declarar uma váriavel (string)

declara, por exemplo, [size=18][color=red]S[/color][/size]tring nomeVariavel;

acho que esse eh um ponto que vc tem que melhor no seu exemplo.

valeu.

Criado 21 de março de 2008
Ultima resposta 22 de mar. de 2008
Respostas 7
Participantes 4