Programação orientada a objeto

Isto para mim foi motivo de dores de cabeça, para muitos um bicho de sete cabeças. Já pesquisei na internet uma maneira fácil de se entender programação orientada a objeto e não achei.

Não entendia nada de herança, instância, classe e etc.

Vou tentar esplicar da minha maneira:

Qual é a diferença do vídeo cassete para o DVD; sabendo-se que todos os dois tem controle remoto?

É assim a diferença da linguagem de programação de antigamente (video cassete) para o de hoje (DVD).

O video cassete só tem quatro funções retornar, pausar (pause), reprodusir (play) e avançar. Se eu quisesse a quarta música deveria assistir a 1ª, 2ª e 3ª música. Se eu quisesse retornar a primeira deveria rebobinar a fita para a 4ª, 3ª e 2ª para daí chegar a primeira.

A linguagem de programação de antigamente era no sentido linear de cima para baixo.

Para voutar para cima usava-se a estrutura de repetição While e For. Mesmo assim seu sentido era de cima para baixo.

Então surgiu a programação orientada a objeto.

É semelhate ao DVD, além das funções retornar, pausar, reprodusir e avançar. Se eu quiser a quarta música apertava o botão 4 e imediatamente tocava a quarta música sem assistir a 1ª, 2ª e 3ª música. Se eu quiser voltar a primeira música apertava o botão 1 e imediatamente tocava a primeira música sem retroceder para a 4ª, 3ª e 2ª música.

Então a linguagem de programação passou de cima para baixo, para qualquer direção. Sem utilizar muito as estruturas de repetição For e While.

Então o DVD é um objeto e os botões do controle remoto as propriedades do objeto.

É por isto que o computador é cheio de botões: botões do teclado, botões do mouse, botões da barra de menu, botões da barra de ferramenta, botões da barra de tarefa, botões do menu iniciar, ícones também são botões, etc.

Cada botão é um objeto e cada objeto tem as suas propriedades.

 

Ficou claro?

Botão de Comando

Esta aula é baseado no Visual Basic.

Suponhamos que um formulário tenha 1 botão, veja foto:

Este botão tem as seguintes propriedades:

 

Nome: botao_1
Texto sobre o botão: Botão 1
Altura: 30 pixels
Largura: 100 pixels
Topo: 50 pixels
Esquerda: 50 pixels
Fonte: Times New Roman
Negrito: Sim
Itálico: Não
Sublinhado: Não
Tamanho da fonte: 10
Cor da fonte: Verde
Cor de fundo: Amarelo
Alinhamento: Centro

Para que o computador entenda esta lista de propriedades devemos inserir códigos, veja:

botao_1 = Novo objeto_botao()
botao_1.Texto = "Botão 1"
botao_1.Altura = 30
botao_1.Largura = 100
botao_1.Topo = 50
botao_1.Esquerda = 50
botao_1.Fonte = "Times New Roman"
botao_1.Negrito = True
botao_1.Italico = False
botao_1.Sublinhado = False
botao_1.Tamanho_da_fonte = 10
botao_1.Cor_da_fonte = "Verde"
botao_1.Cor_de_fundo = "Amarelo"
botao_1.alinhamento = "Centro"

Ficou fácil?

Diferente que foi visto anteriormente (objeto Javascript, objeto PHP) iremos utilizar o JavaBeans.

JavaBeans

Arquivo: JavaH.java

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class JavaH extends JFrame {

public JavaH() {

super("Formulario");
this.setSize(250,100);
this.setLocation(50, 100);

Container ct = this.getContentPane();
ct.setLayout(null);

MyBean p = new MyBean();
p.setProperty1(111);
p.setProperty2(true);

JLabel label_ = new JLabel();

label_.setText("<html>p.getProperty1() = "+p.getProperty1()+"<br>p.isProperty2() = "+p.isProperty2()+"</html>");

label_.setVerticalAlignment(JLabel.TOP);
label_.setBounds(10,10,150,100);
// new Color(vermelho, verde, azul);
label_.setForeground(new Color(125, 32, 155));
ct.add(label_);

Image Icone = Toolkit.getDefaultToolkit().getImage("icon.gif");
setIconImage(Icone);

this.setVisible(true);

this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}});

}
public static void main(String[] args) {
new JavaH();
}
}

