TA345/531 TP257 Informática Aplicada à Engenharia de Alimentos.


 

Aula 04 – Parte A: Classes e métodos

  

4.1. Introdução

Programas Java são construídos com elementos especializados chamados de “classes”.

O importante a assimilar é que utilizar bibliotecas de classes é algo que o programador Java deve se acostumar a fazer.

 

4.2.  O que é uma classe?

Do ponto de vista da linguagem Java, as classes são vistas como as unidades básicas de programação.

 

Na verdade, a classe não é exatamente um objeto, mas sim um modelo ou especificação que define um tipo de objeto.

Certo? Mas o que seria um objeto?

Um objeto é uma ferramenta de comunicação entre o usuário e seu programa.

Os objetos contem um agrupamento de dados e procedimentos definidos.

 

Assim, a classe descreve um grupo de objetos, com estados específicos (propriedades) capazes de executar um conjunto definido de operações (métodos) e receber informações por meio de comandos (referências a métodos da classe) que contém argumentos (variáveis com seus valores).

 

Para entender melhor, veja esses dois exemplos:

 

Primeiro exemplo:

Vamos supor que você está escrevendo um programa de corrida de carro.

Será necessário criar um objeto carro, que terá as características definidas pela classe modelo.

Então, de acordo com as instruções do usuário, esse carro poderá acelerar ou retardar seu movimento.

Mas esse "comportamento" do carro só poderá ser manipulado, se ele estiver corretamente definido pela classe modelo (por meio de uma programação que permita reconhecer quando deve acelerar, quando deve se virar para a direita, etc.).

 

Segundo exemplo:

Vamos supor que você tem uma ficha cadastral online, em que se pede: nome, endereço, bairro, cidade, estado, cep, telefone, email e opções de produtos a serem comprados.

Cada identificação de campo a ser preenchido é um label.

Cada campo é uma caixa de texto.

E as opções de compra, são do tipo checkbox.

O label, a caixa de texto e o checkbox utilizados são os objetos dessa ficha cadastral.

Para que no label apareça o texto "Nome", por exemplo, é necessário que isso seja definido em uma classe.

E para que o texto digitado na caixa de texto seja identificado e armazenado em uma determinada variável, é necessário que os procedimentos sejam descritos no corpo da classe.

E assim por diante. Temos que preparar uma classe. Nosso programa em Java é uma classe.

 

Convém observar que os objetos devem ser declarados logo após a inicialização da classe, para que durante a descrição de suas características, eles possam ser reconhecidos como pertencentes à classe em que se está trabalhando.

Características do objeto (cor, legenda, etc) -> sintaxe simples na interface

Respostas (seleção do checkbox, armazenar dados do textfield, etc) -> evento

 

4.3. Classe derivada de outra classe?

Quando se diz que uma classe deriva de outra, quer se dizer que ela herda as propriedades e os métodos dessa classe (classe-mãe). Uma classe é identificada como filha de uma classe mãe através da palavra-chave extends.

public class modelo1 extends Applet
{
...
}

(quer dizer que a classe modelo1, que você criou com suas próprias variáveis e métodos, herdará todas as variáveis e métodos da classe mãe Applet)

 

Quando uma classe não é explicitamente derivada de outra classe, ela é implicitamente derivada da classe Object que é a classe-mãe original de todas as outras classes.

public class modelo1
{
...
}

 

4.4. Como criar classes em Java

Para iniciar uma classe, é necessário informar essa ação ao compilador, que interpreta como um acesso à esse objeto. Uma classe é um tipo de objeto.  A sintaxe para  acessar um objeto é a seguinte:

 

public   tipo_de_objeto   nome_do_objeto

 

No caso ilustrado acima, o tipo de objeto seria uma classe, e por isso temos class, cujo nome é modelo1.

 

public   class   modelo1

 

Como essa classe deriva de outra classe, no caso a classe  Applet, orientamos o compilador dizendo que essa classe extende as propriedades da uma determinada classe mãe:

 

extends   nome_da_classe_mãe

 

public   class   modelo1 extends   Applet

 

Para uma classe aceitar um método, muitas vezes é preciso que você  implemente um tipo de ação que permite a um programa responder a  um ou vários eventos. Para implementar a classe utiliza-se: implements tipo_de_evento.

 

public   class   modelo1 extends   Applet  implements  ActionPerformed

 

public   class   modelo1 extends   Applet  implements  ActionListener

 

public   class   modelo1 extends   Applet  implements  ActionPerformed, ActionListener

  

4.5. Como definir classes

Para definir uma classe use a palavra-chave class e o nome da classe.

Exemplo:

class Minhaclasse

{

...

}

 

Se esta classe é uma subclasse de outra classe, use extends para indicar superclasse.

Exemplo:

class Minhaclasse extends SuperClasse

{

...

}

 

Tudo o que estiver no corpo da classe, isto é, entre a chave de abertura e a chave de fechamento, pertence à classe em particular.

As chaves, portanto, definem o escopo da classe.

Quaisquer atributos ou métodos definidos entre as chaves ({ e }), que delimitam o corpo da classe, pertencem ao escopo da classe e são genericamente denominados como “membros” da classe.

  

4.6. Variáveis de classe

As variáveis de classe são boas para a comunicação entre os diferentes objetos da mesma classe, ou para manter travamento de estados globais sobre um conjunto de objetos.

Exemplo:

static int soma;

static final int maxObjects = 10;

  

4.7. Como definir variáveis de instância

As variáveis de instância aparentemente são declaradas e definidas quase exatamente da mesma forma que as variáveis locais, a principal diferença é que a alocação delas é na definição da classe. 

Exemplo:

class Bike extends Veículo

{

String tipo;

int correia;

int pedal;

}

 

4.8. Constantes

Para declarar uma constante dentro de uma classe, use a palavra-chave final antes da declaração da variável e inclua um valor inicial para esta variável. 

Exemplo:

final float pi=4.141592;

final boolean debug = false;

final int maxsize = 40000;

 

 4.9. Definição de métodos

Muito embora as classes sejam as vigas mestras da programação orientada a objetos, os métodos são os elementos básicos para a construção dos programas.

 

Os métodos são definidos e chamados (invocados) para realizar tarefas específicas que, somadas, fornecem as informações de que os usuários precisam.


A definição dos métodos consta de quatro partes básicas:

  1. O nome do método;
  2. O tipo objeto ou tipo primitivo de retorno;
  3. Uma lista de parâmetros;
  4. O corpo do método;

 

A definição básica de um método tem esta aparência:

 

tipoderetorno nomedometodo (tipo arg1, tipo2 arg2, ...) {  ...  }

 

Veja o uso de método nesses dois casos:

 

Exemplo 1:

 

import java.applet.Applet;

import java.applet.*;

import java.awt.*;

import java.awt.event.*;

 

/* <APPLET CODE = "metodo1.class" WIDTH=250 HEIGHT=200></APPLET>*/

 

class RangeClass

  {

    int[] makeRange (int lower, int upper)

    {

      int arr[ ] = new int [ (upper - lower) + 1];

 

      for (int i = 0; i< arr.length; i++)    arr [i] = lower++;

 

      return arr;

    }

  }

 

public class metodo1 extends Applet

{

  TextArea ta;

 

  public void init()

  {

     ta = new TextArea(10,30); add(ta);

 

     int theArray[ ];

     RangeClass theRange = new RangeClass( );

     theArray = theRange.makeRange (1, 10) ;

 

     ta.append("The array: [" );

 

     for (int i=0; i < theArray.length; i++)    ta.append(theArray[i] + " ");

 

     ta.append("]");

  }

}

 

 

  metodo1.java    metodo1.html     

 

Exemplo 2:

 

import java.applet.Applet;

import java.applet.*;

import java.awt.*;

import java.awt.event.*;

 

/* <APPLET CODE = "metodo2.class" WIDTH=250 HEIGHT=200></APPLET>*/

 

class RangeClass

    {

      int[] makeRange (int lower, int upper)

      {

        int arr[ ] = new int [ (upper - lower) + 1];

        for (int i = 0; i< arr.length; i++)

        arr [i] = lower++;

        return arr;

      }

    }

 

public class metodo2 extends Applet implements ActionListener

{

    Label titulo, legenda1, legenda2, legenda3;

    TextField caixa1, caixa2, caixa3;

    Button botao;

