Duvidas de OO

Pessoal, o que significa isso em OO?
“Dimension dim = getToolkit().getScreenSize();”
Estou chamando dois métodos?
Se fosse “Dimension dim = getToolkit()”, entendo que o retorno do método getToolkit() seria do tipo Dimension, e armazenado no objeto dim. Minha resposta estaria correta? Porque de dois métodos separados por ponto? De que matéria estamos falando? Orientação à Objetos mesmo? Algum capítulo em específico?
Fiz todas essas perguntas porque depois de aprender um pouco de OO, aparecem coisas que nunca vi, e assim duvido da qualidade do meu aprendizado, imagino que tenha lacunas, e vocês me ajudando dizendo onde eu possa encontrar a resposta disso, eu possa correr atrás e não ficar toda hora amolando com perguntas estranhas…

1 [ ]
airmigjr

Vou colocar um exemplo mais simples.

[code]class Pessoa {

Endereco getEndereco();

}

class Endereco {

}

Endereco endereco = getPessoa().getEndereco();
//Que eh o mesmo que
Pessoa pessoa = getPessoa();
Endereco endereco = pessoa.getEndereco();[/code]

O que a primeiro faz chamando dois métodos separados por ponto é recuperar a pessoa, pelo método getPessoa(), e depois recuperar o endereço da pessoa pelo getEndereco() sem necessidade de criar a variável pessoa para isso.

[code]class A {
B getB();
}

class B {
A getA();
}

A a = new A(); // crio A
a.setB(new B()); // crio um B para A
a.getB().setA(a)); // defino o A de B, cria uma referencia cíclica
B b = a.getB().getA().getB().getA().getB().getA().getB(); // Como os objetos estão amarrados, posso fazer isso sem problemas.[/code]

lsjunior,
agradeço imensamente sua resposta. Porém, será que vc teria um exemplo mais mobral, porque eu ainda não entendi.
Isso tudo tem um nome? Tipo, preu procurar a literatura no google se o seu próximo exemplo não funcionar para minha mente primata?

1 [ ]
airmigjr

Quanto ao exemplo:

class A {
B getB();
}

class B {
A getA();
}

A a = new A(); // crio A - [color=red]ATÉ AQUI ENTENDI PERFEITAMENTE[/color]
a.setB(new B()); // crio um B para A - [color=red]AQUI ENTENDI MAIS OU MENOS[/color]
a.getB().setA(a)); // defino o A de B, cria uma referencia cíclica - [color=red]A PARTIR DAQUI NÃO ENTENDI MAIS NADA[/color]
B b = a.getB().getA().getB().getA().getB().getA().getB(); // Como os objetos estão amarrados, posso fazer isso sem problemas.

procure por chamadas a metodos aninhadas. É Basicamente o que o amigo acima explicou , não tem muito oque acrescentar…

Vo tenta esclarecer…

[code][quote]
class Pessoa {

Endereco getEndereco();

}

class Endereco {

}
//Pessoa possui um endereço , que é retornado pelo metodo getEndereço , só que para chama-lo voce precisa da instacia de pessoa … sakou?

//Aqui o meu endereço = a pessoa que instanciei(retorna pessoa) + o metodo que retorna o endereço desta pessoa…
Endereco endereco = getPessoa().getEndereco();
//Que eh o mesmo que
Pessoa pessoa = getPessoa();
Endereco endereco = pessoa.getEndereco();

[/quote][/code]

Sim, isso tem um nome: Fluent Interface.
Abraço!

airmigjr, isso não é OO.
Isso é um recurso fornecido pela linguagem que, pode ou não, estar presente em outras linguagens que suportam OO.

O caso é, suponha que você é o objeto pessoa, da classe Pessoa.
Você, como qualquer objeto, possui atributos e realiza ações, os métodos.

Suponha que um dos atributos é o objeto CPF, da classe Documento.

Quando você precisa passar o CPF para alguém, primeiro é solicitado o nome e, então, o CPF, correto?

Isso significa que, foi acionado o método getPessoa, que retornou você, depois o método getNome e então o método getDocumento, que, por ter passado por herança, retornou o CPF

Pessoa mae = new Pessoa():
Pessoa airmigjr = new mae.getPessoa(); // nasceu vivo
airmigjr.setNome("nomeDeBatismo");
String nome = airmigjr.getNome(); // retorna o nome dado a você por teus pais.

Documento doc = airmigjr.getDocumento();//devolve o cpf
//lembre-se, documento é uma classe filha da superclasse documento, isso é herança, é OO

Isso tudo você conhece.

Agora, java permite que você trabalhe com os métodos e atributos de uma classe, mesmo que você nao a veja.
Ele manterá o objeto em memória e, por referência, você pode invocar os métodos de tal objeto.

String nome = mae.getPessoa()/*nasceu*/.getNome();/*retorna o nome da pessoa*/
Documento doc = mae.getPessoa()/*aqui é como se fosse Pessoa pessoa = mae.getPessoa();
Documento doc = pessoa.getDocumento();
*/.getDocumento();

Ou seja, você não invoca um método do método anterior, mas do resultado dele:

public class Teste {
	public static void main(String args[]){
		Teste ta = new Teste();
		ta.setA(1);
		ta.setB(2);
		ta.setC(3);
		Teste tb = new Teste();
		tb.setA(1);
		tb.setB(2);
		tb.setC(3);
		Teste tc = new Teste();
		tc.setA(1);
		tc.setB(2);
		tc.setC(3);
		System.out.println("Resultado: " + (ta.getA() + ta.getB() + ta.getC() - tb.getA() - tb.getB() + tb.getC() - tc.getA() - tc.getB() - tc.getC()));
	}
	int a; 
	int b;
	int c;
	public int getA() {
		return a;
	}
	public void setA(int a) {
		this.a = a;
	}
	public int getB() {
		return b;
	}
	public void setB(int b) {
		this.b = b;
	}
	public int getC() {
		return c;
	}
	public void setC(int c) {
		this.c = c;
	}
}

Se você somar 1 + 2 + 3 -1 -2 + 3 - 1 - 2 - 3 = 0, que é o que a JVM enxerga ao executar o método acima.

Continuando com Pessoa.

public class Pessoa { private String nome; String getNome() { return this.nome; } void setNome(String nome) { this.nome = nome; } }

A classe acima tem um atributo(nome). Para pode alterar o nome eu obrigatoriamente devo usar o método set e para recuperar o método get(encapsulamento). A classe abaixo mostra como testá-la.

[code]public class Main {
public static void main(String [] args) {
Pessoa pessoa = new Pessoa();
pessoa.setNome(“lsjunior”); // Definimos o nome da pessoa
// Sem criar variável
System.out.println("Pessoa: " + pessoa.getNome()); // Recuperamos o nome da pessoa
// Criando uma variável
String nome = pessoa.getNome(); // Idem ao exemplo anterior, mas vamos criar uma variável para referenciar o retorno do método get
System.out.println("Pessoa: " + nome); // e imprime o nome, igual a parte anterior

// Chamando métodos sequencialmente
String nomeMaiusculo = nome.toUpperCase(); // Colocamos em maiúsculo
String nomeSemEspacos = nomeMaisculo.trim(); // Tiramos os espaços do início e fim
String nomeFinal = "----"+ nomeSemEspacos + "----";   // E adicionamos uns traços pra completar

// As 3 linhas anteriores pode ser feita dessa forma
nomeFinal = “----” + nome.toUpperCase().trim() + “----”; // Como foi mostra anteriormente, uma String tem o método toUpperCase() que retorna uma nova String com os caracteres em maiúsculo, sendo que uma String também tem o métódo trim(), que remove os caracteres de espaço e também retorna uma nova String. O que fizemos aqui foi que não declaramos uma variável para cada saída do método, já pegamos o retorno do método(String) e chamamos outro método da String retornada.
}
}[/code]

mausexdd,
vamos ver se eu entendi,
o trecho abaixo:

Endereco endereco = getPessoa().getEndereco();

Estou criando um objeto endereco do tipo Endereco, com um conteúdo que será retornado pelo método getEndereco() que é um método (getter) que está retornando o endereço de um objeto pessoa que por sua vez retornou o objeto pessoa sei lá de onde… é isso mesmo?

1 [ ]

[code]class Pessoa {

Endereco getEndereco();

}

class Endereco {

}
//Pessoa possui um endereço , que é retornado pelo metodo getEndereço , só que para chama-lo voce precisa da instacia de pessoa … sakou?

//Aqui o meu endereço = a pessoa que instanciei(retorna pessoa) + o metodo que retorna o endereço desta pessoa…
Endereco endereco = getPessoa().getEndereco();
//Que eh o mesmo que
Pessoa pessoa = getPessoa();
Endereco endereco = pessoa.getEndereco();[/code]

lsjunior,
putz cara, agora esclareceu bem…
só ficou uma dúvida:

na pergunta original está assim:

Dimension dim = getToolkit().getScreenSize();

na sua resolução está assim:

nomeFinal = "----" + nome.toUpperCase().trim() + "----";

Vejo que você chamou trim() para o retorno de toUpperCase(), que seria tirar os espaços do conteúdo de nome, que já havia sofrido o resultado do método para colocar todas as letras em maiúsculo correto?
Ou seja, olhando pela ordem dos acontecimentos:

  1. João Gilberto
  2. JOÃO GILBERTO
  3. JOÃOGILBERTO
    acertei?
    A questão: Você usou o objeto [color=red]nome[/color].toUpperCase().trim(). E no código onde eu tive a dúvida, qual foi o lance? Porquê não tem nenhum objeto antes de get.Toolkit()?

Cara, até agora, pra vc e para todos, só um grande e sincero obrigado…