Objota O mundo orientado a objetos

Construindo uma classe

Posted on junho 29, 2010

Vamos iniciar este artigo fazendo um link com o anterior que falava sobre abstração e modularização.  Pois bem, quanto à modularização podemos dizer que a idéia é transformar um problema “grande” em vários pequenos. Assim fica mais fácil você se concentrar em um problema de cada vez...  E uma vez resolvidos passo a passo, os pequenos, você irá sanar o problema maior. Já quando se fala de abstração, estamos falando do “ato” que se realiza para construir uma classe. Vamos construir uma classe simples neste artigo, pode até ser com o bloco de notas. Porém, se quiserem já começar a utilizar uma IDE, dou todo o apoio. Aconselho a começar pela IDE JGrasp. Para os interessados segue:

(A ordem de instalação é importante, primeiro o JDK e depois a IDE)

1° - baixem o JDK – instalem. Não tem segredo o assistente de instalação fará tudo por vocês.

2º - baixem a IDE JGrasp – tem um link para download na barra lateral deste blog em “links úteis”. Esse também não tem segredo algum.

Bom para quem já tem tudo certinho funcionando, vamos começar a construção da classe. Primeiramente vamos lembrar o que é uma classe. Uma classe é uma entidade lógica que representa um objeto com suas ações e características, nem sempre um objeto é visível como em outras formas de desenvolvimento, como por exemplo ActionScript ou JavaScript.

Vamos então ao nosso objeto. É uma caneta. Quando se fala de caneta sei que existem vários tipos, porém me refiro a uma simples caneta esferográfica. Pois bem, vamos pensar que atributos uma caneta teria. Inicialmente eu diria de cara o atributo COR depois vem mais algum como tamanho: COMPRIMENTO e talvez um teste boleano (verdadeiro ou falso, no caso do Java usa-se as palavras chave true e false) para saber se existe tinta. Bem vamos então escrever a classe com estes atributos:

cor – da caneta
comprimento – em milímetros
temTinta  - verdadeiro ou falso, indica se há tinta na caneta.

Abaixo explicarei mais sobre esta estrutura.


public class Caneta{
private String cor;
private double comprimento;
private boolean temTinta;

// Construtor
public  Caneta(String novaCor, double novoComprimento, boolean novoValorTemTinta ){
cor = novaCor;
comprimento = novoComprimento;
temTinta = novoValorTemTinta;
}

// Métodos de acesso
public String getCor(){
return cor;
}
// (…)

// Métodos modificadores
public void setCor(String novaCor){
cor = novaCor;
}
//(...)
}

A estrutura: public class Caneta{  aqui vem o conteúdo da classe }

Indica que a classe é pública (outras classe podem usá-la) e que seu nome é “Caneta”, detalhe toda classe deve ser nomeada começando com uma letra maiúscula. Dentro das chaves, vai o conteúdo da classe.

Dentro dela são apresentados os seus atributos:


private String cor;
private double comprimento;
private boolean temTinta;

A palavra chave private indica que estes atributos só são visíveis dentro desta classe, e para que outra classe possa utilizar destes atributos é necessário implementar métodos específicos para isso. Veremos adiante. Em seguida vem o tipo do atributo, String indica que o atributo pode armazenar somente caracteres, ex: “ABCDabcd1234” – sempre dentro de aspas duplas. E por último vem o nome do atributo, que deve ser nomeado com letras minúsculas. Isso é considerado uma boa prática de programação.

Exemplo de boa prática de programação está na nomenclatura de seus atributos e variáveis

private String cor;    -    bom
private String Cor;    -   Não aconselhável
private String  nome;  -    bom
private String sobreNome;   -    bom, pois fica visualmente menos agrecivo.
private String SobreNome; - Não aconselhável

O método construtor


// Construtor

public  Caneta(String novaCor, double novoComprimento, boolean novoValorTemTinta ){
cor = novaCor;
comprimento = novoComprimento;
temTinta = novoValorTemTinta;
}

O método construtor é o responsável por inicializar um objeto com seu valor default. Um método construtor pode ter um conteúdo em seu bloco ou não. O bloco abriga as ações a serem executadas pelo método. O bloco é indicado abaixo:


public Caneta(){
//Aqui, entre as chaves,  vem o conteúdo do bloco.
}

O que vem entre seus parênteses, são os chamados parâmetros.
Parâmetros são valores que vem de fora do método para serem usados dentro do método. Neste caso eu estou atribuindo os valores dos parâmetros (valores que vem de fora) aos atributos: cor, comprimento,  temTinta.
veja:

cor = novaCor;

Se  a variável novaCor, que vem como parâmetro, armazena dentro dela o valor “amarelo” seria o mesmo que dizer:

cor  = “amarelo”;

Será mais fácil compreender estes conceitos quando instanciarmos objetos desta classe, porém vamos só tratar de entende-la, mesmo que superficialmente.

Métodos de acesso

// Métodos de acesso
public String getCor(){
return cor;
}

Métodos de acesso servem para acessar o valor de um atributo, por tanto cada atributo tem que ter um método de acesso. Vamos analisar a assinatura deste método. Ele inicia pela palavra chave public, que indica que ele é um método público, ou seja, visível tanto dentro da classe como foram dela. Em seguida vem a palavra String que indica o tipo de valor retornado pelo método. Por último vem o nome do método seguido de parênteses. O bloco é naturalmente indicado por um par de chaves {}. E dentro do bloco é utilizada a palavra chave return que no caso retorna o valor do atributo cor.

obs: Assinatura de um método indica entre outras coisas seu nome e parâmetros que recebe.
public void setCor()   // assinatura
{
//Aqui vem o bloco ou corpo do método
}
Métodos modificadores

// Métodos modificadores
public void setCor(String novaCor){
cor = novaCor;
}

O método modificador basicamente tem a função de modificar o valor de um atributo. Ele recebe um valor como parâmetro e atribui esse novo valor ao atributo. Note que na assinatura do método não é indicado um tipo de retorno, pois quando se usa a palavra chave void indica-se que não existe um valor a ser retornado. Visto que sua função é modificar e não retornar.

Bem caros leitores, por hora é somente isso. Nos próximos artigos veremos como instanciar objetos.

Posted by Rodrigo Ireno