Conceito de OOP (programação Orientada a Objetos em Java)
Venho através deste pequeno tutorial tentar explicar como funciona e como podemos usar a programação orientada a objeto (OOP) utilizando como exemplo a linguagem
Java. Apesar de estar dando como exemplo a linguagem citada acima, essa analogia aplica em qualquer ferramenta de programação orientada a objeto.
O conceito de orientação a objeto é visto muitas vezes de maneira como WYSIWYG, onde a denominação seria:
É uma sigla em inglês formada pelas iniciais da expressão "What You See Is What You Get" e quer dizer "O que você vê é o que você obtém". O termo é usado para classificar ferramentas de edição e desenvolvimento que permitem visualizar, em tempo real, exatamente aquilo que será publicado ou impresso. Fonte:
http://www.baixaki.com.br/info/2057-o-que-e-wysiwyg-.htm
Normalmente quem programa com ferramentas (IDEs) orientadas a objetos fica mais a vontade em tal ambiente, mas não leva (principalmente o iniciante) o conceito de orientação a fundo. O programador iniciante arrasta e solta, molda a interface, estimula nos objetos ali arranjados várias funções, mas esquece (ou não sabe) usar os métodos corretos de encapsular, herdar, ou seja, não usa a IDE com todo o seu poder. Aprender orientação a objetos não quer dizer que você tenha que aprender a criar uma interface usando a IDE, o correto é aprender na mão!
No Delphi e em Java eu sei que todos os objetos são herdados do TObject, imaginem todos os objetos visuais e não visuais, eles herdam suas características básicas de uma classe pai, a TObject. Isso depende de cada particularidade da linguagem, e como eu disse, estamos falando da Java.
Uma classe se dá pelo conjunto de características e propriedades, exemplo de um ser humano. Temos a classe principal, um exemplo grotesco! Mas vamos lá ...
A classe principal é a fecundação do óvulo com o espermatozóide, temos a classe principal TObject (lembre-se que é uma analogia). Nós somos herança dessa classe, logo os órgãos internos são derivados dessa classe. O cérebro é uma subclasse (de TObject), o coração é uma subclasse do cérebro. A mão é uma classe (de TObject) e os dedos a subclasse da classe Mão, os dedos são subclasse de TObject e da classe Mão, a unha é subclasse de TObject, subclasse de Mão, subclasse de Dedo, e assim por diante. Temos um monte de subclasses de TObject em Java, e milhares de subclasses de outras subclasses e assim por em diante.
Usando a analogia da classe Dedo é o seguinte:
Ela tem a propriedade, célula, sangue, vasos sanguíneos, porque ela é derivada da classe Mão, ou seja, tudo que tem de comum na Mão tem no Dedo! Mas a classe Unha tem um diferencial da classe Mão, ela tem uma propriedade, uma característica própria, a unha. Repare que a cada subclasse a nova classe criada, fica mais específica. Para entender melhor siga o raciocínio a seguir.
Uma classe derivada de TObject chamada Mamífero, boi, gato, humano, cachorro, bode, camelo, aí vai... Repare que todos são subclasses de Mamífero, mas todos tem características diferentes, você já viu esses animais, eles são diferentes! Agora vem o trunfo! E o ornitorrinco, de que classe é esse bichinho?
Ele tem pelo, até aí tudo bem, mama, mas o danado tem bico! Patas estilo pato! O que fazer?
Agora você entenderá porque programar somente no WYSIWYG não é interessante! Imagine que você tem que pôr lá no teu IDE um macaco, você pega o objeto Macaco na Classe Mamífero, e se tiver que pôr um ornitorrinco? Pega de que classe? Sendo que o bicho não está na classe Mamífero?
Você tem que criar uma classe! Uma nova classe chamada Ornitorrinco com características do animal em questão. O exemplo do ornitorrinco aqui é somente para entender como funciona o conceito de classe, mais adiante vou dar outro exemplo de (INTERFACES) que envolverá o animal aqui citado.
Vamos agora um exemplo mais fácil para entender, um Jedit (Java) ou Edit (Delphi) tem a propriedade de escrever textos. Vamos supor que temos que escrever uma subclasse de edit para digitar senhas com asteriscos no lugar de letras, criamos um novo objeto herdando da classe Edit, com todas as características de Edit mas com um diferencial de que ele não irá mostrar letras e sim caracteres.
Podemos analisar de que cada nova subclasse é um tunning da classe anterior. E que cada objeto é uma instanciação de uma classe, por exemplo, quanto você coloca um formulário, a IDE instancia uma classe formulário, quando você coloca um botão em um formulário, a IDE instancia uma classe do botão e assim por em diante.
No Java tem um método na classe Jframe de que quando você coloca os objetos dentro de um Jframe, você tem que especificar para o próprio Jframe que ele exiba os objetos na tela, senão os objetos não são vistos pelo usuário, até que são criados, mas não vistos. O exemplo a seguir é de um programa Java usando um Jframe e um Jlabel exibindo "Hello.Swing World".
Quando digo particularidade da linguagem digo que é somente do Java, isso não é dito como regra para a programação orientada a objeto, os caracteres // são comentários em um programa Java.