segunda-feira, 21 de janeiro de 2008

[8] Criando o primeiro objeto


No Post anterior tivemos nosso primeiro contato formal com a Programação Orientada a Objetos. Aprendemos um pouco sobre abstração de classes a partir de uma entidade do mundo real ou uma entidade criada por nós baseada em conceitos do mundo real. Neste Post aprenderemos a como implementar classes e a como criar objetos em Java.


Criando a primeira classe em código

Se você não percebeu ainda, desde o primeiro código-fonte do nosso tutorial que já trabalhamos com, no mínimo, uma classe. Se não te recordas, o arquivo HelloWorld.java tem o seguinte conteúdo:

public class HelloWorld{

public static void main(String[] args){
System.out.println("Hello World");
}

}

HelloWorld é uma classe, você a declarou. A classe HelloWorld não tem atributos, e tem apenas um método: main. O método main é um método especial, reservado pela JVM para que um programa Java possa ser executado. Falaremos sobre ele adiante.

Para escrevermos, ou melhor, para declararmos nossa primeira classe pós-HelloWorld vamos resolver o exercício do Post anterior, que seria modelar uma classe baseada em uma janela do Windows. Chamaremos nossa classe de "Window":

Window

Atributos:

- largura
- altura
- posicaoX
- posicaoY
- estaMaximizada


Métodos:

- abrir
- fechar
- minimizar
- restaurar
- mover

A próxima fase de nossa abstração será adaptar a modelagem à linguagem Java. Devemos prosseguir com as seguintes premissas:

* todo atributo tem um tipo
* todo método tem um retorno.

Os tipos dividem-se em: tipos primitivos e tipos de referência. Para o exemplo da classe Window, faremos uso apenas de tipos primitivos, ou seja, tipos que não são classes. São exemplos de tipos primitivos: números inteiros, números reais e valores booleanos - true ou false. Os tipos primitivos são representados por palavras-chaves específicas. Por exemplo, para indicar que um atributo armazenará um valor que seja um número inteiro, utilizamos a palavra chave int.

Vamos começar a implementar a classe Window:

public class Window{

int largura;
int altura;
int posicaoAncoramentoX;
int posicaoAncoramentoY;
int posicaoX;
int posicaoY;
boolean estado;

}


Note que apenas os atributos da classe Window foram declarados, restando ainda a implementação de seus métodos.

Métodos são declarados para executarem ações referentes à classe em questão.
Após executar todas suas linhas de comando um método é finalizado.

Um método é executado a partir do momento em que ele é chamado, e todo método retorna algum valor, seja ele um tipo primitivo, um tipo de referência ou até mesmo void.
Tenha em mente que void representa um valor vazio, mas é um valor, o que é diferente de não ter um valor.


Nesta classe especificaremos que cada um dos métodos da classe Window retornará "vazio", usando a palavra-chave void. Faremos uma melhor explanação sobre métodos em Posts posteriores.

Observe como a classe Window será implementada com a inclusão de seus métodos:



Teoricamente a classe Window, até o momento, não possui funcionalidade alguma, pois seus métodos não possuem códigos a serem executados.


Criando um objeto do tipo Window

Antes de criar um objeto do tipo Window você precisa fazer o que se pede:

* Crie uma nova classe chamada Window no seu ambiente de programação e cole nela o conteúdo do código da classe Window exibido acima
* Codifique os 5 métodos da classe Window com comandos System.out.println(). Escreva mensagens como "A JANELA FOI MINIMIZADA" para o método minimizar(); "A JANELA FOI RESTAURADA" para o método restaurar(), e assim por diante. Observe como ficaria com o método mover():
public void mover(){
System.out.println("A Janela teve sua posição modificada");
}

Por fim, sem método main nossa classe não pode ser testada. Para provar que a classe Window não necessariamente precisa ser composta por um método main para ser testada, vamos criar outra classe chamada WindowTest:

public class WindowTest{

public static void main(String[] args){

}

}
Agora temos duas classes: Window e WindowTest. A classe WindowTest não tem nenhum atributo e apenas um método, que é o método main. Como já foi dito, o método main é a porta de entrada para que seu programa seja executado. Porém, precisamos codificar algo dentro dele, caso contrário a JVM não terá o que executar no nosso programa. Criaremos então nosso primeiro objeto em Java. Como já sabemos que todo objeto tem um tipo, criaremos um objeto do tipo Window.

