Criando Classes no BlueJ

Objetos só podem ser criados se existirem classes para serem utilizadas como modelos. A linguagem Java possui uma infinidade de classes para as mais diversas finalidades. No entanto, ao criar um software para resolver um determinado problema, você precisará criar classes específicas do seu software.

Cada classe precisa obrigatoriamente de um nome. Adicionalmente, ela pode ter características e/ou funcionalidades. Para iniciar, vamos criar uma classe contendo apenas características e ir evoluindo nossas classes ao longo do caminho, à medida que vamos introduzindo conceitos e regras.

Como primeiro exemplo, considere que o proprietário de uma loja de móveis e eletrodomésticos lhe pede para desenvolver um sistema para controle de vendas. O proprietário precisa inicialmente de um sistema para cadastrar clientes, produtos, funcionários e filiais da loja.

A partir desta descrição, e sabendo que classes são normalmente representadsa utilizando-se substantivos, podemos identificar que os substantivos em negritos serão algumas das nossas classes. Para iniciarmos, abra o BlueJ e será apresentada a janela principal como na figura abaixo.

bluej main window.png

Ao iniciar o BlueJ você pode abrir ou criar um novo projeto. Vamos então criar um novo projeto acessando o menu Projeto ▸ Novo Projeto. A tela abaixo aparece para darmos um nome e indicarmos onde desejamos salvar o projeto.

bluej new project.gif

Após clicar em OK, a tela principal abre o projeto criado. O projeto inicia vazio.

bluej empty project.png

Do lado esquerdo temos apenas 3 botões, dos quais vamos focar em apenas 2 por enquanto:

  • Nova Classe: para criar uma classe no projeto.

  • Compilar: para compilar todas as classes do projeto.

Considerando as classes identificadas acima para o projeto da loja de móveis, vamos clicar no botão "Nova Classe" para criar a primeira classe que chamaremos de Cliente. A figura abaixo apresenta a janela para criação da classe. Basta preencher o campo "Nome da Classe" e clicar em OK sem alterar os outros campos. Explicar as opções desta tela está fora de contexto agora.

bluej new class.gif

Por convenção, nomes de classes devem ter a inicial maiúscula e ser no singular. Se o nome da classe for composto, a inicial de cada palavra deve ser em maiúsculas. Não é permitido utilizar espaços e acentos devem ser evitados.

Apesar de Java permitir o uso de acentos em classes, nome de arquivos, variáveis e outros elementos, isto não é uma prática recomendável. Utilizar acentos para tais elementos pode fazer você obter um mal hábito que não é permitido em várias linguagens. Além disso, se você estiver trabalhando em um projeto envolvendo desenvolvedores de diversas partes do mundo, normalmente o código é escrito em inglês, que não possui acentos.

Ao utilizar o BlueJ, o código Java para a classe criada é gerado automaticamente. No entanto, a classe é criada vazia, sem características nem funcionalidades. Desta forma, ela não tem utilidade alguma.

Visualizando o código de uma classe

Para visualizar o código gerado para uma classe, devemos dar dois cliques sobre a classe desejada. A imagem abaixo apresenta o código da classe Cliente gerado pelo BlueJ.

bluej code editor.gif

Todo o código entre a primeira e última chave (linha 10 à linha 32) é apenas de demonstração. Ele não tem nenhuma utilidade para a classe Cliente que criamos e ainda inclui alguns detalhes que não serão abordados por enquanto. Ao criar qualquer classe no BlueJ, o mesmo código será criado para todas. Assim, vamos apagar esse código entre as linhas 10 e 32 e deixar somente a estrutura básica de toda classe em Java.

O resultado final deve ser como apresentado na figura abaixo.

bluej clean class.png

O código da classe está entre as linhas 8 e 11, o texto nas linhas 2 a 7 são comentários utilizados como documentação da classe. Você pode observar na linha 8 que a classe é definida pela palavra class seguida do nome que demos para a classe. As chaves nas linhas 9 e 11 são utilizadas para delimitar o início e fim do código da classe. Qualquer característica ou funcionalidade que desejarmos incluir na classe, precisam ser entre estas chaves.

Adicionando características a uma classe