    int x, y, z;

    TextArea ta;

 

  public void init()

  {

    setLayout(new FlowLayout());

    setBackground(Color.yellow);

 

    setForeground(Color.red);

    titulo = new Label("Construção de um vetor"); add(titulo);

 

    setForeground(Color.black);

    legenda1 = new Label("Forneça o primeiro número inteiro:"); add(legenda1);

    caixa1 = new TextField("2",2);   add(caixa1);

 

    legenda2 = new Label("Forneça o último numero inteiro:"); add(legenda2);

    caixa2 = new TextField("12",2); add(caixa2);

 

    legenda3 = new Label("Forneça o incremento:"); add(legenda3);

    caixa3 = new TextField("1",2);   add(caixa3);

 

    botao = new Button("Cálculo do vetor"); add(botao);

    botao.addActionListener(this);

 

    ta = new TextArea(5,30); add(ta);

  }

 

  public void actionPerformed (ActionEvent e)

  {

            if(e.getSource()==botao)

            {

                x=Integer.valueOf(caixa1.getText()).intValue();

                y=Integer.valueOf(caixa2.getText()).intValue();

                z=Integer.valueOf(caixa3.getText()).intValue();

 

            int theArray[ ];

 

            RangeClass theRange = new RangeClass( );

            theArray = theRange.makeRange (x, y) ;

 

            ta.setText("");

            ta.append("The array: [" );

 

            for (int i=0; i < theArray.length; i=i+z)

            ta.append(theArray[i] + " ");

 

            ta.append("]");

         }

    }

}

 

 

   metodo2.java    metodo2.html

 

4.10. A palavra-chave this

No corpo de uma definição de método, você pode querer referir-se ao objeto corrente, o objeto que o método chamou para referir-se às variáveis de instância ou para passar o objeto corrente como um argumento para outro método. Para este tipo de referência, você pode usar a palavra-chave this.

 

Exemplo completo em que usamos a palavra-chave this:

 

import java.applet.Applet;

import java.applet.*;

import java.awt.*;

 

public class exemploThis extends Applet

{

            String nome;

            int idade;

            TextArea ta;

 

    public void escrever (String nome, int idade)

    {

        nome = nome;

        idade = idade;

 

        ta.append("As variáveis dentro do método:\n");

        ta.append("O nome da pessoa é " + nome + " e sua idade é " +idade+ "\n\n");

 

        ta.append("As variáveis de instância, fora do método:\n");

        ta.append("O nome da pessoa é " + this.nome + " e sua idade é " +this.idade+ "\n\n");

    }

 

    public void init ()

    {

       setLayout(new FlowLayout());

       ta = new TextArea(10,50);

       add(ta);

 

       nome = "Augusto";

       idade = 25;

       escrever("Samara", 23);

    }

}

 


    
 exemploThis.java                        exemploThis.html

 

Veja um outro exemplo completo em que usamos a palavra-chave this:

 

import java.applet.Applet;

import java.applet.*;

import java.awt.*;

import java.awt.event.*;

 

public class individuo extends Applet implements ActionListener

{

   TextField caixa1, caixa2;

   Label rotulo1, rotulo2;

   TextArea ta;

   Button botao;

   String nome,n;

   int idade, i;

 

   individuo p1;

   public individuo() {}

 

   individuo (String nome, int idade)  {

        this.nome = nome;

        this.idade = idade;

  }

 

  public void imprimeDados ()  {

     ta.append("O nome da pessoa é " +p1.nome + " e sua idade é " +p1.idade+ "\n\n");

  }

 

  public void init ()  {

     setLayout(new FlowLayout());

     rotulo1 = new Label("Nome");    add(rotulo1);

     caixa1 = new TextField ("",15); add(caixa1);

     rotulo2 = new Label("Idade");   add(rotulo2);

     caixa2 = new TextField ("",10); add(caixa2);

     botao = new Button("Enviar");   add(botao); botao.addActionListener(this);

     ta = new TextArea(10,50);       add(ta);

  }

 

  public void actionPerformed (ActionEvent e)  {

            if(e.getSource()==botao)           {

                n=String.valueOf(caixa1.getText());

                i=Integer.valueOf(caixa2.getText()).intValue();

                p1 = new individuo( n, i);

                imprimeDados();

    }

  }

 

}

 


    individuo.java             individuo.html
 
 

