CLASSES e OBJETOS em JAVA?  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
Druid
Thread.start()

Membro desde: 13/04/2006 00:09:54
Mensagens: 34
Offline

Oi pessoal!

Estou confuso com alguns mecanismos da programação JAVA.

Gostaria de saber a diferença entre CLASSES e OBJETOS em JAVA?

Porque ora instanciamos um objeto dentro de um programa e ora usamos uma referência a determinada classe apenas?

Quando eu uso o operador NEW eu estou instanciando um objeto como em:

BufferedImage buffImage = new BufferedImage(10, 10, BufferedImage.TYPE_INT_RGB );

Quais as outras formas de instanciar um objeto o JAVA utiliza?

Quando eu uso um comando deste tipo:

Graphics2D gg = buffImage.createGraphics();

O que realmente acontece aqui?

Vi na documentação do JAVA que o método createGraphics da classe BufferedImage retorna um Graphics2D (Classe ou Objeto?), então a atribuição acima citada cria um objeto gg do tipo Graphics2D "e/ou" faz uma referência ao objeto buffImage?

Vejam o método createGraphics2D da classe BufferedImage da documentação do JAVA abaixo

/**
* Creates a <code>Graphics2D</code>, which can be used to draw into
* this <code>BufferedImage</code>.
* @return a <code>Graphics2D</code>, used for drawing into this
* image.
*/
public Graphics2D createGraphics() {
GraphicsEnvironment env =
GraphicsEnvironment.getLocalGraphicsEnvironment();
return env.createGraphics(this);
}

Pergunto isso porque no código mais abaixo são executados vários métodos em "gg" para criar uma textura:

gg.setColor( Color.yellow ); // draw in yellow
gg.fillRect( 0, 0, 10, 10 ); // draw a filled rectangle
gg.setColor( Color.black ); // draw in black
gg.drawRect( 1, 1, 6, 6 ); // draw a rectangle
gg.setColor( Color.blue ); // draw in blue
gg.fillRect( 1, 1, 3, 3 ); // draw a filled rectangle
gg.setColor( Color.red ); // draw in red
gg.fillRect( 4, 4, 3, 3 ); // draw a filled rectangle

porém mais abaixo é criado um objeto TexturePaint, vejam código:

// paint buffImage onto the JFrame
g2d.setPaint(
new TexturePaint(
buffImage, new Rectangle( 10, 10 ) ) );
g2d.fill(
new RoundRectangle2D.Double(
155, 30, 75, 100, 50, 50 ) );

e o primeiro argumento usado no construtor de TexturePaint é o objeto buffImage e não gg?

O objeto buffImage e gg são o mesmo objeto, a mesma referência a memória?

Obrigado pela atenção de todos,

Druid®
TiagoFoil
JavaGuru
[Avatar]

Membro desde: 22/02/2005 19:46:49
Mensagens: 205
Offline

Dica: Objetos são instâncias das Classes. Classes são como moldes, elas definem quais atributos e funcionalidades os objetos de seu tipo terão.
[MSN] [ICQ]
klarq
JavaChild
[Avatar]

Membro desde: 14/02/2005 11:27:07
Mensagens: 124
Offline

http://www.oreilly.com/catalog/hfjava2/chapter/index.html

Boa Leitura (faça o download dos samples chapters)
Leandro BSB
JavaChild
[Avatar]

Membro desde: 15/06/2003 00:00:31
Mensagens: 132
Offline


Gostaria de saber a diferença entre CLASSES e OBJETOS em JAVA?


Não existe "diferença entre CLASSES e OBJETOS em JAVA". Existe a diferença, como os colegas muito bem colocaram, mas esta diferença independe do JAVA.

[]s

Leandro
demys
JavaGuru

Membro desde: 05/06/2006 09:24:16
Mensagens: 206
Offline

CLASSE é a definição.
OBJETO é a instancia.

A definição de uma CLASSE ocorre apenas uma vez no programa.
A instancia de um OBJETO pode ocorrer quantas vezez vc precisar.

Vc pode ter uma CLASSE e instanciar quantos OBJETOS vc precisar desta CLASSE.

A CLASSE vc cria enquanto vc escreve seu codigo fonte.
O OBJETO vc cria quando vc usa new em seus programas. (Ou quando chama algum metodo que cria p/ vc e retorna o objeto pronto, tipo um getConnection() que retorna uma instancia de um objeto Connection. Neste caso vc não usou o new mas em algum lugar dentro do metodo getConnection() ou em algum outro metodo que ele chamou antes de te retornar ele usa o new p/ criar o objeto Connection que vai retornar p/ vc.)

Druid
Thread.start()

Membro desde: 13/04/2006 00:09:54
Mensagens: 34
Offline

OK pessoal, valeu pela resposta, era exatamente o que eu pensava, mas porque cargas d'água ninguém consegue me dizer o que é mais óbvio nas perguntas que eu fiz acima, ou seja:

Quando eu uso um comando deste tipo:

Graphics2D gg = buffImage.createGraphics();

O que realmente acontece aqui?

Vi na documentação do JAVA que o método createGraphics da classe BufferedImage retorna um Graphics2D (Classe ou Objeto?), então a atribuição acima citada cria um objeto gg do tipo Graphics2D "e/ou" faz uma referência ao objeto buffImage?

É isso que eu gostaria de saber, o que acontece aqui? Por favor, eu quero saber o que acontece, o porque de eu usar o operador de atribuição acima "=" e porque no código abaixo eu tenho uma referência ao objeto "buffImage" e não a "gg" (que eu ainda não sei se um objeto instanciado ou uma classe?).

Eu coloquei este código no outro índice do forum por pensar ser uma dúvida simples, mas parece que não, e mesmo aqui no avançado, ninguém consegue me responder, porque?

Agradeço a atenção e a paciência de todos na espera de uma resposta que venha realmente me esclarecer esse mecanismo do JAVA que ainda esta obscuro.

Druid®
rodrigovfsilva
Debugger
[Avatar]

Membro desde: 22/07/2005 14:44:50
Mensagens: 69
Localização: Rio de Janeiro - RJ
Offline

Você está criando o objeto gg do tipo Graphics2D e atribuindo a ele uma instância gerada pelo método createGraphics() do objeto buffImage.
Este método provavelmente retorna um objeto do tipo Graphics2D.
Nada além disso!!!

Será que já ficou claro o que é OO???
Seria muito bom você dar uma olhadas nesses links passados e estudar mais a teoria antes de ir a fundo no técnico.


Qualquer dúvida estamos aí!!!

Boa sorte!!!

Rodrigo Vinicius - RJ
Engenheiro de Software - Java EE
[Email] [MSN] [ICQ]
Druid
Thread.start()

Membro desde: 13/04/2006 00:09:54
Mensagens: 34
Offline

OK meu amigo rodrigovfsilva!

Com isso voce quer dizer que o comando de atribuição faz uma referência do objeto "buffImage" para o objeto "gg", por isso quando os métodos todos criam a textura no objeto Graphics2D gg ele esta referenciando o objeto "buffImage", por isso quando eu uso o comando: "g2d.setPaint( new TexturePaint( buffImage, new Rectangle( 10, 10 ) ) );" eu uso buffImage como argumento e não "gg"?

Abrigado pela atenção,

Druid®
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team