Conceito OOP no Java
Venho através deste pequeno artigo tentar explicar o conceito de Orientação a Objetos Java, no qual muitas pessoas desconhecem. Espero que seja útil e por favor mandem comentários.
Parte 2: Um programa de exemplo
import javax.swing.JFrame;
import javax.swing.JLabel; // Particularidade da linguagem. São bibliotecas que formam um conjunto de classes, é a importação das classes que estão dentro da biblioteca javax.swing
public class HelloWorldSwing
{
/* Classe pública, isto é, todas as outras classes podem acessar se precisarem, veremos em breve, o nome da classe é Hello WorldSwing, como não estou especificando nenhuma classe pai, isto é, não estou dizendo aqui que a classe pertence a uma subclasse, ela será subclasse de TObject. A diretiva que uso para dizer que a classe HelloWorldSwing seria filha (herdada) de uma classe seria a palavra extends, supondo de que a classe mãe de HelloWorldSwing seja HelloWorld, ficaria assim o cabeçalho da criação da classe;
public class HelloWorldSwing extends HelloWorld { .....})
*/
public static void main(String args[])
{
// Particularidade da linguagem para a instanciação de um PROGRAMA e não de uma classe, sem isso nenhum programa Java inicia
JFrame formulario=new JFrame("Hello"); /* ATENÇÃO, neste exemplo estamos criando um objeto chamado formulário. A classe desse objeto é a Jframe. Para fazer com que uma classe vire um objeto você tem que seguir a sintaxe aí em cima, que é:
JFrame = Nome da classe do objeto a ser criado, se fosse criado um edit seria JEdit
formulário = Nome do objeto, como aparece na IDE, no caso o nosso objeto chama formulário.
new = Método que usa o instanciador para criar algo novo, ele passa para o compilador que no momento da execução do código ele vai alocar na memória um objeto vindo de Jframe, esse objeto como todos os objetos são alocados na memória, e o coletor passa na memória verificando se o objeto está em uso, mas primeiro ele faz referência a classe do objeto e depois o nome do objeto, no nosso caso ele irá verificar o JFrame se está em desuso e depois irá verificar o formulário que é o nome do nosso objeto, se estiver em uso ele não excluirá, caso o contrário elimina o objeto formulário. O lixeiro se chama Garbage Collector iremos falar dele daqui a pouco, mas antes tenha em mente de que todos os componentes visuais e não visuais são carregados na memória.
Jframe = Como explicado acima é o nome da classe que irá dar origem ao objeto, que no nosso exemplo será o objeto de nome formulário.
O objeto formulário é da classe JFrame, e o parâmetro que vem na frente do nome da classe ("Hello World") é o nome do objeto no seu programa e não no ambiente Java, nome esse que irá na barra de título, pois o nome do objeto é formulário. Dependendo da classe os parâmetros mudam, tem classe que aceita números, outras aceitam métodos e outras não aceitam nada, assim por em diante.
*/
JLabel label=new JLabel("Hello,SwingWorld"); // Isso é mais uma instanciação, estamos criando um objeto JLabel com o nome de label, label será um objeto vindo da classe JLabel que tem na sua propriedade, o parâmetro ("Hello,SwingWorld") é o mesmo processo descrito mais acima, mas muda a classe, lá é um objeto formulário vindo de JFrame, aqui é um objeto de nome label vindo da classe JLabel.
formulario.getContentPane().add(label); /* Como nós criamos o formulário (um formulário limitado), agora precisamos adicionar o componente nele. Na IDE você adiciona arrastando, aqui como é na mão você tem que informar que ele será adicionado falando para o compilador, a ordem é:
criar o frame com um nome (o objeto formulario)
criar os componentes do formulário (o objeto label que irá mostrar a mensagem ("Hello, SwingWorld")
adicionar o componente no formulário
A classe JFrame tem um método de adicionar tudo o que está criado na memória, que no nosso caso é o label. Como nós criamos um objeto "formulario" ele herdou todos os métodos da classe. Então o objeto "formulario" tem um método que se chama getContentPane().add() que está na classe JFrame, o método chama o componente que quer pôr no formulário, no nosso caso o label.
O comando como descrito acima serve para chamar o objeto da memória e adicionar no formulário, repare que no método add tem como parâmetro o objeto label (getContentPane().add(label), ou seja, ele está falando assim:
Compilador, vá na memória, ache o objeto label e traga pra mim! Sobre a posição do label no formulário (se você quiser colocar o objeto label por exemplo em uma posição específica no formulário) você terá que usar métodos da classe Jframe, mas nada tão complicado, são mais métodos para usar só isso, como é somente um exemplo não vou mostrar as posições dos componentes via texto, você poderá estudar os métodos da classe posteriormente, por exemplo, pesquisando no Google.
*/
formulario.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); /* Isso é mais um método do objeto "formulario", que por sua vez herdou as informações da classe JFrame. Uma classe tem vários métodos, existe uma possibilidade de você abrir o código da classe e ver os seus métodos. Tenha em mente de que qualquer objeto que você criar terá os métodos de sua classe pai.
Quando está programando em uma IDE como o Eclipse ou NetBeans, por exemplo, após o nome do objeto precedido por um "." a ferramenta em questão te mostrará todos os métodos do objeto. O método setDefaultCloseOperation quer dizer que você vai setar o padrão de como o objeto (formulario) irá fechar, ele tem como parâmetro outro método, que pode ser usado pelo Jframe.
O método EXIT_ON_CLOSE está dentro de uma classe chamada windowsListener, esta classe é uma INTERFACE, uma classe especial onde todas as classes podem acessar os seus métodos, a classe especial implementa vários métodos de outras classes (como exemplo a classe do ornitorrinco, poderia ser uma mistura das classes pato (a pata do animal e o bico), mamífero (por mamar), peixe (por nadar). Resumindo, seria uma "salada" de métodos juntos que vira uma interface (é uma analogia, melhor aprofundar no assunto) que neste caso são constantes que não mudam como o nome de EXIT_ON_CLOSE (JFrame.EXIT_ON_CLOSE), que diz a forma padrão da qual o objeto frame irá se encerrar, nesse caso irá fechar o programa quando o usuário fechar o formulário. Tipo acabar com o programa, descarregá-lo todo da memória, inclusive outros objetos.
*/
formulario.pack(); //Repare que temos outro método do objeto formulário, herdado da classe JFrame, que é o método pack(), que serve para arrumar o tamanho do formulário de acordo com o objeto. Como o objeto label terá uma string ("Hello,SwingWorld"), que tem 18 caracteres, então o formulário será ajustado para o tamanho da largura do label. Tem como setar o tamanho do formulário e do label também, o método formulario.setSize e label.setSize são métodos comuns às duas classes que automatizam o tamanho desses objetos.
formulario.setVisible(true); //Mais um método, este serve para setar a visibilidade do formulário.
Sem esse método o formulário e nem o label será exibido na tela. Ficará na memória mas não será visível para o usuário. Como a gente já adicionou o label ao formulário, não precisamos fazer com que o label.setVisible(true) seja executado, nesse caso aparecendo o formulário (Jframe) irá aparecer o label com certeza.
/*
} // fechamento do objeto e abaixo o da classe (particularidade da linguagem)
}
import javax.swing.JLabel; // Particularidade da linguagem. São bibliotecas que formam um conjunto de classes, é a importação das classes que estão dentro da biblioteca javax.swing
public class HelloWorldSwing
{
/* Classe pública, isto é, todas as outras classes podem acessar se precisarem, veremos em breve, o nome da classe é Hello WorldSwing, como não estou especificando nenhuma classe pai, isto é, não estou dizendo aqui que a classe pertence a uma subclasse, ela será subclasse de TObject. A diretiva que uso para dizer que a classe HelloWorldSwing seria filha (herdada) de uma classe seria a palavra extends, supondo de que a classe mãe de HelloWorldSwing seja HelloWorld, ficaria assim o cabeçalho da criação da classe;
public class HelloWorldSwing extends HelloWorld { .....})
*/
public static void main(String args[])
{
// Particularidade da linguagem para a instanciação de um PROGRAMA e não de uma classe, sem isso nenhum programa Java inicia
JFrame formulario=new JFrame("Hello"); /* ATENÇÃO, neste exemplo estamos criando um objeto chamado formulário. A classe desse objeto é a Jframe. Para fazer com que uma classe vire um objeto você tem que seguir a sintaxe aí em cima, que é:
JFrame = Nome da classe do objeto a ser criado, se fosse criado um edit seria JEdit
formulário = Nome do objeto, como aparece na IDE, no caso o nosso objeto chama formulário.
new = Método que usa o instanciador para criar algo novo, ele passa para o compilador que no momento da execução do código ele vai alocar na memória um objeto vindo de Jframe, esse objeto como todos os objetos são alocados na memória, e o coletor passa na memória verificando se o objeto está em uso, mas primeiro ele faz referência a classe do objeto e depois o nome do objeto, no nosso caso ele irá verificar o JFrame se está em desuso e depois irá verificar o formulário que é o nome do nosso objeto, se estiver em uso ele não excluirá, caso o contrário elimina o objeto formulário. O lixeiro se chama Garbage Collector iremos falar dele daqui a pouco, mas antes tenha em mente de que todos os componentes visuais e não visuais são carregados na memória.
Jframe = Como explicado acima é o nome da classe que irá dar origem ao objeto, que no nosso exemplo será o objeto de nome formulário.
O objeto formulário é da classe JFrame, e o parâmetro que vem na frente do nome da classe ("Hello World") é o nome do objeto no seu programa e não no ambiente Java, nome esse que irá na barra de título, pois o nome do objeto é formulário. Dependendo da classe os parâmetros mudam, tem classe que aceita números, outras aceitam métodos e outras não aceitam nada, assim por em diante.
*/
JLabel label=new JLabel("Hello,SwingWorld"); // Isso é mais uma instanciação, estamos criando um objeto JLabel com o nome de label, label será um objeto vindo da classe JLabel que tem na sua propriedade, o parâmetro ("Hello,SwingWorld") é o mesmo processo descrito mais acima, mas muda a classe, lá é um objeto formulário vindo de JFrame, aqui é um objeto de nome label vindo da classe JLabel.
formulario.getContentPane().add(label); /* Como nós criamos o formulário (um formulário limitado), agora precisamos adicionar o componente nele. Na IDE você adiciona arrastando, aqui como é na mão você tem que informar que ele será adicionado falando para o compilador, a ordem é:
criar o frame com um nome (o objeto formulario)
criar os componentes do formulário (o objeto label que irá mostrar a mensagem ("Hello, SwingWorld")
adicionar o componente no formulário
A classe JFrame tem um método de adicionar tudo o que está criado na memória, que no nosso caso é o label. Como nós criamos um objeto "formulario" ele herdou todos os métodos da classe. Então o objeto "formulario" tem um método que se chama getContentPane().add() que está na classe JFrame, o método chama o componente que quer pôr no formulário, no nosso caso o label.
O comando como descrito acima serve para chamar o objeto da memória e adicionar no formulário, repare que no método add tem como parâmetro o objeto label (getContentPane().add(label), ou seja, ele está falando assim:
Compilador, vá na memória, ache o objeto label e traga pra mim! Sobre a posição do label no formulário (se você quiser colocar o objeto label por exemplo em uma posição específica no formulário) você terá que usar métodos da classe Jframe, mas nada tão complicado, são mais métodos para usar só isso, como é somente um exemplo não vou mostrar as posições dos componentes via texto, você poderá estudar os métodos da classe posteriormente, por exemplo, pesquisando no Google.
*/
formulario.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); /* Isso é mais um método do objeto "formulario", que por sua vez herdou as informações da classe JFrame. Uma classe tem vários métodos, existe uma possibilidade de você abrir o código da classe e ver os seus métodos. Tenha em mente de que qualquer objeto que você criar terá os métodos de sua classe pai.
Quando está programando em uma IDE como o Eclipse ou NetBeans, por exemplo, após o nome do objeto precedido por um "." a ferramenta em questão te mostrará todos os métodos do objeto. O método setDefaultCloseOperation quer dizer que você vai setar o padrão de como o objeto (formulario) irá fechar, ele tem como parâmetro outro método, que pode ser usado pelo Jframe.
O método EXIT_ON_CLOSE está dentro de uma classe chamada windowsListener, esta classe é uma INTERFACE, uma classe especial onde todas as classes podem acessar os seus métodos, a classe especial implementa vários métodos de outras classes (como exemplo a classe do ornitorrinco, poderia ser uma mistura das classes pato (a pata do animal e o bico), mamífero (por mamar), peixe (por nadar). Resumindo, seria uma "salada" de métodos juntos que vira uma interface (é uma analogia, melhor aprofundar no assunto) que neste caso são constantes que não mudam como o nome de EXIT_ON_CLOSE (JFrame.EXIT_ON_CLOSE), que diz a forma padrão da qual o objeto frame irá se encerrar, nesse caso irá fechar o programa quando o usuário fechar o formulário. Tipo acabar com o programa, descarregá-lo todo da memória, inclusive outros objetos.
*/
formulario.pack(); //Repare que temos outro método do objeto formulário, herdado da classe JFrame, que é o método pack(), que serve para arrumar o tamanho do formulário de acordo com o objeto. Como o objeto label terá uma string ("Hello,SwingWorld"), que tem 18 caracteres, então o formulário será ajustado para o tamanho da largura do label. Tem como setar o tamanho do formulário e do label também, o método formulario.setSize e label.setSize são métodos comuns às duas classes que automatizam o tamanho desses objetos.
formulario.setVisible(true); //Mais um método, este serve para setar a visibilidade do formulário.
Sem esse método o formulário e nem o label será exibido na tela. Ficará na memória mas não será visível para o usuário. Como a gente já adicionou o label ao formulário, não precisamos fazer com que o label.setVisible(true) seja executado, nesse caso aparecendo o formulário (Jframe) irá aparecer o label com certeza.
/*
} // fechamento do objeto e abaixo o da classe (particularidade da linguagem)
}
Segue agora o código completo do aplicativo:
import javax.swing.JFrame;
import javax.swing.JLabel;
public class HelloWorldSwing{
public static void main(String args[]) {
JFrame formulario= new JFrame("Hello");
JLabel label= new JLabel("Hello,SwingWorld");
formulario.getContentPane().add(label);
formulario.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
formulario.pack();
formulario.setVisible(true);
}
}
import javax.swing.JLabel;
public class HelloWorldSwing{
public static void main(String args[]) {
JFrame formulario= new JFrame("Hello");
JLabel label= new JLabel("Hello,SwingWorld");
formulario.getContentPane().add(label);
formulario.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
formulario.pack();
formulario.setVisible(true);
}
}
Um fator primordial para que sejam executados os sistemas sem as IDEs é salvar o arquivo com extensão .java precedidos pelo nome da classe, que no nosso caso é HelloWorldSwing. O nome completo do arquivo seria HelloWorldSwing.java.
Por favor, mandem críticas ou sugestões, vou tentar explicar o encapsulamento e polimorfismo, visto que já vimos aqui a herança....
Um abraço espero que essa contribuição seja útil!