4.11. Transferência dos dados de um array como argumentos para serem processados por um método de classe auxiliar

 

Exemplo:

 

import java.applet.Applet;

import java.applet.*;

import java.awt.*;       

import java.awt.event.*;

 

class test

{

int onetoZero( int arg[ ] )   {

                        int count = 0;

                        for(int i = 0; i< arg.length; i++)  {

                                   if (arg[i] == 1)  {

                                               count++;

                                               arg[i] = 0;

                                   }

                         }

          return count;

         }

}

 

public class PassByReference extends Applet

{

            TextArea ta;

 

       public void init()

      {

                        ta = new TextArea(6,40); add(ta);

 

                        int arr[] = {1,3,4,5,1,1,7};

 

                        PassByReference test = new PassByReference( );

                        int numOnes;

 

                        ta.append(" Values of the array: [");

                        for (int i = 0; i < arr.length; i++)

                        {

                                   ta.append(arr[i] + "");

                        }

                        ta.append("]");

 

                        numOnes = test.onetoZero(arr);

 

                        ta.append ("\n Number of Ones = " + numOnes);

                        ta.append ("\n New values of the array: [ ");

 

                        for (int i = 0; i < arr.length; i++)   ta.append(arr[i] + " ");

 

                        ta.append("]");

       }

}

Veja o resultado do programa:

 

 

Como você pode ver, foi definido um array dentro do applet e foram atribuído valores à estrutura de dados desse array.

O programa mostra os valores desse array inicial.

 

Na seguinte instrução:

                                            numOnes = test.onetoZero(arr);

 

o applet pede à classe auxiliar test que use o método onetoZero com os dados do array pré definido no applet. Quando esse método atua, ele conta os números “1” e os converte em “0 ” e os substitui dentro do array. Como resultado, o array fica diferente. Pode observar que onde havia números “1”, agora temos números “0”.

 

O método, além de fazer essa transformação fornece o número inteiro correspondente às vezes em que foram identificados dados que tinham o valor de “1”.

 

Exemplo mais completo:

 

import java.applet.Applet;

import java.applet.*;

import java.awt.*;

import java.awt.event.*;

 

public class PassagemDeValores extends Applet implements ActionListener

{

  Label legenda; TextField caixa; Button botao; TextArea ta1, ta2;

  int arg[ ] = { 1,3,8,4,5,1,1,2,2,6,7,9};

  int numEscolhido, numOcorrencias;

  int onetoZero(int arg[ ])

  { int count = 0;

    for(int i = 0; i< arg.length; i++)

    { if (arg[i] == numEscolhido)  {count++; arg[i] = 0; } }

    return count;

  }

 

  public void init ()

  {  setLayout(new FlowLayout());

     legenda = new Label("Número inteiro escolhido:"); add(legenda);

     caixa = new TextField("1",2); add(caixa);

     ta1 = new TextArea(3,45);  add(ta1);

     botao = new Button ("Substitui o numero por zero"); add(botao);

     botao.addActionListener(this);

     ta2 = new TextArea(18,45);  add(ta2);

     numEscolhido=Integer.valueOf(caixa.getText()).intValue();

     ta1.setText("Valores do vetor: [");

     for ( int i = 0; i < arg.length; i++)

     {       ta1.append(arg[i] + " ");

     }

     ta1.append("]");

  }

 

  public void actionPerformed(ActionEvent e)

  {

      if (e.getSource()==botao)

      { numEscolhido=Integer.valueOf(caixa.getText()).intValue();

        PassagemDeValores test = new PassagemDeValores( );

        // numOcorrencias = test.onetoZero(arg);

       

        numOcorrencias = onetoZero(arg);

 

        ta2.append("Número de ocorrencias = " + numOcorrencias + "\n");

        ta2.append("Novos valores do vetor: [ ");

        for (int i = 0; i < arg.length; i++)

        {   ta2.append(arg[i] + " ");

        }

        ta2.append("]\n");

      }

   }

}

 

 

PassagemDeValores.java        PassagemDeValores.html

 

 

Até a próxima!


Volta para a pagina principal

 

Última atualização: 27/março/2009