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.
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)
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....
[1] Comentário enviado por removido em 14/12/2009 - 19:18h
Ih cara, desculpe te falar, mas esse artigo não é sobre programação orientada a objetos, e sim, apenas alguns conceitos básicos de classes e objetos, que fazem PARTE de POO. POO tem muitos outros conceitos envolvidos, como polimorfismo, encapsulamento, etc. Você se perdeu um pouco também no exemplo ali dos órgãos humanos. Por exemplo, dedos nunca seriam subclasse de mão, pois dedos não são mão. Dedos seriam uma COMPOSIÇÃO de mão. Você deveria ter usado um exemplo bem mais simples, como pessoa, funcionário, etc. Aliás, todos os órgãos seriam uma COMPOSIÇÃO do corpo humano. Se fosse o caso, deveria ser, por exemplo, dedos como superclasse de uma classe dedos do pé e outra classe dedos da mão. Enfim, valeu pelo artigo, mas me senti obrigado a dar alguns esclarecimentos para quem for lê-lo.
[2] Comentário enviado por removido em 15/12/2009 - 07:22h
("Ih cara, desculpe te falar, mas esse artigo não é sobre programação orientada a objetos, e sim, apenas alguns conceitos básicos de classes e objetos", - renatobach) . Sim isso é um conceito veja o título do post, os exemplos são para quem está começando, exemplos do mundo real fica mais difícil, e no final do artigo, eu escrevi que vou tentar explicar em outros artigos, o encapsulamento e polimorfismo, a idéia e estimular a continuarem escrevendo o artigo. Quem sabe mais pra frente podemos colocar exemplos reais, t+.
[3] Comentário enviado por removido em 15/12/2009 - 08:07h
Bom, blz, mas como diz o título: "Conceito de OOP", e isso não é o conceito de OOP, mas uma parte dele, como eu disse anteriormente, alguns conceitos de classes e objetos. Talvez pra ficar mais claro o artigo deveria vir em partes, já que você pretende escrever outros para complementar a idéia, tipo "parte 1", etc. Enfim, não entenda como crítica, mas realmente falta bastante coisa. Até pq o relacionamento das classes não se faz apenas por herança. Pode ser por composição, agregação, associação. Enfim.
[4] Comentário enviado por wishsometimes em 15/12/2009 - 10:07h
Bom dia à todos, bom o artigo para quem está iniciando é bastante construtivo. Claro que quem for se aventurar em Java sabe que o Java não se resume em apenas duas páginas....mas convenhamos que a iniciativa é muito boa e devemos lembrar que para saber criticar, devemos não esquecer da humildade que muitos programadores não tem e tentar fazer melhor....meu recado está dado.
Flw
[8] Comentário enviado por mago_dos_chats em 15/12/2009 - 19:57h
É velho... valeu tua intenção de tentar dar algumas ideias ai de POO, mais seira melhor se vc tentasse começar escrevendo sobre algumas areas mais simples, porque explicar POO não seria tao simples assim.
Blz..... mais valeu ai...
[9] Comentário enviado por removido em 15/12/2009 - 20:04h
"Bom dia à todos, bom o artigo para quem está iniciando é bastante construtivo." kkkkkk SÓ SE FOR CONSTRUTIVO PRA VC, construtivo pra mim é algo que tem sentido, se isso for construtivo pra vc boa sorte
[12] Comentário enviado por SamL em 16/12/2009 - 11:26h
"wishsometimes, se for olhar o perfil da galera que comentou aqui, todos ja escreveram artigos ou dicas... entao da uma olhada blz..."
Bem amigo mago_dos_chats, sugiro a você que dê uma olhada também, pois os usuários:
xupaxupaxuap, uahuahuahauhauh, foxbit3r e katatall
NÃO ESCREVERAM UMA LINHA de artigo para o VOL, NEM uma Dica E NEM UM POST se quer, ou seja, o direito deles de julgar alguma coisa aqui É MÍNIMO.
Chamo a atenção aos dois primeiros que citei, no perfil deles tem muita coisa em comum, tipo o nome da cidade escrito da mesma forma (com letra minuscula) e a data de cadastro no site, então suspeito que são uma só pessoa fazendo um monte de idiotice aqui, além de ser um COVARDE que omite seu nome verdadeiro no perfil.
[13] Comentário enviado por cristnasciment em 16/12/2009 - 13:29h
Caro Sam L.
Em primeiro lugar quero dizer q tenho 2 certificações java (SCJP e SCWCD), e trabalho com desenvolvimento tem 3 anos.
Vou além do que eu disse: O artigo está um lixo !!!
Como o autor tem a audácia de criar um artigo sobre conceitos de OO e não define o que é:
OBJETO, CLASSE, METODO, ATRIBUTOS, INTERFACE, HERANÇA, POLIMORFISMO, ENCAPSULAMENTO, ABSTRAÇÃO
GENERALIZAÇÃO, etc.
além disso, está cheio de erros: TOBJECT, propriedades
O que dá pra entender é que o autor "conheçe bem" DELPHI e está se aventurando no JAVA.
[15] Comentário enviado por SamL em 16/12/2009 - 14:23h
"Em primeiro lugar quero dizer q tenho 2 certificações java (SCJP e SCWCD), e trabalho com desenvolvimento tem 3 anos."
Pois bem, eu não duvidei do conhecimento de NÍNGUEM no post anterior, apenas afirmei que NÃO ESCREVERAM Artigos/Dicas/Post no VOL e com isso o direito de julgamento dos mesmos é mínimo, na minha opinião.
"Vou além do que eu disse: O artigo está um lixo !!!"
Então katatall, ou melhor, Cristiano, a discussão aqui não se trata do conteudo do artigo, mas de como o autor está sendo julgado.
Você pode possuir 2 certificações Java e trabalhar com densenvolvimento a mais de 3anos, mas pense bem e daí, será que isso serviu pra alguma coisa além do trabalho?
Tipo, você aprendeu a pensar melhor nos sentimentos dos outros antes de atirar uma pedra?
Você sabe o que é quociente emocional(QE)? Ou Inteligencia Emocional?
Supondo que possua um auto grau de QE, você antes de comentar teria se imaginado no lugar do autor do artigo recebendo a sua bela crítica destrutiva e com isso diminuiria a carga de destruição para um nível onde o autor pudesse absorver/aprender a fazer melhor em um outro artigo.
Ao invés disso, como possui 2 certificações Java, você resolveu criticar.
Você entendeu o que eu disse? Não estou falando isso para defender nínguem, até eu achei o Artigo com pouco conteúdo, mas não me senti no direito de "derrubar" a vontade de ajudar do autor, VONTADE DE AJUDAR ISSO É O QUE IMPORTA.
"Como o autor tem a audácia de criar um artigo sobre conceitos de OO e não define o que é:
OBJETO, CLASSE, METODO, ATRIBUTOS, INTERFACE, HERANÇA, POLIMORFISMO, ENCAPSULAMENTO, ABSTRAÇÃO, GENERALIZAÇÃO, etc."
Não quero começar uma briga aqui nos comentarios, mas imagino que você Cristiano gosta de desafios, pois possui muito conhecimento sobre OO.
Então lhe desafio a criar um Artigo sobre os conceitos de OO, isso é uma boa idéia. Assim todos poderemos avaliá-lo da melhor forma possível e sem ressentimento.
Espero que compreenda.
[18] Comentário enviado por removido em 16/12/2009 - 17:45h
Bom já ficou sem graça ... irei expor minhas idéias melhor então, irei ser mais técnico, já que esse foi meu primeiro artigo
se é que pode chamar de artigo segundo vcs) pensei que fosse útil, mas os comentários "sem comentários", não diz nada sobre o tema
e sim agressões .... quem sabe juntando tudo que eu vou escrever alguem possa ter uma idéia de escrever um livro. Se fosse
para abordar toda a programação OO tinha que ser um livro. Mas de certa forma concordo com vocês ... Aprendi bastante, principalmente
como escrever melhor, promento voltar aki outra vez com um conteúdo de 20 partes. Ai o cara nem precisa comprar o livro é só ler aqui
no VOL. Ficar atacando as pessoas é falta de profissionalismo, mas eu não ligo para críticas ok, um abço pra todos ai em cima, t+.
[19] Comentário enviado por wishsometimes em 18/12/2009 - 08:38h
Imagina se eu atingisse rsrs Cesin, não desanima não....criticar é muito fácil, vai de você como saber lidar com essas críticas e tirar proveito delas pq de pessoas ignorantes e burras esse mundo está cheio rsrs mas parabéns pela iniciativa e continue assim, com certeza muita gente irá te agradecer.
[20] Comentário enviado por rideick em 18/12/2009 - 10:24h
Bem... 10 para iniciativa, e 5 para o conteúdo. Para um leigo que está procurando aprender um pouco mais, ao fim da leitura ele ficará mais confuso que no início. Eu quase paro de ler quando passei os olhos sobre o seguinte trecho... "A classe principal é a fecundação do óvulo com o espermatozóide" meu pai do céu (risos) confesso que todos caíram na gargalhada aqui.
Com relação as pessoas que nunca escreveram um dica ou um artigo para o VOLS criticarem, eles têm todo direito e devem fazer. Ou eu não posso criticar o artigo de um jornalista por que nunca escrevi para um jornal? o trabalho de um jogador de futebol, por que nunca fui um? um ator, um jornalista... em fim. Leitor tem direito a criticar sim, se pode fazer melhor ou não, não vem ao caso. A comunidade é formada por todos, os que oferecem, e os que recebem, caso não houvesse ninguém para ler, não haveria sentido em escrever.
[21] Comentário enviado por SamL em 18/12/2009 - 22:25h
"Com relação as pessoas que nunca escreveram um dica ou um artigo para o VOLS criticarem, eles têm todo direito e devem fazer."
Bem amigo, no segundo comentário eu expliquei que É MINHA OPINIÃO e você não é obrigado a aceitá-la.
"Ou eu não posso criticar o artigo de um jornalista por que nunca escrevi para um jornal? o trabalho de um jogador de futebol, por que nunca fui um? um ator, um jornalista... em fim. Leitor tem direito a criticar sim, se pode fazer melhor ou não, não vem ao caso"
Veja bem, quando você passa horas da sua vida escrevendo um artigo é natural que espere um comentário em forma de crítica, mas é melhor que venha de alguém que saiba separar a idiotice de uma avaliação real, ou seja, quem escreve Artigos sabe o quanto é difícil escrevê-los, então acredito eu, vão procurar fazer uma crítica da melhor forma possível, sem serem arrogantes quanto as habilidades pessoais/profissionais que possuem.
Quando se faz uma crítica, você faz uma análise/avaliação do conteudo do artigo com argumentos que defendam seu ponto de vista em relação ao que está sendo analisado, mas convenhamos não foi o que aconteceu. Enfim, acho que o único que avaliou de forma correta foi você no primeiro parágrafo do comentário acima, a não ser no final onde tem gargalhadas.
E gargalhada não é avaliação.
[22] Comentário enviado por franciscosouza em 21/12/2009 - 00:41h
O artigo é ruim, sabe por quê? Porque ele se propõe a fazer algo e não faz, ou não se propõe a nada.
Lendo por alto os comentários, notei que falaram que era mais para iniciantes. Se um iniciante ler este artigo na esperança de aprender algo, vai perder tempo e pode até ficar traumatizado =)
O artigo não é bom para usuários iniciantes, nem para intermediários ou avançados. O artigo deve ser considerado ruim por que não tem nenhum propósito ou, se tem, não foi capaz de atingi-lo.
De qualquer forma, parabéns pela iniciativa. Não vemos artigos muito focados em desenvolvimento aqui no VOL, até por que geralmente as pessoas procuram outras fontes de informação, mas é possível mudar esse quadro, e são necessárias iniciativas.