Bem, agora que temos a estrutura da nossa primeira classe pronta, podemos começar a adicionar características nessa classe. Como já discutido no capítulo anterior, tais características dependem do finalidade do sistema ou ramo de atividade onde ele será utilizado. No caso do cliente da loja de móveis, algumas características que podemos identificar são: nome, CPF, sexo, email, endereço, cidade e telefone. Cada uma destas características nada mais são do que variáveis. Sabendo disso, precisamos então identificar o tipo de dado de cada uma delas. O email e endereço são claramente dados alfanuméricos (permitem letras e números). Em Java, String é o tipo que representa dados alfanuméricos (inclusive emojis 🙏).

Por outro lado, nome e cidade são claramente dados alfabéticos (permitem somente letras). No entanto, as linguagens de programação convencionalmente não possuem dados que permitam armazenar apenas letras [1]. Assim, utilizamos o tipo String para tal finalidade.

Atributos: as características de uma classe

As características de uma classe são mais um dos princípios básicos de POO, chamadas de atributos, campos ou propriedades. Atributos é um termo que utilizamos no cotidiano. Por exemplo, uma pessoa pode ter como atributos o bom humor, paciência, beleza, estatura, etc. Assim, não é um termo específico da POO. Atributos nada mais são do que variáveis que possuem algumas características especiais que veremos ao longo do curso. Como toda variável, cada atributo precisa de um tipo e um nome.

Dos atributos apresentados acima, o nome, CPF, email, endereço, cidade e telefone são alfanuméricos, logo do tipo String. No caso do sexo, como ele pode ser representado por apenas uma letra, o tipo que permite armazenar no máximo uma letra é o char. Assim, podemos declarar tais atributos na classe Cliente como apresentado abaixo:

public class Cliente {
    String nome;
    String cpf;
    String email;
    String telefone;
    char sexo;
    String endereco;
    String cidade;
}

O código da classe Cliente apresenta a forma mais básica de declaração de atributos. Este é o processo para declaração de variáveis em Java, seguindo o formato tipo nomeDaVariavel;.

Observe que o tipo String tem inicial maiúscula e o char minúscula. Tais tipos são realmente desta forma, não é um erro. Lembre-se que falamos anteriormente que classes, por convenção, tem inicial maiúscula. Logo, pode-se deduzir que String nada mais é do que uma classe específica da linguagem Java, enquanto char é um tipo primitivo como você pode ter aprendido em aulas de algoritmos ou outra linguagem de programação.

Um tipo primitivo como char e int permitem declarar variáveis que possuem apenas dados. Uma classe como String possui dados (atributos) e funcionalidades.

Apesar do código mostrado ser a forma mais básica para declaração de atributos, tal forma não é recomenda em POO, pois não estamos definindo nenhum controle de acesso aos nossos atributos. Como a prática tem mostrado que quando apresentamos uma forma mais simples porém menos adequada de se escrever código, alunos tendem acabam se habituando à primeira forma e sempre escrevendo código daquele jeito. Assim, para evitar a aquisição deste mau hábito, os atributos devem ser declarados como privados, utilizando a palavra private, como mostrado no código abaixo. Controle de acesso só será abordado no mais adiante. Por enquanto, não se preocupe em entender o porquê disto.

public class Cliente {
    private String nome;
    private String cpf;
    private String email;
    private String telefone;
    private char sexo;
    private String endereco;
    private String cidade;
}
Uso de chaves { }

Em Java, chaves são utilizadas para delimitar um bloco de código, como um if, for, função, classe, etc. A chave pode ser aberta em uma linha separada, como:

public class Cliente
{

}

ou na mesma linha que define o início de um bloco, como:

public class Cliente {

}

O formato definido pela Oracle nas Conveções de Código Java é o último. Grandes empresas como Google e Twitter também recomendam este padrão.

O local de abertura das chaves é uma grande discussão entre desenvolvedores. Há vantagens e desvantagens em relação à clareza do código dependendo de onde as chaves são colocadas. Os guias apresentados nos links acima abordam um pouco esta discussão, além de outros artigos como este.

Conveções ao declarar atributos

Temos diversos atributos do tipo String. Apesar de ser possível declará-los todos em uma única linha como:

private String nome, cpf, email, endereco, cidade, telefone;