Arquivo: MyBean.java

import java.io.Serializable;
public class MyBean implements Serializable {

private int property1;
private boolean property2;

public MyBean() {

}

public void setProperty1(int property1) {
this.property1 = property1;
}

public void setProperty2(boolean property2) {
this.property2 = property2;
}

public int getProperty1() {
return property1;
}

public boolean isProperty2() {
return property2;
}
}

Arquivo: JavaH.java

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class JavaH extends JFrame {

private objeto p1;
private objeto p2;

public JavaH() {

super("Formulario");
this.setSize(370,120);
this.setLocation(50, 100);

Container ct = this.getContentPane();
ct.setLayout(null);

p1 = new objeto();
ct.add(p1.setTeste(0,0));
p2 = new objeto();
ct.add(p2.setTeste(172,0));

Image Icone = Toolkit.getDefaultToolkit().getImage("icon.gif");
setIconImage(Icone);

this.setVisible(true);

p1.botao1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
p1.getTeste();
}});

p2.botao1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
p2.getTeste();
}});

this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}});

}
public static void main(String[] args) {
new JavaH();
}
}

Arquivo: objeto.java

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

import java.io.Serializable;
public class objeto implements Serializable {

public JLabel label1;
public JButton botao1;
public JPanel painel1;

public objeto() {
label1 = new JLabel();
botao1 = new JButton();
painel1 = new JPanel();
}

public JPanel setTeste(int esquerda,int topo) {
painel1.setBorder(BorderFactory.createTitledBorder("Teste"));
painel1.setBounds(esquerda, topo, 170, 72);
painel1.setLayout(null);
label1.setText("Oi");
label1.setBounds(10,10,150,20);
painel1.add(label1);
botao1.setText("Clique aqui");
botao1.setBounds(10,36,150,25);
painel1.add(botao1);
return painel1;
}

public void getTeste(){
if(label1.getText().equals("Oi")){
label1.setText("Hello");
} else {
label1.setText("Oi");
}
}
}

 

Código Java 100% correto: (Inter.java)
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Inter {

private JFrame frame;
private JButton botao;
private void Inter(){ frame = new JFrame(); frame.setTitle("Exemplo de Layout"); frame.setSize(200,200); frame.setLocation(500, 260); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container ct = frame.getContentPane(); ct.setLayout(null); botao = new JButton("OK"); botao.setBounds(50,10,150,25); // objeto.setBounds(esquerda, topo, largura, altura) ct.add(botao); Image Icone = Toolkit.getDefaultToolkit().getImage("icone.gif");
frame.setIconImage(Icone); frame.setVisible(true); botao.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(null, "Bem Vindo!"); }}); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); }}); } public static void main(String[] args) { Inter jx = new Inter(); jx.Inter(); } }

Exceções

Try ... Catch ... Finally

 

try {  
    //... código normal  
catch (Exception e) {  
    //... código que trata o erro 
e.printStackTrace(); // Informa pelo DOS o erro do programa
// ou
System.out.println(e);  // Também informa pelo DOS o erro do programa
finally {  
    // código executado, mesmo levantando excessão  
}  

Nesse exemplo, se ocorrer um erro dentro try (tratar), uma excessão é levantada, e é dentro de catch que o erro é tratado.
Se tiver finally, siginifica que o código será executado de qualquer maneira, levantando excessão ou não!

 

throws Exception

 

public void exemplo() throws Exception
     //Código que poderá dá algum erro, se der será lançado para o método que chamou.
}

A exceção é uma prevenção do tipo: "se acontecer tal erro, faça tal coisa"