A princípio você deve seguir a seguinte sintaxe para a criação de objetos em Java:

public void mover(){
System.out.println("A Janela teve sua posição modificada");
}


TIPO_DO_OBJETO NOME_DO_OBJETO = new TIPO_DO_OBJETO ( ) ;


O parâmetro TIPO_DO_OBJETO nada mais é que a classe que você queira criar objetos derivados dela. Em outras palavras, de que tipo será seu objeto. No nosso caso o objeto será do tipo Window.

O parâmetro NOME_DO_OBJETO depende apenas de você. Você nomeará o objeto que está sendo criado como desejar - com algumas exceções que veremos em Posts posteriores, claro.

= é nada mais que um operador binário utilizado para atribuições. Ele é um operador binário por precisar de dois operandos: um à sua esquerda, outro à sua direita. Seu funcionamento consiste em atribuir o valor do operando à direita para o operando à esquerda.

new é uma palavra-chave da linguagem Java que criará o objeto de fato. Na vida real é mais comum que você encontre o termo instanciar uma classe do que "criar um objeto".

TIPO_DO_OBJETO ( ) é o que chamamos de construtor
. Falaremos melhor sobre construtores em Posts posteriores.

Nosso código dentro do método main ficará da seguinte maneira:

Window objetoWindow = new Window();

Já que agora temos um objeto "concreto", podemos manipulá-lo sem problemas. Lembre-se que dentro de métodos os comandos são lidos da esquerda para a direita e de cima para baixo. Então logo após a criação do objeto objetoWindow vamos fazer algumas modificações nos seus atributos:

objetoWindow.largura = 300;
objetoWindow.altura = 300;
objetoWindow.posicaoX = 25;
objetoWindow.posicaoY = 100;
objetoWindow.estaMaximizada = true;

Logo em seguida insira os comandos:

System.out.println(objetoWindow.largura);
System.out.println(objetoWindow.altura);
System.out.println(objetoWindow.posicaoX);
System.out.println(objetoWindow.posicaoY);
System.out.println(objetoWindow.estaMaximizada);

Execute seu programa e você verá no console os seguintes resultados impressos na tela:

300
300
25
100
true

Observe que os valores exibidos são os mesmos que você atribuiu no início do código. Esta é uma das funções de um atributo: armazenar valores.

Já que conseguimos testar uma das funcionalidades dos atributos de uma classe, vamos testar agora os métodos do objeto objetoWindow:

objetoWindow.mover();
objetoWindow.restaurar();

O console deverá exibir algo como - dependendo do que você escreveu:

A Janela teve sua posição modificada
A Janela foi restaurada



Parabéns, você criou seu primeiro objeto em Java e até o manipulou alterando e exibindo os valores de seus atributos e chamou seus métodos. Para fixar sua compreensão faça os exercícios abaixo:


EXERCÍCIOS

1. Ainda no objeto objetoWindow, escolha um de seus atributos e codifique uma seqüência de comandos como:

* alterar o valor do atributo
* imprimir valor do atributo
* alterar o valor do atributo
* imprimir valor do atributo
* alterar o valor do atributo
* imprimir valor do atributo

2. Crie um segundo objeto, e manipule e imprima os valores de seus atributos.


Ficamos por aqui. Um abraço e até a próxima



2 comentários:

Francisco disse...

Como javeiro de primeira viagem, estou conseguindo aprender muito com as dicas do seu blog. Mas, não estou conseguindo executar o TestWindow. O Eclipse retorna o erro: "Window cannot be resolved to a type". Espero que você possa me ajudar a seguir aprendendo.

andrehbl disse...

Oi, Francisco. Que bom que o blog está lhe ajudando no seu aprendizado. Vejamos seu problema: a mensagem "Window cannot be resolved to a type" está sendo gerada porque sua classe TestWindow não está enxergando a classe Window. Portanto, para que você teste a classe Window da maneira que você quer, você deve deve criar duas classes: TestWindow.java e a própria Window.java.

TestWindow conterá um método main, e dentro do método main você deve criar o objeto Window. Algo como:

public class TestWindow{

public static void main(String[] args)
{
Window janela = new Window();
}

}

Se a classe Window for criada, então você não terá mais problemas de "XXX cannot be resolved to a type". A tradução desta frase indica que o TIPO que você está tentando atribuir a uma variável não é reconhecido pelo projeto.

Espero ter ajudado. Qualquer problema, comente novamente. =)

Um abraço