não é aconselhável fazer isto para atributos. Veremos posteriormente que atributos podem e devem ser documentados. Declarar vários atributos em uma mesma linha impedirá sua adequada documentação. Para variáveis convencionais (como variáveis locais dentro de funções), não há problema algum em fazer isso. Apesar de ser repetitivo declarar atributos de um mesmo tipo em linhas diferentes, isto favorece a documentação do projeto e torna a listagem de atributos mais clara e organizada. A forma apresentada é de fato o padrão utilizado na indústria de software orientado a objetos (OO).

Outro ponto importante é que o nome de atributos começam com inicial minúscula, intercalando maiúscula quando o nome for composto. Veja os exemplos abaixo:

private String nome;
private String cidadeNatal;
private String cidadeResidencia;

Como falado anteriormente para classes e outros elementos da linguagem Java, não é recomendável utilizar acentos ao dar nomes a atributos.

Código duplicado é um dos maiores problemas no desenvolvimento de software. Existem princípios como o Don’t Repeat Yourself (DRY) que pregam que você não deve ter retrabalho, ficar escrevendo o mesmo código várias vezes. Ao declarar um atributo em cada linha, repetindo o tipo para cada um, não estamos duplicando código referente à funcionalidades do sistema. Estamos apenas utilizando um determinado tipo várias vezes. Veremos que reutilização de código é um dos pilares da POO.

Criando Objetos no BlueJ

Agora que temos nossa primeira classe criada no BlueJ, podemos fechar o editor de código e voltar para a tela inicial. Lembre-se que uma classe é um modelo a partir do qual podemos criar quantos objetos desejarmos. Para podermos criar objetos de uma classe, precisamos compilá-la primeiro.

Logo, na tela inicial do projeto podemos clicar no botão Compilar no lado esquerdo.

bluej compile.gif

Clicando neste botão, todas as classes criadas serão compiladas. Observe que após clicar em Compilar, o interior da classe muda, indicando que ela foi compilada.

Agora podemos criar objetos a partir das classes compiladas, neste caso somente a classe Cliente. Outra vantagem do uso do BlueJ para aprendizagem de POO é que não precisamos escrever código para testar nossas classes: para criar objetos e interagir com eles. Podemos fazer isso tudo pela interface gráfica do BlueJ.

Depois da classe Cliente ter sido compilada, podemos clicar com o botão direito sobre ela e escolher a opção new Cliente(). Se a classe não estiver compilada, tal opção não aparecerá.

Em seguida aparecerá uma tela para informarmos o nome do objeto a ser criado. O BlueJ já sugere um nome para o objeto que podemos deixar como está.

bluej new object.gif

Após clicar em OK o objeto criado aparece no canto inferior esquerdo da tela principal.

Agora já temos um objeto chamado cliente1 que segue a mesma estrutura definida pela classe Cliente, assim como uma casa deve seguir o modelo definido pelo projeto de engenharia.

Podemos clicar com o botão direito sobre um objeto e escolher Inspecionar, ou simplesmente dar dois cliques sobre o objeto. Assim, podemos ver os atributos de tal objeto. Como não definimos valores para essses atributos ao criarmos o objeto, o conteúdo apresentado pode não fazer o menor sentido para você e apenas indica que os atributos não receberam nenhum dado ainda.

bluej inspect object.gif

Com a imagem acima podemos rapidamente visualizar a estrutura dos objetos da classe Cliente. No entanto, para conseguirmos alterar os valores dos atributos, precisaremos escrever código para isto.

Criando novas classes

Agora que você já sabe como criar classes no BlueJ, vamos criar a classe Funcionario. Como citado anteriormente, acentos devem ser evitados. Tal classe terá muitos dos atributos que foram definidos para a classe Cliente, além dos seguintes atributos adicionais:

  • matricula do tipo int

  • cargo do tipo String

O código inicial da classe Funcionário deve ficar como apresentado abaixo. Lembre-se de criar os getter’s e setter’s para cada um dos atributos.

public class Funcionario {
    private String nome;
    private String cpf;
    private String email;
    private String telefone;
    private char sexo;
    private int matricula;
    private String cargo;
}

1. Apesar das linguagens convencionais não permitirem que uma variável armazene somente letras, é muito simples criar programas que permitem ao usuário digitar apenas letras em um campo.

results matching ""

    No results matching ""