domingo, 15 de março de 2015

Primeiro post: Introdução a Java e POO

Opa pessoal,

Esse post deve introduzir Java, especialmente para quem já sabe C, de maneira rápida. No github (https://github.com/leaomatheus/Calculator) está o código de uma calculadora (muito simples) que servirá como exemplo (desenvolvi apenas a interface gráfica).

Você vai precisar da JDK (necessário para desenvolver em Java) e de uma IDE (ambiente de desenvolvimento). Caso, não tenha, pode usar a que estou usando, JDK 8 com NetBeans (que você pode baixar aqui).

Java se estrutura em classes (é orientada a objetos), o que torna maior a independência entre as partes dos códigos. No caso deste programa, há duas classes: uma que trata diretamente da leitura do input do usuário e do output do programa, e outra que trata das operações matemáticas (da interpratação da leitura).

Com as classes, podemos processar o que é interessante na própria classe e disponibilizar o que for útil às outras classes, privando-as também de algumas informações. Por exemplo, para a classe que trata do input só interessa saber, dada determinada expressão, qual o valor retornado, e não como a outra classe armazena as informações.

O esqueleto básico da calculadora é:

public class CalculatorEngine {
    private int value; //Valor do display
    private int keep; //Valor mantido acumulado da operação anterior
    private char toDo; //Operação a ser feita

    //Armazena a operação a ser realizada
    private void binaryOperation(char op);
    
    //Operações básicas da calculadora
    public void add() { binaryOperation('+'); }
    public void subtract() { binaryOperation('-'); }
    public void multiply() { binaryOperation('*'); }
    public void divide() { binaryOperation('/'); }
    public void equal() { compute(); }
    
    //Computa as operações acumuladas
    private void compute();
    
    //Limpa os dados
    public void clear();
    
    //Atualiza o valor dos dígitos após nova inserção
    public void digit(int x);
    
    //Retorna o valor a ser exibido no display
    public int display();
    
    //Construtor
    public CalculatorEngine();
    
    //Função main apenas para teste
    public static void main(String arg[]) {
        CalculatorEngine c = new CalculatorEngine();
    }
}

Observe que algumas funções são public (públicas) e outras private (privadas), justamente: se alguém for utilizar a função para usar na calculadora, só interessa disponibilizar algumas funções e variáveis. No caso, basta ser capaz de

  • Consultar o display;
  • Carregar operações básicas;
  • Computar igualdades
  • Adicionar novos dígitos
  • Limpar os dados
Não importa como a classe trata e armazena os dados diretamente, por isso as demais funções são privadas.

Observe também que há uma função com o nome da classe: é o construtor, utilizado ao criar um novo objeto. Na main da classe, o construtor é usado para instanciar (criar, alocar espaço na memória) um objeto. O construtor pode receber ou não parâmetros, e pode realizar ou não alguma tarefa. No nosso caso, será usado para limpar as variáveis da classe.

Poderia ainda existir um destrutor (não feito nesse código), que seria usada ao destruir o objeto (desalocar o espaço na memória).

A interface gráfica também possui uma classe própria, que se utiliza de funções e objetos já prontos do NetBeans para criar botões e layouts. Em geral, cada botão tem um método da forma:

public class CalculatorUI {
    private void jButtonNumeroDoBotao() {
        //Método de update dos dados (add, subtract, multiply, divide, equal ou digit)
        //Update do display
    }
}

Cada classe pode ou não ter também uma função main. Quando o projeto é executado, uma classe é escolhida como Main e a função main daquela classe é equivalente ao método int main() de C, ou seja, é o método executado.

A classe CalculatorInput é, em teoria, equivalente à CalculatorUI, mas sem a interface gráfica (ao invés de apertar um botão e ter o resultado em tela, funciona apertando teclas e o resultado é no prompt de comando).

A imagem abaixo mostra uma visão da interface da calculadora:


Para quem já sabe C, espero que a introdução seja esclarecedora, e logo haverá mais posts.

Um comentário: