Tutorial 1: Familiarização com o JDK, Eclipse e

Propaganda
Programação Orientada por Objectos
had, jvo
Tutorial 1: Familiarização com o JDK, Eclipse e Mooshak
Tutorial 1A: Java a partir da linha de comandos
0. Verificar se a máquina virtual e o compilador estão instalados e acessíveis em qualquer
ponto da árvore do directório.
0.1.
Windows: A partir do menu Start -> Run, escreva cmd e pressione <enter> de modo a
abrir a linha de comandos.
Linux: Numa consola em modo de texto ou abrindo uma consola virtual ou xterm no
ambiente gráfico.
0.2.
Na linha de comandos escreva:
javac -version
Se o compilador estiver instalado e acessível será mostrada a sua versão e um resumo dos
parâmetros do compilador, como por exemplo:
javac <current javac version>
javac: no source files
Usage: javac <options> <source files>
where possible options include:
-g
Generate all debugging info
(...)
0.3.
Agora, na mesma linha de comandos escreva:
java -version
Se a máquina virtual (JVM) de Java estiver instalada e acessível será mostrada a sua versão:
java version "<current java version>"
Java(TM) SE Runtime Environment (build …)
Java HotSpot(TM) 64-Bit Server VM (build …, mixed mode)
0.4.
Se as versões do compilador e da JVM (“Java Virtual Machine”) forem apresentadas o
JAVA SDK (JDK) está instalado podendo ser desenvolvidas e executadas aplicações
JAVA. Se Não forem apresentadas deve-se verificar se a instalação foi efectuada. Para isso
procurar o jdk em:
0.4.1.
C:\Program Files\Java\
(Windows)
/opt/
(Linux)
Se o directório do jdk existir verificar se o compilador e JVM estão presentes:
C:\Program Files\Java\jdk<version>\bin\java
C:\Program Files\Java\jdk<version>\bin\javac
(Windows)
/opt/jdk<version>/bin/java
/opt/jdk<version>/bin/javac
(Linux)
http://w3.ualg.pt/~jvo/poo
POO Tutorial 1 - 1
Programação Orientada por Objectos
had, jvo
Se estiverem é apenas necessário indicar no caminho de busca estas ferramentas, tal
como indicado no ponto 0.4.2.
Se não existirem é necessário instalar primeiro o JDK. O ficheiro de instalação para
Windows ou Linux pode ser obtido no site da Oracle, em:
http://www.oracle.com/technetwork/java/javase/downloads/index.html
Após efetuado o download executar o ficheiro de instalação.
Em sistemas Linux poderá também estar disponível através do gestor de pacotes de
instalação, o instalador do JDK, embora possa ser uma versão não tão atualizada
como a obtida no site da Oracle. Em sistemas baseados no Debian (Debian, ubuntu,
etc.) a instalação pode ser efetuada na linha de comandos com:
apt-get install openjdk-6-jdk
apt-get install openjdk-7-jdk
apt-get install oracle-java7-installer
0.4.2.
(JDK livre)
(JDK oracle)
Após a instalação poderá ser necessário indicar no caminho de busca as
ferramentas da linha de comandos. Para isso em Windows sobre o ícone My
Computer clicar com o botão esquerdo, ou de contexto, e escolher properties:
Editar a variável de ambiente path, de modo a acrescentar ao caminho de busca já
existente um ponto e vírgula e o caminho para o directório com as ferramentas do
SDK:
; C:\Program Files\Java\jdk<version>\bin\
http://w3.ualg.pt/~jvo/poo
POO Tutorial 1 - 2
Programação Orientada por Objectos
had, jvo
É necessário abrir uma nova linha de comandos para que seja atualizado o caminho
de busca e verificar se o compilador e a JVM já estão acessíveis escrevendo o seu
nome na linha de comandos, como indicado em 0.2 e 0.3.
Em Linux pode-se adicionar o caminho de busca ao ficheiro de perfil do sistema:
/etc/profile
No final deste ficheiro adicionar a linha seguinte e gravar:
export PATH = $PATH;/opt/jdk<versio>/bin
Este ficheiro é executado sempre que o sistema inicializa. Para evitar inicializar o
sistema apenas para atualizar o caminho de busca, podemos executar o ficheiro com
perfil do sistema (que é um script da shaell) na linha de comandos com:
.
/etc/profile
Nota: Repare-se que é necessário escrever um ponto final “.” antes do nome do
ficheiro para que este seja executado
Agora verificar se o compilador e a JVM já estão acessíveis escrevendo o seu nome
na linha de comandos, como indicado em 0.2 e 0.3.
http://w3.ualg.pt/~jvo/poo
POO Tutorial 1 - 3
Programação Orientada por Objectos
had, jvo
1. Java Hello World
Normalmente o primeiro programa que se apresenta numa dada linguagem de programação apenas
imprime uma frase no ecrã (o famoso Hello world). Abaixo encontra-se uma versão para Java:
// Ficheiro: HelloWorld.java
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello world!");
}
}
Repare-se que o ponto de entrada no programa, a função main ( ), ao contrário da linguagem
C/C++, tem de estar dentro de uma classe pública. O ficheiro com o código fonte deve ter o mesmo
nome desta classe, com extensão .java.
A função ou método void main (stirng args[]) deverá ser público para que possa ser acedido de
fora da classe e estático para que seja acessível mesmo sem que a classe seja instanciada.
Esta função não retorna nada, tendo, por isso, void como tipo de retorno. Como argumentos têm-se
um array de Strings onde se pode aceder aos parâmetros da linha de comandos.
1.1.
Criar um directório na área de utilizador, por exemplo: …\poo\HelloJava
~/poo/HelloJava
1.2.
Abrir um editor de texto, como por exemplo o Notepad, Notepad++, GEdit e escrever o
código acima e guardar com o nome: HelloWorld.java no directório já criado.
1.3.
Na linha de comandos compilar com:
javac HelloWorld.java
é criado o ficheiro HelloWorld.class, com código adequado a ser interpretado pela JVM.
1.4.
Para executar, na linha de comandos basta invocar a JVM indicando o ficheiro *.class que
se pretende executar sem extensão:
java
HelloWorld
Deve ser apresentado na linha de comandos a frase:
Hello world!
Nota: Mesmo na linha de comandos, ao invocar a JVM, devem ser respeitadas as letras
maiúsculas e minúsculas no nome da classe a executar.
http://w3.ualg.pt/~jvo/poo
POO Tutorial 1 - 4
Programação Orientada por Objectos
had, jvo
2. Distância entre 2 pontos no 1º quadrante
Pretende-se desenvolver um editor gráfico em que seja possível escolher dois pontos e calcular a
distância entre eles. Vamos admitir que neste editor os pontos têm coordenadas exclusivamente
inteiras positivas, como na figura seguinte:
Se os pontos A e B tiverem de coordenadas (xA, yA) e (xB, yB) respetivamente, a distância d entre
eles é dada por:
d = ( x A − xB ) 2 + ( y A − y B ) 2
Vamos começar por implementar a classe Point, que permite implementar a funcionalidade básica
indicada acima. Para isso:
2.1.
Criar um diretório na área de utilizador, por exemplo ..\poo\EditorGrafico em Windows e
~/ poo/EditorGrafico em Linux.
2.2.
Escrever o código da classe Point, e gravar no ficheiro Point.java no directório criado no
ponto anterior:
// File: Point.java
class Point {
private int _x_, _y_;
public Point(int x, int y) { setX(x); setY(y); }
public int getX() { return _x_; }
public int getY() { return _y_; }
public void setX(int x) { assert x>0; _x_ = x; }
public void setY(int y) { assert y>0; _y_ = y; }
public double dist (Point p) {
int dx = getX() - p.getX();
int dy = getY() - p.getY();
return Math.sqrt(dx*dx + dy*dy);
}
};
2.3.
Escrever o código do cliente, e gravar no ficheiro Client.java no mesmo directório:
public class Client {
public static void main (String[] args) {
Point A = new Point(1,1);
Point B = new Point(4,2);
System.out.println("Distância AB = " + A.dist(B));
}
}
http://w3.ualg.pt/~jvo/poo
POO Tutorial 1 - 5
Programação Orientada por Objectos
had, jvo
2.4.
Navegando para o directório onde estão os ficheiros fonte, compilar a Classe Point e a
classe Client:
javac Point.java
javac Client.java
ou apenas:
javac *.java
de qualquer forma resultam os ficheiro compilados:
Point.class
Client.class
2.5.
Para executar a aplicação, na linha de comandos, deve ser invocada a JVM para executar a
classe que contém o método main ():
java
Client
Deve ser apresentado na linha de comandos a distância entre os dois pontos.
http://w3.ualg.pt/~jvo/poo
POO Tutorial 1 - 6
Programação Orientada por Objectos
had, jvo
Tutorial 1B: Breve tutorial sobre o Eclipse
O Eclipse encontra-se instalado nos PCs da sala C1 1.53 tanto em Windows como em Linux. Em
Windows deverá existir um atalho no ambiente de trabalho, semelhante a:
Se não existir o atalho, o executável do Eclipse tipicamente encontra-se em:
C:\Eclipse\eclipse.exe
ou
C:\Program Files\Eclipse\eclipse.exe
Em Linux pode aceder-se ao Eclipse a partir do ambiente gráfico Gnome no menu Applications
sub-menu Programming ou development ou iniciá-lo correndo o executável eclipse que se
encontra no diretório de instalação.
0. Instalação do IDE Eclipse
Caso pretenda instalar o Eclipse no seu computador:
0.1.
O Eclipse necessita que o JDK esteja previamente instalado como indicado na primeira
parte deste tutorial, no ponto 0.4.
0.2.
Para instalação do eclipse deve ser efetuado o download do ficheiro de instalação de:
http://www.eclipse.org/downloads/
Existem várias versões. Para POO recomenda-se a instalação do
Eclipse IDE for Java Developers
A instalação é simples, consiste apenas em descompactar o ficheiro de instalação para um
diretório. O executável do eclipse ficará na raiz desse diretório com o nome eclipse.exe no
Windows ou apenas eclipse em Linux.
Opcionalmente pode ser criado um atalho para o IDE no ambiente de trabalho.
Em sistemas Linux poderá também estar disponível através do gestor de pacotes de
instalação, o instalador do Eclipse, embora possa ser uma versão não tão atualizada como a
obtida no site do Eclipse indicado acima. Em sistemas baseados no Debian (Debian,
ubuntu, etc.) a instalação pode ser efetuada na linha de comandos, com:
apt-get install eclipse
http://w3.ualg.pt/~jvo/poo
POO Tutorial 1 - 7
Programação Orientada por Objectos
had, jvo
1. Execução do IDE Eclipse
1.1.
Ao se executar o Eclipse é perguntado qual o WorkSpace que o utilizador pretende. Este
consiste na raiz de uma árvore de directórios onde serão guardadas as aplicações
desenvolvidas com este IDE.
Deve ser escolhido um directório na área de utilizador, por exemplo: y:\disk1\WorkSpace.
Na janela pode ser colocado uma marca para evitar que esta pergunta se faça sempre que o
IDE inicia:
Pode-se verificar que no directório y:\disk1\WorkSpace, foi criado o sub-directório
.metada.
Posteriormente o WorkSpace pode ser alterado a partir do menu window->preferences,
alterando as preferências do item:
General
Workspace
StartUp and ShutDown
Prompt for WorkSpace on StartUp
1.2.
Ao executar-se o Eclipse surge um ecrã de boas-vindas que permite aceder a alguns tutorais
sobre o ambiente, como por exemplo, criar um projecto simples, ou desenvolver aplicações
com GUI (graphical user interface). Este ecrã pode ser acedido também a partir do menu:
Help -> Welcome
Ajuda para o IDE e para o Visual Editor (se instalado) pode ser acedida também em:
Help -> Help contents
http://w3.ualg.pt/~jvo/poo
POO Tutorial 1 - 8
Programação Orientada por Objectos
had, jvo
2. Java Hello World no Eclipse
2.1.
Executar o IDE eclipse e criar um novo projecto a partir do menu:
File -> New -> Project
Na janela que se abre escolher Java Project e pressionar o botão next.
Na janela seguinte escrever o nome do projecto: HelloWorld e pressionar o botão Finish.
Repare que no WorkSpace foi criado um directório com o nome do projecto HelloWorld, e
dois ficheiros que descrevem o projecto: .classpath e .project, e portanto não devem ser
apagados nem modificados directamente.
2.2.
Na zona esquerda do IDE a Janela PackageExplorer têm uma entrada com o nome do
projecto criado. O IDE suporta alguns templates para o código fonte, de modo a poupar ao
programador que repita o mesmo código sempre que deseja criar um novo módulo do
programa. Assim, como o método main () deve estar dentro de uma classe, clicando no
nome do projecto no PackageEditor e escolhendo File -> new -> class abre-se uma janela
que permite criar o código base de uma dada classe.
No nome da classe colocar: HelloWorld e colocar uma marca em: public static void main
(String[] args) uma marca de modo que este método seja criado com o corpo vazio.
http://w3.ualg.pt/~jvo/poo
POO Tutorial 1 - 9
Programação Orientada por Objectos
had, jvo
Após pressionar Finish é criado no directório de projecto o ficheiro HelloWorld.java,
sendo também apresentado no centro do IDE:
public class HelloWorld {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
2.3.
Repare-se que o corpo do método main () tem um comentário: //TODO ..., indicando onde
deve ser escrito o código. Para terminar o código basta substituir esta linha por:
System.out.println("Hello world!");
2.4.
Aproveite para gravar com File -> save ou File -> Save all, ou apenas ctrl <S>.
2.5.
Para compilar e executar a partir do menu:
Run -> Run as -> Java Application
http://w3.ualg.pt/~jvo/poo
POO Tutorial 1 - 10
Programação Orientada por Objectos
had, jvo
Na parte inferior do IDE, na consola aparece a saída do programa, neste caso a frase:
HelloWorld.
Em caso de erro, na mesma posição do IDE no TAB problems surge a descrição do erro e
das linhas onde ocorreu.
3. Distância entre 2 pontos no 1º quadrante no Eclipse
Vamos agora implementar o código para a distância entre dois pontos já apresentado na primeira
parte deste tutorial no Eclipse:
3.1.
No IDE eclipse e criar um novo projecto a partir do menu:
File -> New -> Project
Na janela que se abre escolher Java Project e pressionar o botão next.
Na janela seguinte escrever o nome do projecto: GraphEditor e pressionar o botão Finish.
No WorkSpace é criado o directório do projecto: GraphEditor.
3.2.
No PackageExplorer clicar no nome do projecto e escolher File -> new -> class abre-se
uma janela onde basta dar o nome da classe em Name: Point e pressionar Finish.
3.3.
Repetir o ponto anterior para criar a classe Client. No PackageExplorer, à esquerda no
IDE, aparecem agora referências a ambos os ficheiros do projecto.
3.4.
Clicando no nome de qualquer classe no PackageEditor abre um editor de texto para cada
ficheiro. Copie o código fonte apresentado na primeira parte deste tutorial para os ficheiros
respetivos. Após ter sido copiado o código, grave com File -> Save all.
3.5.
Para compilar e executar, seleccionar no PackageEditor o nome da classe, ou do ficheiro,
que contém o método main(), e a partir do menu:
Run -> Run as -> Java Application
Em baixo no IDE, na consola aparece a distância entre os dois pontos:
http://w3.ualg.pt/~jvo/poo
POO Tutorial 1 - 11
Programação Orientada por Objectos
had, jvo
Distância AB = 3.1622776601683795
http://w3.ualg.pt/~jvo/poo
POO Tutorial 1 - 12
Programação Orientada por Objectos
had, jvo
Tutorial 1C: Breve tutorial sobre o Mooshak
0. Vamos agora usar o Mooshak para verificar a correção de um programa que corresponde
a uma nova versão do problema da distância entre dois pontos apresentado anteriormente.
O problema a resolver é apresentado no fim deste tutorial, em anexo.
0.1.
Antes de mais inscreva-se num turno e num grupo. Use o link disponível na tutoria
eletrónica ou http://www.deei.fct.ualg.pt/POO/Entregas
0.2.
Depois,
aceda
ao
mooshak
através
http://mooshak.deei.fct.ualg.pt/~mooshak
0.3.
0.4.
do
link
da
tutória
ou
Para obter User/Password clique em Register [for On-line Contest]
0.3.1. Em Contest, selecione POO 2015/16
0.3.2. Em Group, selecione a sua turma
Em Name, escreva POO1516t<i>G<j> onde <i> é a sua turma prática (A ou B) e <j> é o
seu
número
de
grupo,
usando
os
dados
fornecidos
em
http://www.deei.fct.ualg.pt/POO/Entregas.
0.4.1. Em Email, escreva o endereço de correio eletrónico de um dos elementos do grupo
para onde será enviada a password.
0.5.
Depois de efetuado o login, pode escolher, entre outras coisas, o seguinte:
0.5.1. Problema – Escolha A – Tutorial 1
0.5.2. Visualizar (View) – lista o enunciado do problema selecionado
0.5.3. Perguntar (Ask) – coloque aqui as suas questões sobre o problema selecionado
0.5.4. Escolher ficheiro … Submeter (Submit) – permite fazer o upload do ficheiro com o
código java. Neste momento, vamos submeter sempre um único ficheiro de código.
0.5.5. Depois de devidamente testado, faça o upload do seu ficheiro .java submetendo-o.
0.5.6. Aguarde pela resposta do Mooshak e veja no Help o seu significado, se necessário.
Alguns aspetos práticos
(Extraídos de http://ctp.di.fct.unl.pt/~amd/cpn/2007tiup/etapa5/praticos.html)
<quote>
Dados de entrada
Os dados de entrada, usados para testar as soluções, são lidos da entrada padrão. Consistem em
texto cuidadosamente formatado para ser simples de processar:
• Normalmente, nas primeiras linhas dos dados de entrada surgem alguns números inteiros que
anunciam o tamanho das diversas partes do texto que se segue. Isso evita a necessidade de
testar a condição de "fim-de-ficheiro", durante a leitura dos dados.
• A última linha do ficheiro está sempre devidamente terminada por uma mudança de linha.
• Espaços em branco, quando usados, são sempre considerados como separadores. Os espaços
em branco nunca ocorrem em grupos. Uma linha nunca começa com um espaço em branco.
Uma linha nunca acaba com um espaço em branco.
http://w3.ualg.pt/~jvo/poo
POO Tutorial 1 - 13
Programação Orientada por Objectos
had, jvo
Note que as linhas com números inteiros que ocorrem no início dos dados de entrada devem
ser consumidas bem até ao fim para evitar desalinhamentos na leitura dos dados subsequentes.
Eis como isso se faz em Java:
import java.util.* ;
Scanner sc = new Scanner(System.in);
/* Aviso: nunca crie mais do que um Scanner sobre o input. */
int n = sc.nextInt();
sc.nextLine();
/* Salta a mudança de linha. */
• Supondo que os dados se iniciam por uma linha contendo dois inteiros separados por um
espaço em branco:
import java.util.* ;
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
sc.nextLine();
/* Salta a mudança de linha. */
Dados de saída
Os dados de saída, produzidos pelos programas submetidos aos mooshak, são escritos na saída
padrão. É necessário respeitar rigorosamente o formato exigido no enunciado. Qualquer desacerto,
mesmo ligeiro, é suficiente para que um programa seja classificado como "Presentation error".
Note que não é possível detectar visualmente certas anomalias nos dados de saída. Por exemplo: um
espaço em branco no final duma linha, uma linha em branco no final dos dados, a omissão da
mudança de linha na última linha dos dados. Todas estas situações são inaceitáveis e provocam um
"Presentation error".
</quote>
http://w3.ualg.pt/~jvo/poo
POO Tutorial 1 - 14
Programação Orientada por Objectos
had, jvo
Submissão ao Mooshak
Para submissão ao Mooshak temos duas hipóteses ou submetemos um único ficheiro .java ou um
ficheiro compactado .zip ou .gz
Hipótese ficheiro .java: o programa completo é integralmente incluído num único ficheiro de
extensão .java; é esse ficheiro que é submetido ao mooshak.
O conteúdo possível de desses ficheiros é:
1. opcionalmente, uma diretiva package;
2. zero ou mais diretivas import;
3. uma ou mais definições de classes, sendo que uma e só será pública e terá o mesmo nome do
ficheiro.
Hipótese ficheiro compactado: Compacte o diretório raiz do código fonte src (e todos os subdiretorios) num arquivo .zip ou .gz; é esse ficheiro que é submetido ao mooshak. Por defeito, o
diretório raiz está em Workspace, num subdirectório com o nome do projeto:
…/<Workspace>/<Nome projeto>/src
Avisos do Compilador
Alguns compiladores geram avisos (warnings) quando encontram caracteres que não conseguem
identificar, mesmo nos comentários. Isto sucede com caracteres acentuados como os portugueses
(por vezes pode ser apenas uma questão de codepage diferente entre o sistema onde foi escrito o
código e o sistema onde é compilado).
O Mooshak pode estar configurado para abortar a compilação não só quando o compilador encontra
erros no código mas também quando o compilador gera avisos, sendo indicado “Compilation
error”.
Por isso recomenda-se que se evite a utilização no código fonte de caracteres acentuados
mesmo nos comentários (no caso geral caracteres cujo código ASCII é superior a 127).
http://w3.ualg.pt/~jvo/poo
POO Tutorial 1 - 15
Programação Orientada por Objectos
had, jvo
Anexo: Distância inteira entre dois pontos
Desenvolva um programa que, dados dois pontos, calcule a parte inteira da distância entre eles. Os
pontos têm coordenadas exclusivamente inteiras positivas, como na figura seguinte.
Se os pontos A e B tiverem de coordenadas (xA, yA) e (xB, yB) respetivamente, a distância d entre
eles é dada por d = ( x A − xB ) 2 + ( y A − y B ) 2
Entrada
A entrada é composta por duas linhas.
A primeira linha contem dois inteiros, XA, YA, representado as coordenadas do ponto A, 0 <= XA
<= 1000, 0 <= YA <= 1000.
A segunda linha é em tudo idêntica à primeira, representando as coordenadas do ponto B.
Saída
A saída tem uma única linha, que contém a parte inteira da distância entre os dois pontos dados.
Exemplo de Entrada
11
42
Exemplo de Saída
3
http://w3.ualg.pt/~jvo/poo
POO Tutorial 1 - 16
Download