Este vai ser o meu primeiro artigo no Pplware, como tal, antes de mais peço desculpa por qualquer parte deste post “menos bem conseguida”. Quero-vos falar da Linguagem de Programação (LP) Java. O Java é uma LP object-oriented que surgiu no início dos anos 90, criada pela Sun.
Esta é uma LP muito popular no mundo da programação como podemos ver pela tabela seguinte:
Obviamente, dirão alguns, estas estatísticas poderão estar a mostrar resultados tendenciosos mas, o que é certo é que qualquer que seja a fonte que encontrem, encontrarão sempre o Java pelo menos no top 5, o que diz muito das suas potencialidades.
Principais Vantagens
Não basta dizer que Java é bom só porque sim, quanto a mim, eis as principais “virtudes” do Java enquanto LP:
- Object-Oriented;
- Multi-Plataforma (“write once, run anywhere” – apesar de às vezes não ser bem assim);
- Garbage Collector;
- Sintaxe muito user-friendly e, quanto a mim, muito intuitiva mesmo para novatos;
- Programas muito bem estruturados devido à organização por packages e classes e, devido à capacidade de hierarquizar estas últimas;
- Bom mecanismo para apanhar e tratar excepções;
- Extensa comunidade de programadores o que facilita a resolução de problemas;
- Extensa API com packages para tudo e mais alguma coisa (Redes, Criptografia, Web-Services, Applets, Manuseamento de ficheiros, e muito muito mais do qual espero vir a ter tempo para falar futuramente).
O que eu preciso para programar em Java no meu PC
Para começar a programar em Java não precisa de muita coisa. Antes de mais precisa de fazer o download do JDK (atenção que somente o JRE – Java Runtime Environment – não serve) – Java Development Kit. Poderá fazê-lo do seguinte site: http://java.sun.com/products/archive/.
Em seguida, aconselho a instalação de um IDE – Integrated Development Environment – para desenvolver em Java. Para iniciar talvez um mais simples como o Notepad++ ou o GEdit seja o indicado, no entanto, se pretender avançar a fundo na programação em Java, deverá recorrer a uma ferramenta mais completa pois estas ajudam (e muito!) a aumentar a produtividade. Recomendo, pela minha experiência, o Netbeans (da Sun tal como o Java) ou, o meu preferido, Eclipse. Estes programas poderão ter uma curva de aprendizagem não muito acentuada inicialmente mas, o tempo investido nos mesmos acabará por compensar a longo prazo (no futuro vou tentar escrever uns quantos tutoriais acerca dos mesmos).
Estrutura e Sintaxe
Definição e Diferenças entre Classe e Objecto
Para programar em Java é fundamental perceber o que são classes e objectos. Sendo esta uma linguagem object-oriented, o que o programador faz é nada mais do que definir os objectos e as mensagens com que será possível comunicar com os primeiros.
Ou seja, poderemos considerar um objecto como que uma caixa enquanto que os métodos do objecto são os botões dessa caixa que ao “pressionar” despoletam acções dentro da mesma. Existem botões que poderão não estar disponíveis para carregar do exterior directamente pelo utilizador, só são pressionados pelas acções despoletadas internamente quando o utilizador carrega um dos botões a que tem acesso.
No caso da imagem anterior, o utilizador definiu o objecto tendo no seu interior os métodos A, B, C, D e E. Definiu que o utilizador teria acesso aos métodos A, B e C e, que ao “pressionar o botão A” este internamente accionaria o “botão D” e que, ao pressionar os “botões” B ou C, este accionam o “botão” E. Não é necessário haver acções internas interligadas, poderia-se definir um “botão F” possível de aceder do exterior da “caixa” que quando o utilizador pressiona-se limitava-se a realizar as suas acções.
Quanto às diferenças, se me perguntarem “O que entendes entre classe e objecto? Mas quais são as diferenças?”, eu diria que classe é um modelo ou especificação que define um tipo de objecto enquanto que o objecto em si é uma ferramenta, uma forma de comunicação entre o utilizador e o seu programa, ferramenta essa que apresenta um conjunto de variáveis e métodos definidos na classe. A comunicação é feita enviando mensagens para os objectos. Essas mensagens não são nada mais do que “chamar” os métodos que o objecto disponibiliza para o exterior.
Como definir uma classe
Uma classe em Java obedece – generalizando obviamente – à estrutura seguinte.
A primeira declaração é sempre o package onde a classe se insere (caso esteja dentro de algum obviamente). Em seguida são adicionados os imports de outras packages (bibliotecas) das quais pretendemos utilizar alguns objectos e respectivos métodos, na classe que estamos a definir.
O nome da classe é sempre igual ao nome do ficheiro onde ela está a ser criada (ou seja, o ficheiro teria o nome MinhaClasse.java).
O método com o mesmo nome da classe é nada mais do que o construtor desta. O construtor de uma classe é um método (função) especial que não retorna qualquer valor e que, é chamado sempre que se cria um objecto daquele tipo. Tudo o que estiver dentro do construtor é executado aquando da criação do objecto. Não é necessário definir um construtor uma vez que o Java assume um vazio por omissão. Ao invés, é possível definir vários construtores diferentes, ou seja, construtores que contenham diferentes argumentos de entrada.
E, para finalizar, declaramos e definimos todos os métodos da nossa classe. Caso este seja um ficheiro que será executado, deverá conter um método “especial”, o método main, que é declarado da forma indicada.
Comentários
Para comentar uma linha individualmente utiliza-se ‘//’, para comentar um bloco utiliza-se ‘/* texto a comentar */’.
Modificadores de Acesso
Os modificadores de acesso são palavras reservadas que, quando colocados na declaração de classes, métodos ou variáveis, modificam/limitam o modo como se pode aceder aos mesmos.
Existem os seguintes modificadores de acesso:
- private – só será possível aceder dentro da classe onde o método/variável foi criado(a);
- protected – acessível dentro do package onde foi feita a declaração através de uma subclasse;
- public – sem qualquer restrição de acesso;
- static – a declaração de um método ou de uma variável static serve para:
- aquando a declaração de uma variável dentro de uma classe, para que todas as instâncias de objectos dessa classe possam aceder a essa variável como sendo comum entre todas elas. Ou seja, quando alteram a variável numa das instâncias criadas, o seu valor será alterado em todas as instâncias daquele mesmo objecto;
- quando utilizado na definição de um método para que este seja utilizado apenas na sua classe e não nas instâncias da mesma.
Juntamente com estes últimos, podemos ainda utilizar dois outros modificador: abstract e final.
O abstract quando se aplica a métodos, serve para indicar que o método em causa deverá ser definido nas suas subclasses (classes que herdem a classe onde o método foi definido). No caso das classes, indica que a classe não está completamente definida e como tal não pode ser instanciada (utilizado, por exemplo, em Interfaces).
Já o final, utiliza-se para declarar constantes, ou seja, valores que não são alterados durante a execução de um programa.
Declaração de variáveis
Vamos agora ver alguns aspectos relacionados com a síntaxe da linguagem. A declaração das variáveis obedece à seguinte forma:
Ou seja,
Declarar e Utilizar Classes e Métodos
O que difere um método de outro em Java é a sua assinatura (nome, valor de retorno e parâmetros de entrada. Como tal, um método poderá ser definido da seguinte forma:
É possível utilizar-se um método de uma classe chamando o mesmo dentro dessa mesma classe se este for static ou, declarando um objecto do tipo ClasseDoMetodoAChamar e chamar o dito método (A.B – chama o método B sobre o objecto A, ou seja, o objecto A disponibiliza o método B para para ser invocado e nós invocamo-lo utilizando a notação objecto(ponto)método ).
Extends e Implements
Quando uma classe faz extends de uma outra classe, está a herdar todos os métodos e variáveis definidos na classe que foram criados nessa classe. No entanto, se essa última classe definir uma variável/método que já exista na classe herdada, será feito um override, ou seja, ignora a criação prévia na “classe pai” (o termo é superclasse). Vejam o exemplo seguinte:
O Java não suporta herança múltipla, ou seja, apenas pode “extender” uma classe. No entanto, pode implementar (implements) várias Interfaces como vamos ver.
Uma interface serve para “obrigar” uma classe a ter uma determinada estrutura que a implemente. Nesta apenas estão definidas as assinaturas dos métodos.
Nested Classes
São classes definidas dentro de classes e que serão utilizadas no contexto destas últimas.
Exemplos de Código
Mostro agora alguns exemplos de código Java:
Hello World
Soma 2 números
Compilar e executar os nossos programas
Para correr os programas que desenvolvemos, temos de primeiro compilar o ficheiro .java por nós criado e depois correr o executável gerado. Para tal:
Como compilar o programa?
% javac NomeFicheiro.java
Como executar o programa?
% java NomeFicheiro
Notas:
- O nome do ficheiro contendo código tem de ter o nome da classe executável mais a extensão .java
- A compilação da classe dá origem a um ficheiro com o mesmo nome, mas com a extensão .class
- Para executar, chama-se o nome da classe e não o nome do ficheiro (ex: java Hello e não java Hello.class)
Notas Finais
Nos próximos tutoriais irei dar a conhecer alguns aspectos mais “avançados” não mencionados neste tutorial. Espero que tenham gostado e que seja útil a alguém.